5.Creating Backups with RMAN
创建备份集
RMAN> backup as backupset format '/u01/app/oracle/backup/rmanbk/df_%d_%s_%p.bus' tablespace users;
创建镜像(image)拷贝
RMAN> BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf';
RMAN> BACKUP AS COPY ARCHIVELOG LIKE '/u01/app/oracle/backup/rmanbk/arch%';
两者之间的区别:
备份集备份:只备份使用过的数据块
镜像备份:所有的数据块都备份,使用switch可以加快恢复的速度
创建全库备份
全库备份包括:所有的数据文件、控制日志、归档日志文件、参数文件,可以使用备份集备份和镜像备份
备份集全库备份:
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO disk;
RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET;
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/app/oracle/backup/rmanbk/%d_%s.dbf';
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;--备份完归档之后删除归档
也可以直接发出备份集备份:
RMAN> backup as backupset database plus archivelog delete input;
镜像全库备份:
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO disk;
RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COPY;
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;--备份完归档之后删除归档
也可以直接发出镜像备份:
RMAN> backup as copy database plus archivelog delete input;
完全备份:对所有使用过的数据块进行备份,它不能是增量备份的一部分
backup as backupset database;
oracle中提供了增量备份,有两种级别:level 0和level 1
level 0:对所有使用过的数据块进行备份,并且将备份标记为level 0,它可以是增量备份的一部分
level 1:有两种level 1备份
1. 差异增量备份:默认的增量备份类型,它只备份最近一次level 0或者level 1备份之后发生过变化的数据块
2. 累积增量备份:它只备份最近一次level 0备份之后发生过变化的数据块
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;--level 0完全备份
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE; --差异增量level 1备份
RMAN> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE; --累积增量level 1备份
快速增量备份:使用块跟踪,如果启用了块跟踪的功能,oracle会自动的将上次增量备份之后发生过变化的数据块的地址写入一个跟踪文件中,这样可以提高增量备份的速度
启动块跟踪:
ALTER DATABASE
{ENABLE|DISABLE} BLOCK CHANGE TRACKING
[USING FILE '...']
SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/app/oracle/blocktr';
更改文件的名称:
SQL> shutdown immediate;
SQL> startup mount
SQL> ALTER DATABASE RENAME FILE '/u01/app/oracle/blocktr' TO '/u01/app/oracle/btr';
SQL> alter database open;
ls /u01/app/oracle/btr--发现文件已经改名
关闭块跟踪:
SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
如果设置了DB_CREATE_FILE_DEST,可以不用指定文件的位置:
SQL> alter system set DB_CREATE_FILE_DEST='/u01/app/oracle';
SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING; cd /u01/app/oracle/ORCL/changetracking
ls
在数据库中查看块跟踪文件的位置:
SQL> select * from v$block_change_tracking;
查看块跟踪的效率:
没有使用块跟踪:
SQL> select * from v$block_change_tracking;
RMAN> backup incremental level 0 database;
RMAN> backup incremental level 1 database;
SQL> SELECT file#, avg(datafile_blocks), avg(blocks_read),
avg(blocks_read/datafile_blocks)* 100 AS PCT_READ_FOR_BACKUP, avg(blocks)
FROM v$backup_datafile
WHERE incremental_level > 0
GROUP BY file#; SQL> SELECT file#, avg(datafile_blocks), avg(blocks_read),
avg(blocks_read/datafile_blocks)* 100 AS PCT_READ_FOR_BACKUP, avg(blocks)
FROM v$backup_datafile
WHERE used_change_tracking = 'YES' AND incremental_level > 0
GROUP BY file#;
使用块跟踪:
SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;
SQL> select * from v$block_change_tracking; RMAN> delete noprompt backup;
RMAN> backup incremental level 0 database;
RMAN> backup incremental level 1 database; SQL> SELECT file#, avg(datafile_blocks), avg(blocks_read),
avg(blocks_read/datafile_blocks)* 100 AS PCT_READ_FOR_BACKUP, avg(blocks)
FROM v$backup_datafile
WHERE used_change_tracking = 'YES' AND incremental_level > 0
GROUP BY file#;
执行代理副本
使用RMAN BACKUP命令的PROXY选项可以请求MML 执行文件的副本
语法:
BACKUP [AS BACKUPSET] … PROXY [ONLY] DATABASE|TABLESPACE....
PROXY ONLY选项对于备份由代理完成的介质管理器和存储网络非常有用,这可以明显地减少了存储网络通信量
一些介质管理产品可完善地管理Oracle 数据文件与备份设备之间的所有数据移动
某些产品在存储子系统与介质子系统之间使用了高速连接,从而可大幅减少主数据库服务器的备份负载
这一点十分有用,因为复制是在SAN 上而不是在LAN 上执行的。除了通过LAN 在MML 之间传送状态之外,RMAN 此时已不再涉及操作
使用BACKUP COPIES创建双份备份集
RMAN> BACKUP AS BACKUPSET DEVICE TYPE DISK COPIES 2 INCREMENTAL LEVEL 0 tablespace users format='/u01/app/oracle/backup/rmanbk/%d_%s_%c.dbf';
使用BACKUP COPIES创建双向备份集
为了创建双份备份集,可使用带有COPIES选项的BACKUP命令覆盖其它COPIES或DUPLEX设置
要使用BACKUP COPIES创建双向备份,请执行以下步骤:
1. 使用BACKUP命令的COPIES选项指定完全一样的副本的数量
2. 发出LIST BACKUP命令来验证备份。
对备份集备份
RMAN> BACKUP DEVICE TYPE DISK AS BACKUPSET DATABASE PLUS ARCHIVELOG;--将数据库备份到磁盘
RMAN> BACKUP DEVICE TYPE sbt BACKUPSET ALL;--再将备份集从磁盘备份到磁带
创建多段备份
为超大型文件配置备份和还原
单个文件的多部分备份:
• 由RMAN 创建,具有指定的大小值
• 独立进行处理(串行或并行)
• 生成多片段备份集
• 提高了备份的性能
为超大型文件配置备份和还原
Oracle 数据文件最大为128 TB。通常,RMAN 备份的最小单元是整个文件。这对于如此大的文件不适用。
RMAN 可以选择将大型文件拆分为多个部分,然后单独对这些部分进行备份和还原。
这是通过创建多部分备份实现的,这种备份将为备份集生成的文件拆分为多个独立文件。
这种备份仅适用于备份集,不适用于映像副本。
每个文件部分都是文件中一系列连续的块。可按串行或并行方式独立处理每个文件部分。
将文件备份到各单独部分可以提高备份操作的性能,还允许重新启动大型文件备份。
多部分备份作业可生成一个多片段备份集。每个片段都包含一个文件部分。
多部分备份的所有部分的大小都相同(最后一部分除外)。每个文件最多有256 个部分。
注:对驻留在少量磁盘上的大型文件进行备份时,不宜使用很高的并行度,因为这会使并行操作的作用失效;
同时对同一磁盘设备进行多个访问会导致争用。
此功能已内置到RMAN 中。除Oracle Database 11g的常规安装外,不需要其它安装。因为早期版本无法还原多部分备份,所以必须至少将COMPATIBLE设置为11.0。
创建RMAN 多部分备份
RMAN> run {
allocate channel c1 type disk format '/u01/app/oracle/backup/rmanbk/backup1/%U';
allocate channel c2 type disk format '/u01/app/oracle/backup/rmanbk/backup2/%U';
backup section size 200m datafile 5;
}
该 RMAN命令分配两个通道并在两个通道上并行备份用户的表空间,每个通道占用数据文件的一个 500MB 的段并以
并行方式备份该文件,这加快了大型文件的备份速度
以这种方式备份时,备份的内容也显示为段
RMAN> list backup of datafile 6;
创建RMAN多分区备份
BACKUP <options> SECTION SIZE <integer> [K | M | G]
VALIDATE DATAFILE <options> SECTION SIZE <integer> [K | M | G]
RMAN> BACKUP DATAFILE 5 SECTION SIZE = 25M TAG 'section25mb';
创建归档备份
如果需要在指定时间内保留联机备份,RMAN 通常会假定用户可能需要在自执行该备份以来到现在之间的任意时间执行时间点恢复。为了满足这一要求,RMAN 会在此时段内保留归档日志。但是,可能仅需要在指定的时间(如两年)内保留特定备份(并使其保持一致和可恢复)。用户不打算恢复到自执行该备份以后的某一时间点,只是希望能够正好恢复到执行该备份的确切时间。此外,用户还需要维护保留策略以使备份区井然有序,因此无法使备份恢复到两年前。为了满足保留数据的商业或法律要求,通常需要这么做。
归档备份可以解决这一问题。如果将某一备份标记为归档备份,该属性将覆盖为此备份目的配置的所有保留策略。保留归档备份时,可将其指定为仅在某一特定时间过时,也可以将其指定为永不过时。如果要指定后者,则需要使用恢复目录
KEEP子句会创建一个归档备份,此备份是某个时间点的数据库快照。仅保留将此备份还原至一致状态所需的重做日志。在备份完成后发出的RESTORE POINT子句确定保留的重做日志数(足以将备份还原到RESTORE POINT时间)。
归档备份还可保证包含还原备份所需的全部文件。RMAN 包含数据文件、SPFILE、归档日志文件(仅限恢复联机备份所需的那些文件)及相关自动备份文件。所有这些文件都必须保存到同一介质系列(或磁带组)中。
此外,还可指定要创建的还原点,该还原点与归档备份具有相同的SCN。实际上,这为执行备份的时间点提供了一个有意义的名称。
创建归档备份之后,它将保留指定的时间。即使具有非常短的保留窗口并运行了DELETE OBSOLETE命令,归档备份也会保留下来。
此备份是数据库在某个时间点的快照,可用于将数据库还原到另一个主机(例如,用于测试目的)。
注:归档备份不能写入到快速恢复区。因此,如果具有快速恢复区,则必须通过FORMAT子句指定其它位置。
RMAN> run {
allocate channel oem_backup_disk1 type disk format '/u01/app/oracle/backup/rmanbk/%U';
backup keep until time 'SYSDATE+31' restore point '%RESTORE_POINT' as backupset tag '%TAG' database;
release channel oem_backup_disk1;
} RMAN> LIST RESTORE POINT ALL;
RMAN> LIST RESTORE POINT 'rsname'; RMAN> CONNECT TARGET /
RMAN> CONNECT CATALOG rman/rman@catdb
RMAN> CHANGE BACKUP TAG 'consistent_db_bkup' KEEP FOREVER;
RMAN> CHANGE COPY OF DATABASE CONTROLFILE NOKEEP;
管理归档数据库备份
CHANGE命令会更改与配置的保留策略有关的备份或副本的排除状态。
例如,可以指定CHANGE ... NOKEEP使当前排除在保留策略之外的备份变为OBSOLETE状态。
第一个示例将一致的备份更改为归档备份,用户计划在场外存储该归档备份。
因为该数据库是一致的,所以无需对其进行恢复,不需要与备份一起保存归档重做日志。
第二个示例指定数据文件和控制文件的任何长期映像副本都不应处于排除状态,而应根据现有保留策略变为过期。
此语句实际上会将归档属性从这些备份文件中删除。
如果未指定标记(如此示例所示),则CHANGE执行会应用于指定类型的所有备份。
应指定一个标记,以便只更改需要更改的备份文件。
注:RESTORE POINT选项不适用于CHANGE命令,因为无法为已过去的时间(创建备份的时间)创建还原点
备份恢复文件
有两种方法可备份恢复数据。
BACKUP RECOVERY AREA命令可备份当前或以前任何快速恢复区中找到的所有文件
BACKUP RECOVERY FILES命令可备份所有恢复文件,即使这些文件不在FRA 中
使用后一种方法可以更好地保护数据,使其免于丢失,例如,
它将备份不在快速恢复区中的控制文件或数据文件的任何副本。
默认情况下,备份优化对这两个命令有效,即使使用CONFIGURE命令禁用了该功能也是如此
这意味着此命令仅备份尚未备份的恢复文件。可以使用FORCE选项来强制备份所有文件
不能为这两个命令中的任何一个指定DEVICE TYPE DISK
注:RMAN 仅备份数据库文件:数据文件、控制文件、SPFILE、归档日志文件和这些文件的备份。将某一操作系统文件置于快速恢复区将导致恢复区备份中包含该操作系统文件
报告和维护备份
通过SQL语句查看备份信息:
(1)V$ARCHIVED_LOG.该动态性能视图用于显示所有归档日志映像副本的信息
SQL> select sequence#,name,first_change# from v$archived_log where status='A';
(2)V$BACKUP_DATAFILE 该动态视图用于显示控制文件和数据文件的备份信息。通过在动态性能视图V$BACKUP_DATAFILE,V$BACKUP_PIECE之间进行连接查询可以显示特定数据文件的备份片文件信息
SQL> SELECT A.FILE#, B.HANDLE, A.BLOCKS*A.BLOCK_SIZE BYTE
FROM V$BACKUP_DATAFILE A, V$BACKUP_PIECE B
WHERE A.SET_STAMP=B.SET_STAMP AND B.STATUS='A';
(3) V$BACKUP_REDOLOG 该动态性能视图用于显示归档日志备份集的信息,每个归档日志备份集可以包含一个或多个归档日志。通过在 V$BACKUP_PIECE 和 V$BACKUP_REDOLOG之间进行连接查询,可以显示备份片文件所包含的归档日志备份信息
SQL> SELECT DISTINCT A.HANDLE, B.SEQUENCE#, B.FIRST_CHANGE#, B.BLOCKS
FROM V$BACKUP_PIECE A, V$BACKUP_REDOLOG B
WHERE A.SET_STAMP=B.SET_STAMP AND A.STATUS='A';
(4)V$BACKUP_SET,V$BACKUP_PIECE, 前者用于显示备份集的详细信息,后者用于显示备份片的详细信息,通过在二者之间进行连接查询,可以显示备份集所对应的备份片的信息
SQL> SELECT B.HANDLE, A.BACKUP_TYPE, A.PIECES, A.ELAPSED_SECONDS
FROM V$BACKUP_SET A, V$BACKUP_PIECE B
WHERE A.SET_STAMP=B.SET_STAMP AND B.STATUS='A'
handle:用于表示备份片文件名
backup_type:用于表示备份片类型(D: 数据文件完备份,I:数据文件增量备份, L:归档日志备份)
pieces:用于表示备份片个数
elapsed_seconds:用于表示备份的总开销时间
(5)V$BACKUP_CORRUPTION 用于显示在执行BACKUP命令时所检测到的损坏数据块信息
SQL> SELECT FILE#, BLOCK#, BLOCKS,MARKED_CORRUPT FROM V$BACKUP_CORRUPTION;
(6)V$COPY_CORRUPTION 用于显示在执行COPY命令时所检测到的损坏数据块信息。
SQL> SELECT FILE#, BLOCK#, BLOCKS, MARKED_CORRUPT FROM V$COPY_CORRUPTION;
通过RMAN命令查看备份信息
1.list:
通过使用list,可以显示有关备份的信息,该命令可以从控制文件或恢复目录中获取备份的信息显示当前数据库里所有的备份:
RMAN> list backup; --显示某个特定备份集的信息。
RMAN> list backupset 7; --显示某个表空间或者数据文件的备份信息:
RMAN> list backup of tablespace users;
RMAN> list backup of datafile 1; --显示数据库或者某个表空间的镜像副本的信息:
RMAN> list copy of database;
RMAN> list copy of tablespace users; --显示归档日志的备份信息:
RMAN> list backup of archivelog all;
RMAN> list backup of archivelog from time='sysdate-2'; --显示控制文件和spfile的备份信息:
RMAN> list backup of controlfile;
RMAN> list backup of spfile; --显示控制文件的镜像副本信息:
RMAN> list copy of controlfile; --以为汇总形式显示有关备份信息:
RMAN> list backup summary; --以汇总形式显示某个表空间的备份信息:
RMAN> list backup of tablespace users summary; --显示每个备份集和备份片的信息:
RMAN> list backup by file;
过期的备份:备份的文件已经丢失(比如我们手工从操作系统里删除了备份文件),
而备份的元数据里仍然记录了这些备份的信息。
--标示哪些备份集已经过期:
RMAN> crosscheck backupset; --显示过期的备份:
RMAN> list expired backup; --删除过期的备份:
RMAN> delete noprompt expired backupset;
2.report:
report具有一定的分析功能,能够回答诸如哪些文件还需要备份,哪些文件可以被删除等问题
显示数据库的结构(包括数据文件的路径以及大小等信息)
RMAN> report schema; 根据冗余策略,报告可以丢弃的备份文件;
RMAN> report obsolete; 删除可以丢弃的备份:
RMAN> delete noprompt obsolete; 报告不可恢复的操作:
SQL> create tablespace test nologging datafile '/u01/app/oracle/oradata/orcl/test01.dbf' size 100M;
RMAN> report unrecoverable; 报告哪些文件需要进行备份:
RMAN> report need backup incremental 3;-----显示恢复时,需要应用的增量备份的个数超过3个的所有数据文件 报告最近3天以来没有备份过的数据文件:
RMAN> report need backup days 3; 报告哪些没有3个完整备份的数据文件:
RMAN> report need backup redundancy 3; 报告出恢复需要3天归档日志的数据文件
RMAN> report need backup recovery window of 3 days;
注意:report need backup显示哪些文件需要备份时,都是以完全恢复为基础的
----------------------------------------------------------------------------------------------------------
管理归档数据库备份
1.归档数据库备份
RMAN> CONNECT TARGET /
RMAN> CONNECT CATALOG rman/rman@catdb
RMAN> CHANGE BACKUP TAG 'consistent_db_bkup' KEEP FOREVER;
2.改变数据库拷贝的状态
RMAN> CHANGE COPY OF DATABASE CONTROLFILE NOKEEP;
备份恢复文件
RMAN> BACKUP RECOVERY AREA (only files in FRA)
RMAN> BACKUP RECOVERY FILES (all recovery files)
管理备份:动态性能视图
V$BACKUP_SET: Backup sets created
V$BACKUP_PIECE: Backup pieces that exist
V$DATAFILE_COPY: Copies of data files on disk
V$BACKUP_FILES: Information about all files created when creating backups
为了查询RC_BACKUP_FILES视图(v$所替代的视图),必须首先在恢复目录数据库执行以下语句:
SQL> CALL DBMS_RCVMAN.SETDATABASE(null,null,null,<dbid>);
其中<dbid>是目标数据库的ID
管理备份:交叉检查以及删除
CROSSCHECK:校验RMAN元数据中记录的备份以及拷贝与媒介(硬盘或磁带)的状态
DELETE EXPIRED:仅移除元数据中标记为EXPIRED的文件
DELETE OBSOLETED:移除所有不在需要的文件
备注:
全备仅包括数据文件,不能作为增量备份的基础。
数据库关闭时,RMAN也可以进行备份。