暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Oracle中,差异增量备份和累积增量备份的区别是什么?

DB宝 2020-04-20
3043


题目部分

在Oracle中,差异增量备份和累积增量备份的区别是什么?


     

答案部分


数据库备份可以分为完全备份和增量备份。完全数据文件备份是包含文件中所有已用数据块的备份。RMAN将所有块复制到备份集或映像副本中,仅跳过从未使用的数据文件块。完全映像副本可准确地再现整个文件的内容。完全备份不能成为增量备份策略的一部分;它也不能作为后续增量备份的基础。

增量备份就是将那些与前一次备份相比发生变化的数据块复制到备份集中。通过RMAN可以为单独的数据文件、表空间、或者整个数据库进行增量备份。增量备份是0级备份,其中包含数据文件中除从未使用的块之外的所有块;或者是1级备份,其中仅包含自上次备份以来更改过的那些块。0级增量备份在物理上与完全备份完全一样。唯一区别是0级备份可用作1级备份的基础,但完全备份不可用作1级备份的基础。要使用增量备份,必须先执行0级增量备份。

通过BACKUP命令中的INCREMENTAL关键字可指定增量备份,可以指定INCREMENTAL LEVEL[0|1]。在RMAN中建立的增量备份可以具有不同的级别,每个级别都使用一个不小于0的整数来标识,也就是在BACKUP命令中使用LEVEL关键字指定的,例如LEVEL = 0表示备份级别为0LEVEL = 1表示备份级别为1。每次进行增量备份仅操作那些发生了“变化”的数据块。RMAN中增量备份有两种:差异增量备份(DIFFERENTIAL)和累计增量备份(CUMULATIVE),它们的区别如下表所示:

方式

关键字

默认

说明

差异增量备份

DIFFERENTIAL

将备份上次进行的同级或低级备份以来所有变化的数据块,有同级备份同级,无同级备份低级

累积增量备份

CUMULATIVE

将备份上次进行的低级备份以来所有变化的数据块

差异增量备份和累计增量备份如下图所示:

执行0级增量备份的命令为:RMAN>BACKUP INCREMENTAL LEVEL 0 DATABASE;

执行差异增量备份的命令为:RMAN>BACKUP INCREMENTAL LEVEL 1 DATABASE;

执行累积增量备份的命令为:RMAN>BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;

可以对处于NOARCHIVELOG模式的数据库执行任何类型的备份(完全或增量)。当然,前提条件是数据库处于未打开状态。需要注意的是,数据库只能恢复到上次备份时的状态。只有当数据库处于ARCHIVELOG模式时,才可以将其恢复到上次提交事务处理时的状态。

下面作者给出全库备份的脚本:

 1[oracle@rhel6lhr ~]$ crontab -l
22 12 * * 1 /home/oracle/lhr/rman/rman_backup_full.sh
3[oracle@rhel6lhr ~]$ more /home/oracle/lhr/rman/rman_backup_full.sh
4export ORACLE_SID=orclasm
5export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
6export PATH=$ORACLE_HOME/bin:$PATH
7MYDATE=`date +'%Y%m%d%H%M%S'`
8BACKUP_DIR=/u05/oracle/oracle_bk/$ORACLE_SID
9
10
11rman target /  log /home/oracle/lhr/rman/log/rman_full_$MYDATE.log append <<EOF
12run
13{
14 allocate channel c1 type disk;
15 allocate channel c2 type disk;
16 backup database filesperset 4 format  '$BACKUP_DIR/full_%n_%T_%t_%s_%p.bak';
17 sql 'alter system archive log current';
18 backup archivelog all format '
$BACKUP_DIR/arch_%d_%T_%s_%p.bak' delete input;
19 backup current controlfile format '
$BACKUP_DIR/ctl_%d_%T_%s_%p.bak';
20}
21EOF
22
23rman target /  log /home/oracle/lhr/rman/log/rman_delete_$MYDATE.log append <<EOF
24 allocate channel for maintenance type disk;
25 allocate channel for maintenance type sbt_tape;
26 crosscheck copy; 
27 crosscheck archivelog all;
28 crosscheck backup; 
29 delete noprompt obsolete;
30 delete noprompt expired backup;
31EOF
32


下面给出增量备份的脚本,备份策略为周日0级全备,周四为1级增量备份,其它为2级增量备份:

  140 11 * * * /home/oracle/lhr/rman/run_rman_incremental.sh
