您的位置:首页 > 其它

增量备份的一些小细节总结

2013-12-28 10:27 399 查看

哪些对象支持增量备份

If you specify INCREMENTAL, then in the backupSpec clause you must set one of the following parameters: DATAFILE, DATAFILECOPY, TABLESPACE, or DATABASE. RMAN does not support incremental backups of control files, archived redo logs, or backup sets. (这里的backupsets并不是说你的对象被增量备份成backset,而是backset本身不能被增量备份) 即增量备份只支持DATAFILE, DATAFILECOPY, TABLESPACE, or DATABASE,而不支持control files, archived redo logs, or backup sets。 这里并不是语法上你不能写成例如:backup incremental level=1 archivelog all;语法上是可以的,能够执行,甚至Level是几都无所谓,没有0级也没关系。但只是没有增量备份的效果。一旦你这么做,它还是原样给你全部备份下来。

0级增量备份和全备份关联和区别。

关联:

An RMAN backup in which only modified blocks are backed up. Incremental backups are classified by level. A level 0 incremental backup performs the same function as a full backup in that they both back up all blocks that have ever been used. 如果备份对象是database,它们会备份所有的数据文件,是全库的备份(不包括归档日志文件),哪怕表空间是read-only的。这里要说一点:如果是1级备份,就会有可能跳过read-only的表空间对应数据文件,而不是你现在是read-only就会跳过。经试验验证,Oracle还是会检测你是否对数据文件有所改动,如果到下一个1级备份之前切成read-write,做了改动,又切回read-only。此时1级备份,Oracle是不会忽略那个改变过但此刻处于read-only的数据文件。除非你一直是read-only,没有改变,下次1级备份时才会忽略这个文件。)

区别:

The difference is that a full backup does not affect blocks backed up by subsequent incremental backups, whereas an incremental backup does affect blocks backed up by subsequent incremental backups.全备份不能被用作1级增量备份的基础另外还有说0级增量备份只备份了used block,而全备份备份了used and unused block,我自己没有查到比较权威资料,也没有在官方文档中翻到,可能是我粗心了。

下面贴一些实验简要过程:

先是创建了一个测试用的表空间

SQL> create tablespace test datafile 'E:\test.dbf' size 5M;
表空间已创建。
SQL> alter tablespace test read only;
表空间已更改。

进行0级备份

RMAN> BACKUP INCREMENTAL LEVEL=0 DATABASE;
・・
・略・
・・
・・

然后立即做1级备份

RMAN> BACKUP INCREMENTAL LEVEL 1 database ;
启动 backup于 19-12月-13
使用通道 ORA_DISK_1
正在略过数据文件 5;已经备份 1次
通道 ORA_DISK_1:正在启动增量级别 1 数据文件备份集
通道 ORA_DISK_1:正在指定备份集内的数据文件
输入数据文件:文件号=00001 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\SYSTEM01.DBF
输入数据文件:文件号=00002 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\SYSAUX01.DBF
输入数据文件:文件号=00003 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\UNDOTBS01.DBF
输入数据文件:文件号=00004 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\USERS01.DBF
通道 ORA_DISK_1:正在启动段 1 于 19-12月-13



通道 ORA_DISK_1:备份集已完成, 经过时间:00:00:03
完成 backup于 19-12月-13

此时对表空间进行修改

SQL> alter tablespace test read write;
表空间已更改。
SQL> create table TT
2 (name varchar2(2));
表已创建。
SQL> alter tablespace test read only;
表空间已更改。

再次尝试1级备份

RMAN> BACKUP INCREMENTAL LEVEL 1 database ;
启动 backup于 19-12月-13
正在启动全部恢复目录的 resync
完成全部 resync
使用通道 ORA_DISK_1
通道 ORA_DISK_1:正在启动增量级别 1 数据文件备份集
通道 ORA_DISK_1:正在指定备份集内的数据文件
输入数据文件:文件号=00001 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\SYSTEM01.DBF
输入数据文件:文件号=00002 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\SYSAUX01.DBF
输入数据文件:文件号=00003 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\UNDOTBS01.DBF
输入数据文件:文件号=00004 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\USERS01.DBF
输入数据文件:文件号=00005名称=E:\TEST.DBF
通道 ORA_DISK_1:正在启动段 1 于 19-12月-13
通道 ORA_DISK_1:已完成段 1 于 19-12月-13



通道 ORA_DISK_1:备份集已完成, 经过时间:00:00:04
完成 backup于 19-12月-13

这次1级备份中TEST表空间没有被忽略,可知Oracle检测了只读表空间的变化。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下是增量备份归档日志,注意先后顺序:

