归档redo日志是成功进行介质恢复的关键,应该定期备份它们。本节主要是介绍非CDB(non container database)也即是非容器数据库的归档redo日志备份。容器数据库的归档redo日志备份请参考官方手册。
RMAN备份的几个特性是归档redo日志特有的。例如,可以使用BACKUP … DELETE在备份到备份集之后从磁盘中删除一个或所有归档redo日志拷贝。
即使redo日志正在归档到多个目的地和使用RMAN备份归档redo日志,RMAN只选择归档redo日志文件的一个拷贝来包含在备份集中。因为有相同日志序列号的日志是等同的,RMAN不需要包含多于一个的日志拷贝。
归档redo日志failover特性让RMAN可以完成备份,即使当某些归档目的地缺少日志或包含有损坏块的日志。如果至少一个对应于一个指定日志序列和线程的日志在快速恢复区或任何归档目的地中可用,那么RMAN尝试备份它。如果RMAN在备份过程中在日志文件中发现损坏块,它将在其它目的地搜索没有损坏块的日志拷贝。
例如,假设归档日志121到124到两个目的地:/arch1和/arch2。下表显示了记录在控制文件中的归档redo日志。
序列 | /arch1中的文件名称 | /arch2中的文件名称 |
---|---|---|
121 | /arch1/archive1_121.arc | /arch2/archive1_121.arc |
122 | /arch1/archive1_122.arc | /arch2/archive1_122.arc |
123 | /arch1/archive1_123.arc | /arch2/archive1_123.arc |
124 | /arch1/archive1_124.arc | /arch2/archive1_124.arc |
然而,如果RMAN不知道的情况下,用户删除了/arch1目录中的日志122-124。然后,运行以下备份:
BACKUP ARCHIVELOG
FROM SEQUENCE 121
UNTIL SEQUENCE 125;
利用failover,RMAN完成备份,使用/arch2目录中的日志122和124。
自动在线redo日志切换是一个重要的RMAN特性。
可以一起执行BACKUP命令和以下任何子语句来备份打开的数据库的包含最近的在线redo日志的归档redo日志:
1) PLUS ARCHIVELOG
2) ARCHIVELOG ALL
3) ARCHIVELOG FROM …
在开始备份之前,RMAN切换出当前的redo日志组,归档所有还没有归档的在线redo日志,直到包含发出命令时状态是当前的redo日志组。这个特性确保备份包含所有在命令启动之前产生的redo。
备份归档redo日志的一个有效的方式是使用命令BACKUP … PLUS ARCHIVELOG,这会让RMAN进行以下操作:
1) 运行ALTER SYSTEM ARCHIVE LOG CURRENT语句。
2) 运行BACKUP ARCHIVELOG ALL。如果备份优化已启用,那么RMAN跳过已经备份到指定设备的日志。
3) 备份BACKUP命令中指定的其余的文件。
4) 运行ALTER SYSTEM ARCHIVE LOG CURRENT语句。
5) 备份在备份过程中产生的剩余的归档日志。如果备份优化未启用,那么 RMAN备份在步骤1中产生的日志和在备份过程中产生的所有日志。
以上步骤保证在命令过程中做的数据文件备份可以恢复到一致的状态。另外,除非在线redo日志在备份的结束时进行了归档,否则使用备份进行DUPLICATE复制是不可能的。
使用BACKUP ARCHIVELOG命令备份归档日志。
如果启用了备份优化,那么RMAN跳过备份已经备份到指定设备的归档日志。
备份归档redo日志:
1)启动RMAN,连接到目标数据库和恢复目录(如果使用的话)。
2)确保数据库处于挂载或打开状态。
3)执行BACKUP ARCHIVELOG或BACKUP … PLUS ARCHIVELOG命令。
以下示例备份数据库和所有归档redo日志:
BACKUP DATABASE PLUS ARCHIVELOG;
以下示例使用配置的磁盘或SBT通道来备份所有归档redo日志的每个日志序列号的一个拷贝:
BACKUP ARCHIVELOG ALL;
也可以指定归档redo日志的时间(TIME),SCN或日志序列号(SEQUENCE)范围,如下所示:
BACKUP ARCHIVELOG
FROM TIME ‘SYSDATE-30’
UNTIL TIME ‘SYSDATE-7’;
可以使用以下的一种方法指示RMAN自动跳过备份归档redo日志。
1)配置备份优化
如果启用备份优化,那么BACKUP ARCHIVELOG命令跳过备份等同的归档日志已经备份到指定设备类型的文件。当有相同的DBID,线程,序列号,RESETLOGS SCN和时间的归档日志被视为与其它的归档日志等同。
2)配置归档redo日志删除策略
如果使用BACKED UP integer TIMES子语句配置了删除策略,那么BACKUP ARCHIVELOG命令拷贝日志,除非interger个备份在指定的设备类型上存在。如果interger个日志的备份存在,那么BACKUP ARCHIVELOG命令跳过这些日志。
BACKUP … NOT BACKED UP integer TIMES命令指定RMAN只备份那些还没有备份至少interger次到指定设备的归档日志文件。为了决定文件的备份次数,RMAN只考虑与当前备份相同的设备类型上创建的备份。
BACKED UP子语句是备份归档日志到指定的设备类型上的一个方便的途径。例如,指定RMAN应该为磁带上的每个归档redo日志保留2个拷贝和跳过额外的备份。
备份需要备份的归档redo日志:
1)启动RMAN,连接到目标数据库和恢复目录(如果使用的话)。
2)确保数据库处于挂载或打开状态。
3)确保已经为备份配置合适的通道。
4)执行BACKUP ARCHIVELOG和NOT BACKED UP子语句。
BACKUP ARCHIVELOG ALL NOT BACKED UP 2 TIMES;
BACKUP ARCHIVELOG … DELETE INPUT命令在归档日志文件备份后删除它们。这个命令省去了手动删除归档redo日志的步骤。
使用DELETE INPUT,RMAN只删除为备份集选择的归档日志的特定的拷贝。使用DELETE ALL INPUT,RMAN从所有日志归档目的地中删除每个备份的归档日志文件。
BACKUP … DELETE INPUT和DELETE ARCHIVELOG命令为所有归档位置的日志遵守归档redo日志删除策略。例如,如果指定只有当日志至少两次备份到磁带时才删除,那么BACKUP … DELETE遵循这个策略。
在下面的步骤中,假设日志分别归档到/arc_dest1,/arc_dest2和快速恢复区域。
在备份之后删除归档redo日志:
1)启动RMAN,连接到目标数据库和恢复目录(如果使用的话)。
2)确保数据库处于挂载或打开状态。
3)运行BACKUP命令和DELETE INPUT子语句。
BACKUP DEVICE TYPE sbt
ARCHIVELOG ALL
DELETE ALL INPUT;
在这个情况中,RMAN只备份在这些归档位置中的每个日志序列号的一个拷贝。RMAN从快速恢复区域和其它归档目的地中删除它备份的任何日志的所有拷贝。
如果指定DELETE INPUT而不是DELETE ALL INPUT,那么RMAN只删除它备份的特定的归档redo日志文件。例如,RMAN删除/arc_dest1中的日志,如果这些文件用来作为备份源,但保持/arc_dest2中的内容原封不动。
来源:《Oracle Database Backup and Recovery User’s Guide,19c》