2
3[oracle@rhel6lhr ~]$ more /home/oracle/lhr/rman/run_rman_incremental.sh
4sh /home/oracle/lhr/rman/rman_incremental.sh 2>&1  &
5[oracle@rhel6lhr ~]$ more  /home/oracle/lhr/rman/rman_incremental.sh
6########################################################################
7##   incremental_database_backup.sh      ##
8##   created by lhr                      ##
9##        2015-1-23                      ##
10## sun:0 Thu:1 others:2                  ##
11#########################################################################
12#!/bin/ksh 
13
14
15export LANG=en_US
16MYDATE=`date +'%Y%m%d%H%M%S'`
17MYDATE2=`date +'%Y-%m-%d %H:%M:%S'`
18CUSER=`id|cut -d "(" -f2|cut -d ")" -f1` 
19export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
20export PATH=$ORACLE_HOME/bin:$PATH
21export RMAN=$ORACLE_HOME/bin/rman
22export ORACLE_SID=orclasm
23export ORACLE_USER=oracle 
24BACKUP_DIR=/u05/oracle/oracle_bk/$ORACLE_SID
25RMAN_LOG_FILE=$BACKUP_DIR/log/rman_incremental_"$ORACLE_SID"_$MYDATE.log
26
27
28echo "-----------------$MYDATE2-------------------">$RMAN_LOG_FILE  
29echo "ORACLE_SID: $ORACLE_SID">>$RMAN_LOG_FILE
30echo "ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE
31echo "ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE
32echo "==========================================">>$RMAN_LOG_FILE
33echo "BACKUP DATABASE BEGIN......">>$RMAN_LOG_FILE
34echo "
                   ">>$RMAN_LOG_FILE
35chmod 666 $RMAN_LOG_FILE
36
37WEEK_DAILY=`date +%a`
38
39case  "
$WEEK_DAILY" in
40       "
Mon")
41            BAK_LEVEL=2
42            ;;
43       "
Tue")
44            BAK_LEVEL=2
45            ;;
46       "
Wed")
47            BAK_LEVEL=2
48            ;;
49       "
Thu")
50            BAK_LEVEL=1
51            ;;
52       "
Fri")
53            BAK_LEVEL=2
54            ;;
55       "
Sat")
56            BAK_LEVEL=2
57            ;;
58       "
Sun")
59            BAK_LEVEL=0
60            ;;
61       "
*")
62            BAK_LEVEL=error
63esac
64export BAK_LEVEL=$BAK_LEVEL 
65echo "
Today is : $WEEK_DAILY  incremental level= $BAK_LEVEL">>$RMAN_LOG_FILE
66
67RMAN_RUN_STR="

68        export BAK_LEVEL=$BAK_LEVEL 
69        export ORACLE_HOME=$ORACLE_HOME 
70        export ORACLE_SID=$ORACLE_SID
71        export NLS_DATE_FORMAT='YYYY-MM-DD HH24:mi:ss' 
72        $RMAN nocatalog TARGET sys/lhr log $RMAN_LOG_FILE append <<EOF
73        set echo on;
74        run
75        {
76                allocate channel c1 type disk;
77                allocate channel c2 type disk;
78                backup  incremental level= $BAK_LEVEL  skip inaccessible filesperset 5 Database format='$BACKUP_DIR/datafile_lev"$BAK_LEVEL"_%d_%I_%U_%T.bak'  tag='bk_df_lev"$BAK_LEVEL_$MYDATE"' ;
79                sql 'alter system archive log current';
80                backup archivelog all format='
$BACKUP_DIR/arch_%d_%I_%e_%U_%T.bak'  tag='bk_arc_$MYDATE'  skip inaccessible  filesperset 5 not  backed up 1 times  delete input;
81                backup current controlfile format='
$BACKUP_DIR/ctlfile_%d_%I_%U_%T.bak'  tag='bk_ctlfile_$MYDATE' ;
82                sql \"alter database backup controlfile to trace as ''$BACKUP_DIR/ctlfile_trace_"$ORACLE_SID"_$MYDATE.txt'' \";
83                backup spfile  format='
$BACKUP_DIR/spfile_%d_%I_%U_%T.bak' tag='bk_spfile_$MYDATE';
84                release channel c2;
85                release channel c1;
86        }
87        allocate channel for maintenance device type disk; 
88        report obsolete; 
89        crosscheck copy; 
90        crosscheck archivelog all;
91        delete noprompt obsolete; 
92        crosscheck backup; 
93        delete noprompt expired backup;
94        list backup summary;
95        release channel;
96        exit
97        EOF
98"
99
100# Initiate the command string 
101if [ "$CUSER" = "root" ] 
102then 
103    echo "Root Command String: $RMAN_RUN_STR" >> $RMAN_LOG_FILE     
104    su - $ORACLE_USER -c "$RMAN_RUN_STR" >> $RMAN_LOG_FILE 
105    RSTAT=$? 
106else 
107    echo "User Command String: $RMAN_RUN_STR" >> $RMAN_LOG_FILE     
108    /bin/sh -c "$RMAN_RUN_STR" >> $RMAN_LOG_FILE 
109    RSTAT=$? 
110fi 
111
112# --------------------------------------------------------------------------- 
113# Log the completion of this script. 
114# --------------------------------------------------------------------------- 
115if [ "$RSTAT" = "0" ] 
116then 
117    LOGMSG="ended successfully" 
118else 
119    LOGMSG="ended in error" 
120fi 
121
122echo >> $RMAN_LOG_FILE 
123echo Script $0 >> $RMAN_LOG_FILE 
124echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE 
125echo >> $RMAN_LOG_FILE 
126##/bin/mailx -s "RMAN Backup SID " daimm@sf-express.com < $RMAN_LOG_FILE 
127
128exit $RSTAT 
129


& 说明:

有关增量备份的更多内容可以参考我的BLOGhttp://blog.itpub.net/26736162/viewspace-2140902/

 



本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗



---------------优质麦课------------

详细内容可以添加麦老师微信或QQ私聊。



About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

DBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。


文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论