RMAN> backup incremental level=1 archivelog all;
启动 backup于 19-12月-13
当前日志已存档
使用通道 ORA_DISK_1
通道 ORA_DISK_1:正在启动归档日志备份集
通道 ORA_DISK_1:正在指定备份集内的归档日志
输入归档日志线程=1序列=134 RECID=42 STAMP=834597148
通道 ORA_DISK_1:正在启动段 1 于 19-12月-13
通道 ORA_DISK_1:已完成段 1 于 19-12月-13
段句柄=G:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\GUJUNPU\BACKUPSET\2013_12_19\O1_MF_ANNNN_TAG20131219
T163230_9C5CRZ57_.BKP标记=TAG20131219T163230 注释=NONE
通道 ORA_DISK_1:备份集已完成, 经过时间:00:00:03
完成 backup于 19-12月-13

RMAN> backup incremental level=0 archivelog all;
启动 backup于 19-12月-13
当前日志已存档
使用通道 ORA_DISK_1
正在跳过归档日志文件 G:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\GUJUNPU\ARCHIVELOG\2013_12_19\O1_MF_1_
134_9C5CRTP2_.ARC; 已经备份 1 次
通道 ORA_DISK_1:正在启动归档日志备份集
通道 ORA_DISK_1:正在指定备份集内的归档日志
输入归档日志线程=1序列=135 RECID=43 STAMP=834597170
通道 ORA_DISK_1:正在启动段 1 于 19-12月-13
通道 ORA_DISK_1:已完成段 1 于 19-12月-13
段句柄=G:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\GUJUNPU\BACKUPSET\2013_12_19\O1_MF_ANNNN_TAG20131219
T163251_9C5CSN7Z_.BKP标记=TAG20131219T163251 注释=NONE
通道 ORA_DISK_1:备份集已完成, 经过时间:00:00:01
完成 backup于 19-12月-13

归档日志增量备份可以执行,但与level无关,不依赖0级就可以1级

后来我有又查看刚刚的两个归档日志备份的大小。并且上面有句跳过归档日志文件XX,有点增量的意味。
我有做测试,先level0后level1,效果一样:后面会跳过前面已经备份了的,文件较小。
我直接 backup archivelog all;做测试而不加上 incremental level什么的,效果一样。其实跟增量毫无关系,
对归档日志的备份本身就是按照增量的方式进行的。

小插曲

在做第一个0级备份的时候出现了这样的差错:
RMAN> BACKUP INCREMENTAL LEVEL=0 DATABASE;

启动 backup于 19-12月-13
正在启动全部恢复目录的 resync
完成全部 resync
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=134设备类型=DISK
通道 ORA_DISK_1:正在启动增量级别 0 数据文件备份集
通道 ORA_DISK_1:正在指定备份集内的数据文件
输入数据文件:文件号=00001 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\SYSTEM01.DBF
输入数据文件:文件号=00002 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\SYSAUX01.DBF
输入数据文件:文件号=00003 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\UNDOTBS01.DBF
输入数据文件:文件号=00004 名称=G:\APP\ADMINISTRATOR\ORADATA\GUJUNPU\USERS01.DBF
输入数据文件:文件号=00005 名称=E:\TEST.DBF
通道 ORA_DISK_1:正在启动段 1 于 19-12月-13
RMAN-03009: backup命令 (ORA_DISK_1通道上,在 12/19/2013 10:38:24上)失败
ORA-19809:超出了恢复文件数的限制
ORA-19804:无法回收 52428800字节磁盘空间 (从 2147483648限制中)
继续执行其他作业步骤,将不重新运行失败的作业
通道 ORA_DISK_1:正在启动增量级别 0 数据文件备份集
通道 ORA_DISK_1:正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1:正在启动段 1 于 19-12月-13
通道 ORA_DISK_1:已完成段 1 于 19-12月-13
段句柄=G:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\GUJUNPU\BACKUPSET\2013_12_19\O1_MF_NCSN0_TAG20131219
T103608_9C4Q14G4_.BKP标记=TAG20131219T103608 注释=NONE
通道 ORA_DISK_1:备份集已完成, 经过时间:00:00:01
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================

RMAN-03009: backup 命令 (ORA_DISK_1 通道上,在 12/19/2013 10:38:24 上)失败
ORA-19809: 超出了恢复文件数的限制
ORA-19804: 无法回收 52428800字节磁盘空间 (从 2147483648限制中)
这个原因是我的数据库归档文件默认就是存在闪回恢复区里的(log_archive_dest_1 location=use_db_recovery_file_dest)。
而闪回恢复区受db_recovery_file_dest_size大小限制,默认2G。
归档日志文件会在恢复区下见一个文件夹ARCHIVELOG,里面以日期作为文件夹再储存。而备份集是恢复区下的一个BACKUPSET
文件夹下,也是以日期作为文件夹再储存。总和大于2G,所以报错。
一般是扩大闪回恢复区,我的归档日志文件不重要,所以就像下面一样直接删了。
RMAN> delete archivelog all;
更多0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: