Oracle Data Guard中的数据库通过初始化参数文件中的DB_UNIQUE_NAME参数来唯一鉴别。为了让RMAN在Data Guard环境中正常工作,使用相同DBID的数据库必须拥有唯一的DB_UNIQUE_NAME名称。
在Data Guard环境中使用RMAN,必须要配置一个恢复目录(recovery catalog)。恢复目录存储所有主备数据库的元数据(metadata)。
1.关于在Oracle Data Guard配置中的RMAN文件管理
RMAN使用恢复目录来跟踪在Oracle Data Guard环境中的所有数据库文件的文件名称。
恢复目录是一个数据库模式,RMAN使用它来存储关于一个或多个Oracle数据库的元数据。恢复目录(recovery catalog)还会记录在线redo日志,备redo日志,临时文件,归档日志文件,备份集和映像拷贝等文件创建的位置。
1.1. Oracle Data Guard环境中备份的可交换性
RMAN命令使用恢复目录元数据(recovery catalog metadata)透明地运行在Data Guard的不同物理数据库之间。例如,可以在一个物理备数据库上备份一个表空间,然后在主数据库上还原和恢复。同样的,也可以在主数据库上备份一个表空间,然后在物理备数据库上还原和恢复。
注意:逻辑备数据库的备份不能用在主数据库上,因为逻辑备数据库的DBID与主数据库不同,不属于相同的数据库。
备控制文件和主控制文件的备份也可以交换。例如,可以在主数据库上还原备控制文件,也可以在物理备数据库上还原主控制文件。可以交换意味着可以将控制文件的备份卸载到Data Guard的其中一个数据库上。RMAN在还原和恢复数据库的时候自动更新数据库的文件名称。
1.2. Oracle Data Guard环境中备份的关联性
RMAN使用恢复目录(recovery catalog)让每个数据库文件或备份文件与DB_UNIQUE_NAME关联来跟踪Oracle Data Guard环境中的所有数据库文件。
创建文件的数据库与文件关联。例如,如果RMAN使用唯一的名称standby1备份数据库,那么standby1就会与备份关联。备份保持与创建它的数据库关联,除非使用CHANGE … RESET DB_UNIQUE_NAME命令将备份与其他数据库关联。
1.3. Oracle Data Guard环境中备份的可访问性
备份的可访问性与关联性不同。缺省情况下,在Oracle Data Guard环境中,恢复目录认为磁盘备份只能被关联的数据库访问,而在一个数据库上创建的磁带备份则可以被任何数据库访问。
可以使用以下的RMAN命令覆盖默认的行为:
SET BACKUP FILES FOR DEVICE TYPE device_specifier TO [ NOTACCESSIBLE | ACCESSIBLE]
可访问性设置是在会话级别,这意味着在RMAN会话断开后,备份的关联性复原为缺省的行为。
如果备份文件没有与任何数据库关联,那么在恢复目录的视图中描述它的行的SITE_KEY列的值为null。缺省情况下,RMAN将SITE_KEY为null的文件与连接为TARGET的数据库关联。
RMAN命令如BACKUP,RESTORE和CROSSSCHECK在任何可访问的备份上工作。例如,RECOVER COPY操作,RMAN认为与数据库关联的映像拷贝才可用来恢复。RMAN认为在磁盘和磁带上的增量备份才可以用来恢复映像拷贝。在数据库恢复中,RMAN认为只有与数据库相关联的磁盘备份和所有的磁带备份文件才可以用来还原。
为了阐述备份可访问性的差异,假设数据库prod和standby1位于不同的主机上。RMAN在生产主机prod上备份数据文件1到/prmhost/disk1/df1.dbf和磁带。RMAN在备主机standby1上备份数据文件1到/sbyhost/disk2/df1.dbf和磁带。如果RMAN连接到数据库prod,那么你不能使用RMAN命令与位于备主机的备份/sbyhost/disk2/df1.dbf一起来执行操作。然而,RMAN认为在standby1上做的磁带备份可以用来还原。
注:可以将备份从备机传输到主机或从主机传输到备机,作为TARGET连接到这台主机上的目标数据库,然后使用CATALOG命令来登记(catalog)备份。在文件被目标数据库登记(catalog)后,文件就与目标数据库关联。
2.关于在Oracle Data Guard配置中的RMAN配置
在Oracle Data Guard配置中,备份控制文件,数据文件和归档日志的程序可以卸载(offload)到备系统,因此最小化备份对生产系统的影响。
这些备份可以用来恢复主或备数据库。
RMAN使用初始化参数DB_UNIQUE_NAME来区别一个数据库和其他数据站点。因此,在Oracle Data Guard配置中,维护DB_UNQIUE_NAME的唯一性是非常重要的。
只有主数据库必须使用RMAN REGISTER DATABASE命令明确地注册。在RMAN连接到恢复目录和作为target连接到主数据库后执行这个操作。
为了简化RMAN备份和恢复的持续使用,可以为Oracle Data Guard环境中的每个主数据库和物理备数据库设置一些持久的配置设置。这些设置控制RMAN行为的各个方面。例如,可以配置备份保留策略,备份的缺省目标到磁带或磁盘,缺省的备份设备类型等等。
可以使用CONFIGURE命令和FOR DB_UNIQUE_NAME子语句来为某个数据库创建一个持久的配置,而不用作为TARGET连接到备数据库或主数据库。例如,可以连接RMAN到恢复目录,运行SET DBID命令,然后为一个物理备数据库在它创建前建立配置,因此当数据库创建时,RMAN配置会应用。
例如,在连接到恢复目录之后,可以在RMAN提示符中使用以下命令来为DBID是1625818158的BOSTON数据库设置缺省的设备类型为SBT。RMAN SET DBID命令只有在没有作为target连接到数据库时才要求:
SET DBID 1625818158;
CONFIGURE DEFAULT DEVICE TYPE TO SBT FOR DB_UNIQUE_NAME BOSTON;
当作为TARGET连接到目标数据库进行恢复目录(recovery catalog)重新同步时,RMAN会更新数据库的控制文件。如果使用数据库的FOR DB_UNIQUE_NAME子句时却没有连接到目标数据库,这时RMAN只会在恢复目录中更改配置。
3.建议的RMAN和Oracle Database设置
配置假设
下面的配置做如下假设:
1)备数据库是物理备数据库,备份只在备数据库上执行;
2)RMAN恢复目录是必需的,这样在其中一个数据库服务器的备份就可以还原到另外一台数据库服务器。只使用控制文件来作为RMAN仓库是不够的,因为主数据库不知道备数据库上执行的备份信息。
RMAN恢复目录在中央位置中组织备份历史和其他恢复相关的元数据。恢复目录被配置在数据库中和维护备份元数据。恢复目录没有控制文件那样的空间限制,可以存储更多关于备份的历史数据。
恢复目录服务器,在Oracle Data Guard配置中建议与主备站点物理上分开,因为在两个站点中的任意一个的灾难都不会影响恢复最近的备份的能力。
3)配置中的所有数据库使用Oracle 11.1或更新的版本
4)Oracle Secure Backup软件或第三方介质管理软件与RMAN一起配置来备份到磁带。
3.1. 在主备数据库上的Oracle数据库配置
在Oracle Data Guard环境中的每个主备数据库上,建议这些数据库配置。
1)为每个数据库配置快速恢复区域(恢复区域对于数据库是本地的)。
快速恢复区域是一个在文件系统或Oracle ASM磁盘组上的单个的存储位置,恢复需要的所有文件都存储其中。这些文件包含控制文件,归档日志文件,在线redo日志,闪回日志,和RMAN备份。当在快速恢复区域创建新的备份和归档日志时,旧文件(超出保存期范围,或已经备份到第三级的存储)会自动被删除来为它们腾出空间。另外,可以设置通知来提示DBA快速恢复区域的空间消耗在接近它预先定义的限制。DBA可以做出行动,例如增加恢复区域的空间限制,增加磁盘硬件,或缩短保存期。
设置初始化参数来配置快速恢复区域:
DB_RECOVERY_FILE_DEST =
DB_RECOVERY_FILE_DEST_SIZE =
示例:
db_recovery_file_dest = +RECO
db_recovery_file_dest_size = 30G
2)使用服务器参数文件(SPFILE),这样就可以被备份在备份中保存实例的参数。
3)在主备数据库上启用闪回数据库。
当闪回数据库启用时,Oracle数据库在快速恢复区域中维护闪回日志。这些日志可以用来回滚数据库到一个早前的时间点,从而不需要完整的还原。
3.2. 主数据库上的RMAN配置
为了简化RMAN的持续使用,可以为Oracle Data Guard环境中的数据库设置一些持久的配置设置。
这些设置控制RMAN行为的各个方面。例如,可以配置备份保留策略,备份的缺省目标到磁带或磁盘,缺省的备份设备类型等等。可以使用CONFIGURE命令设置和更改RMAN配置。建议在主数据库上进行下面的RMAN配置:
1)连接RMAN到主数据库和恢复目录;
2)为数据库配置保留策略为n天:
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF DAYS;
这个配置会保存必要的备份来执行数据库恢复到指定的天数范围内的任意时间点。
使用DELETE OBSOLETE命令来删除任何不需要的备份(根据设置的保留策略)来执行在指定的天数范围内的恢复。
3)使用CONFIGURE ARCHIVELOG DELETION POLICY指定何时归档日志可以被删除。例如,在确保归档日志已经被传输到所有目的地后删除它们,使用以下配置:
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY;
确保归档日志已经被在所有备目的地应用后删除它们,使用以下配置:
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
4)为主数据库和所有备数据库配置连接字符串,这样RMAN在使用命令RESYNC CATALOG FROM DB_UNIQUE_NAME可以远程连接和执行同步。当连接到target实例时,必须提供网络服务名称。这个要求即使在同步来源的其他数据库实例在本地主机上也适用。target和远程实例必须使用相同的SYSDBA(或SYSBACKUP)密码,这意味着两上实例必须已经有密码文件。可以使用一个单一的密码来创建密码文件,这样就可以使用该密码文件启动所有数据库实例。例如,如果连接到备数据库Boston的TNS别名是boston_conn_str,可以使用以下命令来为Boston数据库站点配置连接标识符:
RMAN> CONFIGURE DB_UNIQUE_NAME BOSTON CONNECT IDENTIFIER ‘boston_conn_str’;
注意’boston_conn_str’不包含用户名和密码。它只包含可以来从任何数据库站点连接到boston数据库站点的Oracle网络服务名。
在为所有备数据库配置好连接标识符后,可以使用LIST DB_UNIQUE_NAME OF DATABASE来确认备数据库列表。
3.3. 执行备份的备数据库的RMAN配置
这些RMAN配置建议在执行备份的备数据库上配置。
1)作为target连接RMAN到备数据库(备份执行的地方),和连接到恢复目录。
2)启用自动备份控制文件和服务器参数文件:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
3)跳过备份已经存在含有相同检查点的有效备份的数据文件
CONFIGURE BACKUP OPTIMIZATION ON;
4)配置磁带通道按照介质管理软件的要求来创建备份
CONFIGURE CHANNEL DEVICE TYPE SBT PARMS ‘’;
5)由于归档日志在备数据库上备份,Oracle建议为日志删除策略配置BACKED UP选项:
CONFIGURE ARCHIVELOG DELETION POLICY BACKED UP n TIMES TO DEVICE TYPE SBT;
3.4. 不执行备份的备数据库的RMAN配置
这些RMAN配置建议在不执行备份的备数据库上配置。
1)作为target连接RMAN到备数据库,和连接到恢复目录。
2)启用一旦归档日志应用到备数据库,自动删除它们(当层叠或far sync实例功能在使用时,这个也应用到所有的终端数据库。)
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
4.备份步骤
备份服务器参数文件
所有备份操作都可以卸载到一台备数据库,除了SPFILE备份外。SPFILE的备份只能够还原到备份的源数据库。
对于没有备份的数据库,Oracle建议至少备份SPFILE到一个已知的本地磁盘位置。如果SPFILE备份需要进一步备份到磁带,可以拷贝它们到已经配置备份到磁带的数据库站点。这时可以使用以下RMAN命令登记(catalog)SPFILE备份到数据库:
CATALOG START WITH ‘<SPFILE backup directory>’;
然后备份SPFILE备份到磁带:
BACKUP BACKUPSET ALL;
当SPFILE需要还原到某个数据库时,相应的SPFILE备份从磁盘或磁带还原。
4.1.使用磁盘作为磁带备份的缓存
备数据库的快速恢复区域可以为磁带备份充当磁盘缓存。
磁盘作为备份的主存储来使用,磁带提供长期的归档存储。增量磁带备份每天做一次,全量磁带备份每周做一次。执行这些备份的命令在下面的部分描述。
4.1.1. 使用磁盘作为缓存的每日磁带备份命令
当选定备份策略时,Oracle建议利用每日的增量备份。
数据文件的映像拷贝可以使用最近的增量备份向前滚动,因此一直提供最新的数据文件映像拷贝。RMAN使用合成的映像拷贝来做介质恢复,正如它使用在SCN时的全映像拷贝一样,不需要花费资源每天执行数据库的全映像拷贝。额外的优势是恢复的时间减少了,因为映像拷贝会使用最近的块更改来更新,需要更少的redo日志来将数据库恢复到当前的状态。
为了执行每日增量备份,在第一天执行数据库的全备份,在第二天执行增量备份。归档redo日志可以使用来恢复数据库到两天的任意时间点。对于第三天和向前的天数,前一天的增量备份会与数据文件的拷贝合并,执行当天的增量备份,允许快速恢复到最后一天前的任意时间点。Redo日志可以用来恢复数据库到当天的任意时间点。
执行每日备份的脚本像如下一样(如果快速恢复区域不是用来存储日志,最后一行“DELETE ARCHIVELOG ALL”才需要):
RESYNC CATALOG FROM DB_UNIQUE_NAME ALL;
RECOVER COPY OF DATABASE WITH TAG ‘OSS’;
BACKUP DEVICE TYPE DISK INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG ‘OSS’
DATABASE;
BACKUP DEVICE TYPE DISK DATAFILECOPY ALL NOT BACKED UP AT ANY SCN;
BACKUP DEVICE TYPE SBT ARCHIVELOG ALL;
BACKUP BACKUPSET ALL;
DELETE ARCHIVELOG ALL;
备控制文件会在备份操作的结果中自动备份,因为已启用控制文件的自动备份。
脚本中的每个命令的说明如下:
1)RESYNC CATALOG FROM DB_UNIQUE_NAME ALL
从Oracle Data Guard设置中的所有其他数据库站点(主和其它备数据库)同步信息到恢复目录。为了命令执行,RMAN必须使用Oracle网络服务连接到target,所有数据库必须使用相同的密码文件。
2)RECOVER COPY OF DATABASE WITH TAG ‘OSS’
通过应用前一天执行的级别1的增量备份,向前滚动级别0的数据库拷贝。如示例中的脚本所示,前一天的级别1增量标记为OSS。增量备份由命令BACKUP DEVICE TYPE DISK … DATABASE生成。第一天这个命令执行时不存在向前滚动,因为还没有增量级别1的备份。级别0的增量备份使用BACKUP DEVICE TYPE DISK … DATABASE命令创建。在第二天也没有向前滚动,因为只有级别0的增量备份。标记为OSS的级别1的增量由命令BACKUP DEVICE TYPE DISK … DATABASE创建。在第三天和接下来的天数,使用前一天创建的标记为OSS的级别1的增量执行向前滚动。
3)BACKUP DEVICE TYPE DISK INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH
TAG ‘OSS’ DATABASE
创建一个新的级别1的增量备份。第一天这个命令运行时,一个基本的数据文件拷贝会被创建。在第二天和接下来的天数,这是级别1的增量备份。
4)BACKUP DEVICE TYPE DISK DATAFILECOPY ALL NOT BACKED UP AT ANY SCN
只备份没有备份过的数据文件。
5)BACKUP DEVICE TYPE SBT ARCHIVELOG ALL
根据配置的删除策略备份归档日志到磁带
6)BACKUP BACKUPSET ALL
备份任何作为增量备份创建结果创建的备份集
7)DELETE ARCHIVELOG ALL
根据由CONFIGURE ARCHIVELOG DELETION POLICY设置的日志删除策略来删除归档日志。如果归档日志在快速恢复区域,当需要更多磁盘空间时,它们会自动被删除。因此,只有明确想每天删除日志时才需要使用这个命令。
4.1.2. 使用磁盘作为缓存的每周磁带备份命令
为了备份所有恢复相关的文件到磁带,每周使用一次命令RMAN BACKUP RECOVERY FILES。
这确保所有当前在磁盘上的增量备份,映像拷贝,和归档日志备份被备份到磁带。
4.2. 执行直接备份到磁带
Oracle介质管理层(MML)API让第三方介质管理软件与RMAN和硬件一起工作,允许备份到顺序介质设备如磁带机。
介质管理器处理装载,卸载和标记顺序的介质如磁带。必须安装Oracle Secure Backup或第三方介质管理软件来使用RMAN和顺序介质设备。
采取以下步骤来执行直接备份到磁带,缺省的情况下:
1)连接RMAN到备数据库(作为target数据库)和恢复目录
2)执行以下的CONFIGURE命令:
CONFIGURE DEFAULT DEVICE TYPE TO SBT;
在这个场景中,在备数据库上每周做一次全备份,每天做一次增量备份。
4.2.1. 每日直接备份到磁带的命令
执行每日直接备份到磁带的RMAN命令从Oracle Data Guard环境中的所有其他数据库重新同步信息。
采取下面的步骤来执行每日直接备份到磁带:
1)连接RMAN到备数据库(作为target数据库)和恢复目录
2)执行以下的RMAN命令:
RESYNC CATALOG FROM DB_UNIQUE_NAME ALL;
BACKUP AS BACKUPSET INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;
DELETE ARCHIVELOG ALL;
这些命令也创建数据库的级别1的增量备份,包含所有归档日志。脚本在第一天运行时,如果级别0的备份没有找到,级别0的备份就会创建。
只有所有归档日志文件不在快速恢复区域,命令DELETE ARCHIVELOG ALL才是必要的。
4.2.2. 每周直接备份到磁带的命令
每周的一天,执行直接到磁带的周备份。
采取以下步骤:
1)连接RMAN到备数据库(作为target数据库)和恢复目录。
2)执行以下RMAN命令:
RESYNC CATALOG FROM DB_UNIQUE_NAME ALL;
BACKUP AS BACKUPSET INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;
DELETE ARCHIVELOG ALL;
这些命令从Oracle Data Guard环境中的所有其他数据库重新同步信息,和创建包含所有归档日志的级别0的数据库备份。
只有所有归档日志文件不在快速恢复区域,命令DELETE ARCHIVELOG ALL才是必要的。
5.在Oracle Data Guard环境中注册和取消注册数据库
只有主数据库必须使用RMAN REGISTER DATABASE命令明确地注册。在RMAN连接到恢复目录和作为target连接到主数据库后执行这个操作。
当连接到一个备数据库时或使用CONFIGURE DB_UNIQUE_NAME来配置连接标识符时,一个新的备数据库会自动被注册到恢复目录。
可以使用UNREGISTER DB_UNIQUE_NAME命令取消注册关于指定的备数据库的信息。当备数据库从Oracle Data Guard环境中彻底地移除时,在连接到相同Oracle Data Guard环境中的另外的数据库以后,在恢复目录中的移除的数据库信息也会被移除。与取消注册的数据库相关联的备份仍然可以被其他数据库使用。可以使用命令CHANGE BACKUP RESET
DB_UNIQUE_NAME关联这些备份到其他存在的数据库。
当使用命令UNREGISTER DB_UNIQUE_NAME和选项INCLUDING BACKUPS时,所有与取消注册数据库关联的备份文件的元数据也从恢复目录中取消注册。
6.在Oracle Data Guard环境中报告
使用RMAN的LIST,REPORT,和SHOW命令与子语句FOR DB_UNIQUE_NAME一起查看关于某个特定数据库的信息。
例如,在连接到恢复目录后,可以使用下面的命令显示DBID是1625818158的数据库的信息和列出Oracle Data Guard环境中的数据库。SET ID命令只有在没有作为TARGET连接到数据库时才需要。最后的3个命令列出归档日志,数据库文件名称,和DB_UNIQUE_NAME是BOSTON的数据库RMAN配置信息。
SET DBID 1625818158;
LIST DB_UNIQUE_NAME OF DATABASE;
LIST ARCHIVELOG ALL FOR DB_UNIQUE_NAME BOSTON;
REPORT SCHEMA FOR DB_UNIQUE_NAME BOSTON;
SHOW ALL FOR DB_UNIQUE_NAME BOSTON;
7.在Oracle Data Guard环境中执行备份维护
Oracle Data Guard环境中的文件(数据文件,归档日志,恢复片,映像拷贝,和代理拷贝)通过使用DB_UNIQUE_NAME参数与数据库关联。
因此,在Oracle Data Guard环境中为每个数据库提供的DB_UNIQUE_NAME值是唯一的,这是非常重要的。这个信息连同文件共享属性一起,用来在各种RMAN操作中确定哪些文件可以被访问。
文件共享属性规定在磁盘上的文件只可以在与它们关联的数据库上访问,而在磁带上的文件认为可以被所有数据库访问。RMAN命令例如BACKUP和 RESTORE,同其它维护命令一样,按照这个假设工作。例如,在数据库的映像拷贝向前滚动的操作中,只有与数据库关联的映像拷贝才向前滚动。与数据库关联的在磁盘上的增量备份和在磁带上的增量备份用来向前滚动映像拷贝。类似地,在恢复操作中,只有与数据库关联的磁盘备份和磁带上的文件会被视为备份源。
7.1. 更改恢复目录的元数据
RMAN的CHANGE命令可以与各种操作对象一起用来更改恢复目录中的元数据。
例如:
1)更改文件的关联从一个备数据库到另外一个数据库
使用CHANGE命令和RESET DB_UNIQUE_NAME选项一起来更改文件的关联性,从一个数据库到Oracle Data Guard环境中的另外一个数据库。当磁盘备份或归档日志从一个数据库被传输到另外一个数据库,你想在传输到的数据库上使用它们时,CHANGE命令是有用的。CHANGE命令也可以更改文件的关联性从一个数据库到另外一个数据库,而不用直接连接到其中一个数据库,使用FOR DB_UNIQUE_NAME和RESET DB_UNIQUE_NAME TO选项即可。
2)更改数据库的初始化参数DB_UNIQUE_NAME
如果数据库的DB_UNIQUE_NAME初始化参数的值进行了更改,那么相同的更改必须在Oracle Data Guard环境中进行。RMAN恢复目录,在连接到数据库实例后,知道DB_UNIQUE_NAME的旧值和新值。为了合并恢复目录模式中的旧值和新值的信息,必须使用RMAN CHANGE DB_UNIQUE_NAME命令。如果数据库的DB_UNIQUE_NAME初始化参数的值进行了更改,相同的更改必须在RMAN中进行,这样它就会觉察到新的DB_UNIQUE_NAME。例如,执行以下步骤来更改数据库BOSTON_A的DB_UNIQUE_NAME到BOSTON_B:
a. 在初始化参数文件或SQL中,更改初始化参数DB_UNIQUE_NAME从BOSTON_A到 BOSTON_B。
b. 在RMAN中,作为target连接到Oracle Data Guard环境中的任何一个数据库和连接到恢复目录。然后执行以下CHANGE命令:
CHANGE DB_UNIQUE_NAME FROM BOSTON_A TO BOSTON_B;
3)使备份不可用或删除它们的元数据
使用CHANGE命令选项例如AVAILABLE,UNAVAILABLE,KEEP,和UNCATALOG来使备份对还原和恢复可用或不可用,和保留和删除它们的元数据。
7.2. 删除归档日志或备份
使用RMAN的DELETE命令删除备份集,映像拷贝,归档日志或代理拷贝。
为了只删除与指定数据库相关的文件,必须让FOR DB_UNIQUE_NAME选项和DELETE命令一起使用。
与当前target数据库关联的所有成功被删除文件(或与任何已知的数据库关联的文件)的元数据也被删除。如果文件不能被成功删除,可以使用FORCE选项来移除文件的元数据。
当与另外一个数据库关联的文件成功被删除时,它在恢复目录中的元数据也被删除。任何与其它数据库关联的文件,和不能成功被删除的文件,与让你在与文件相关联的数据库(文件使用数据库分组)上执行相同操作的指令一起,列在DELETE命令完成的输出中。FORCE选项不能用来覆盖这种行为。如果你确认删除不能删除的文件的元数据不会导致问题,可以使用CHANGE RESET DB_UNIQUE_NAME命令来更改文件与数据库的关联关系的元数据和使用DELETE命令与FORCE选项来删除文件的元数据。
7.3. 验证恢复目录元数据
使用CROSSCHECK命令来验证和更新恢复目录模式中的文件状态。
与当前target数据库关联的所有文件(或任何不与数据库关联的文件)的元数据,根据CROSSCHECK操作的结果被标记为AVAILABLE或EXPIRED。
如果与另外一个数据库关联的文件被成功检验,它在恢复目录的元数据也更改为AVAILABLE。任何与其它数据库关联的文件,和不能成功检验的文件,与让你在与文件相关联的数据库(文件使用站点分组)上执行相同操作的指令一起,列在CROSSCHECK命令完成的输出中。如果你确认配置和仍然想更改不可用的文件的状态元数据,可以使用CHANGE RESET DB_UNIQUE_NAME命令来更改文件与数据库的关联关系的元数据和执行CROSSCHECK命令来更新状态元数据到EXPIRED。
8.Oracle Data Guard环境中的恢复场景
8.1. 在主或备数据库上恢复丢失的文件
可以通过连接到含有要求文件的物理备数据库,经过网络来还原和恢复文件。
当想还原主数据库丢失的数据文件,控制文件或表空间时,使用物理备数据库上相应的文件是很有用的。也可以使用相同的步骤通过使用主数据库来还原物理备数据库上的文件。
注:在Oracle数据库12c版本之前,为了恢复主数据库丢失的文件,使用RMAN恢复目录,和RMAN BACKUP,CATALOG DATAFILE,和SWITCH DATAFILE命令。为了恢复备数据库丢失的文件,使用RESTORE和RECOVER命令。从Oracle数据库12c版本开始,这些方法不再是必要的。如果需要使用它们的信息,参考Oracle数据库11g文档。
8.2. 恢复丢失的在线redo日志文件
如果当前活动组的所有在线日志成员或还没有归档的非活动组丢失,那么必须fail over到备数据库。
8.3. 主数据库的不完整恢复
主数据库的不完整恢复一般是在比如当数据库逻辑损坏(被用户或应用程序)或当表空间或数据文件意外从数据库删除的情况时做。
取决于备数据库实例上的当前数据库检查点SCN,可以使用以下过程中的一个来执行主数据库不完整的恢复。所有过程按优先排序,从花费最少时间的过程开始。
8.3.1. 使用闪回数据库
当闪回数据库功能在主数据库上启用时,使用闪回数据库是推荐的步骤,没有数据库文件丢失,恢复时间点大于最旧的闪回SCN或最旧的闪回时间。参考“闪回物理备数据库到指定时间点”章节进行恢复。
8.3.2. 使用备数据库实例
当备数据库在期望的不完整恢复时间的后面和闪回数据库没有在主备数据库上启用时,这是推荐的步骤。
1)恢复备数据库到期望的时间点。确保在执行以下命令前停止管理redo进程(MPR):
RECOVER DATABASE UNTIL TIME ‘time’
或者,不完整的恢复时间可以使用SCN或日志序列号来指定:
RECOVER DATABASE UNTIL SCN ‘incomplete recovery SCN’;
RECOVER DATABASE UNTIL LOGSEQ ‘incomplete recovery log sequence number’ THREAD ‘thread number’;
2)以只读模式打开备数据库来验证数据库的状态。
如果状态不是期望的那样,使用LogMiner工具来查看归档redo日志文件,找到不完整恢复期望的正确的目标时间或SCN。
或者,可以开始恢复备数据库到已知的在目标时间之前的时间点,然后以只读模式打开数据库来检查数据的状态。重复这个过程直到数据库的状态证明是正确的。如果恢复数据库太远(超过错误发生时的SCN),可以返回到更早的SCN。
3)使用SQL ALTER DATABASE ACTIVATE STANDBY DATABASE语句来激活备数据库。这将转换备数据库到主数据库,创建一个新的resetlogs分支,和打开数据库。
8.3.3. 使用主数据库实例
如果所有的备数据库实例已经恢复到超过期望的时间点和备数据库功能没有在主备数据库上启用,那么这是唯一的选项。
使用以下步骤来在主数据库上执行不完整的恢复。
1)使用LogMiner或其他方式来确认数据库的所有数据是好的时间点或SCN
2)使用时间点或SCN,执行以下RMAN命令来做不完整的恢复和使用RESETLOGS选项来打开数据库(在连接到catalog数据库和在MOUNT状态的主数据库实例后):
RUN
{
SET UNTIL TIME ‘time’;
RESTORE DATABASE;
RECOVER DATABASE;
}
ALTER DATABASE OPEN RESETLOGS;
在这个过程后,所有备数据库实例必须在Oracle Data Guard环境中重建。
8.4. 在主数据库TSPITR或表空间插入后在备数据库上需要的操作
在RMAN表空间时间点恢复(tablespace point-in-time recovery)在主数据库上执行之后,
恢复的数据文件有一个新的SCN(system change number),因此在主数据库上像新数据文件一样被对待。
这些数据文件不能自动在备数据库上创建。类似地,当新插入的表空间添加到主数据库时,数据文件在主数据库上像新数据文件一样被对待。
当Redo Apply进程遇到这些新文件的创建时,备数据库上的管理redo进程(managed redo process,MPR)会停止。这些要求的新数据文件必须拷贝和恢复到备数据库。可以使用备份或直接从主数据库拷贝来完成。例如,拷贝属于执行过RMAN时间点恢复的表空间的所有文件,可以使用以下命令:
RMAN> RESTORE TABLESPACE <tbs_name1, tbs_name2> FROM SERVICE <tnsalias-of-primary>
磁盘通道的数量根据RMAN配置来分配。因此,如果执行了CONFIGURE DEVICE TYPE DISK PARALLELISM 4,那么4个磁盘通道会用来从主数据库拉取文件。
当新的数据文件在备数据库上可用时,重启MRP来继续应用日志。
9.额外的备份情况
可以为其他配置修改备份步骤,比如当备数据库和主数据库不能共享备份文件;备数据库实例只用来远程归档redo日志文件;或备数据库文件名称与主数据库不同。
9.1. 备数据库地理上太远而不能共享备份
如果备数据库互相之间离得很远,那么在它们上的备份可能不容易被主系统或其它备系统访问。
在所有系统上执行数据库的完整备份来执行恢复操作。快速恢复区域可以驻留在主备系统的本地,它不需要在主备数据库上相同。
在这个场景中,仍然可以使用上一章节中描述的一般的策略,包含以下例外:
1)由RMAN创建的备份文件必须使用本地系统名称标记,RESTORE操作时标记必须用来限制RMAN选择在相同主机上取得的备份。换句话说,当创建备份时BACKUP命令必须使用TAG系统名称选项;RESTORE命令必须使用FROM TAG系统名称选项;RECOVER命令必须使用FROM TAG系统名称和ARCHIVELOG TAG系统名称选项。
2)备站点的灾难恢复:
a. 使用与备数据库之前操作相同的参数文件以NONMOUNT模式启动备数据库实例。
b. 在主实例上使用SQL语句ALTER DATABASE CREATE STANDBY CONTROLFILE AS filename创建备控制文件,使用创建的控制文件来挂载备数据库实例。
f. 执行以下RMAN命令来还原和恢复数据库文件:
RESTORE DATABASE FROM TAG ‘system name’;
RECOVER DATABASE FROM TAG 'system name’ ARCHIVELOG TAG ‘system name’;
g. 重启Redo Apply。
备实例获取剩余的归档redo日志文件。
9.2. 备数据库与主数据库的文件名称不同
从Oracle数据库11g开始,恢复目录可以从每个备数据库站点重新同步文件名称。
然而,如果数据库文件名称在主备数据库上不同,从来没有重新同步过,那么使用的RESTORE和RECOVER命令会有一点不同。为了获取备数据库实际的数据文件名称,查询视图V$DATAFILE和为数据库的所有数据文件指定SET NEWNAME选项:
RUN
{
SET NEWNAME FOR DATAFILE 1 TO ‘existing file location for file#1 from V$DATAFILE’;
SET NEWNAME FOR DATAFILE 2 TO ‘existing file location for file#2 from V$DATAFILE’;
……
SET NEWNAME FOR DATAFILE n TO ‘existing file location for file#n from V$DATAFILE’;
RESTORE {DATAFILE <n,m,…> | TABLESPACE tbs_name_1, 2, …| DATABASE;
SWITCH DATAFILE ALL;
RECOVER DATABASE {NOREDO};
}
类似地,使用RMAN DUPLICATE命令的SET NEWNAME选项在创建备数据库的过程中来指定新的文件名称。或可以设置LOG_FILE_NAME_CONVERT和DB_FILE_NAME_CONVERT参数。
10.通过网络还原和恢复文件
从Oracle数据库12c开始,RMAN让你可以通过网络连接到包含必需的文件的物理备数据库来还原和恢复文件。
可以还原整个数据库,数据文件,控制文件,spfile,或表空间。通过网络还原文件在需要同步主备数据库的场景中是非常有用的。
RMAN通过网络从物理备数据库还原数据库文件,使用RESTORE命令的子语句FROM SERVICE。子语句提供从哪里还原文件的物理备数据库的服务名称。在还原操作中,RMAN在物理备数据库上创建需要还原的文件的备份集,然后通过网络传输这些备份集到目标数据库。
注:在Oracle数据库12c以前的版本中,使用RMAN BACKUP INCREMENTAL FROM SCN命令来在主数据库上创建从备数据库当前SCN开始的备份,然后用来在时间上向前滚动备数据库。
11.使用命令向前滚动备数据库
从Oracle数据库18c开始,可以使用RMAN命令RECOVER STANDBY DATABASE通过网络刷新备数据库。
RECOVER STANDBY DATABASE命令重启备数据库实例,从主数据库刷新控制文件,自动重命名数据文件,临时文件和在线日志。它还原添加到主数据库的新数据文件和恢复备数据库到当前时间。
当使用RECOVER STANDBY DATABASE命令刷新备数据库时,指定FROM SERVICE子语句或者NOREDO子语句。FROM SERVICE子语句指定主数据库的名称。NOREDO子语句指定备份应该被使用来刷新,允许备数据库向前滚动到指定的时间或SCN。
在尝试与主数据库同步前,必须手动在备数据库上停止MRP进程。
下面的示例使用RECOVER STANDBY DATABASE命令。它显示可选的PFILE子语句来为备数据库指定参数文件(当spfile不可用时使用)。
RECOVER STANDBY DATABASE FROM SERVICE service_name PFILE=pfile_location;
来源:《Oracle Database Backup and Recovery User’s Guide,19c》