管理RMAN备份_管理恢复目录(Recovery Catalog)

本章阐述如何管理RMAN恢复目录。Catalog是一个数据库模式,它包含一个或多个目标数据库的RMAN仓库数据。

1.RMAN恢复目录概述

本节阐述与管理恢复目录相关的基本概念。

1.1.RMAN恢复目录的目的

恢复目录是一个数据库模式,RMAN使用它来存储关于一个或多个Oracle数据库的元数据。一般来说,在一个专门的数据库中存储目录(catalog)。

恢复目录提供以下好处:
1)恢复目录为存储在每个目标数据库的控制文件中的RMAN仓库创建冗余。恢复目录充当一个次要的元数据仓库。如果目标控制文件和所有备份丢失,那么RMAN元数据仍然存在恢复目录中。
2)恢复目录集中化所有目标数据库的元数据。存储元数据在一个单一的位置让报告和管理任务更容易执行。
3)恢复目录可以比控制文件存储更长久的元数据历史。如果必须执行一个在时间上比控制文件中的历史更往后的恢复,这个能力是有用的。增加的管理恢复目录数据库的复杂度可以被具有可用的扩展的备份历史的方便性所抵销。

某些RMAN特性只有当使用恢复目录的时候才可用。例如,可以存储RMAN脚本在恢复目录中。存储脚本的主要优点是对于任何连接到目标数据库和恢复目录的RMAN客户端都是可用的。命令文件只有RMAN客户端可以访问存储它们的文件系统时才是可用的。

当在Data Guard环境中使用RMAN,恢复目录是必需的。通过为所有主备数据库存储备份元数据库,目录让你可以卸载备份任务到一个备数据库,同时让你还原备份到环境中的其它数据库。


1.2.RMAN恢复目录的基本概念

恢复目录包含关于每个注册目标数据库的RMAN操作的元数据。当RMAN连接到恢复目录,RMAN从目录仅仅获取它的元数据。

目录包括以下类型的元数据:
1) 数据文件和归档redo日志备份集和备份片
2) 数据文件副本
3) 归档redo日志和它们的副本
4) 数据库结构(表空间和数据文件)
5) 存储脚本,它们是用户创建的命名的RMAN命令序列
6) 持久的RMAN配置设置


1.2.1.关于在RMAN恢复目录中的数据库注册

将数据库登记(enrolling)在恢复目录中为RMAN使用的过程称为注册(registration)。

建议的实践是注册环境中的每个目标数据库在一个单一的恢复目录中。例如,可以注册数据库prod1,prod2和prod3在一个单一的目录,目录由数据库catdb中的用户rco拥有。


1.2.2.关于在基础RMAN恢复目录中的元数据集中化

集中化的恢复目录(也称为基础恢复目录)的属主,可以授予或撤销其它数据库用户对目录的限制性访问。

每个限制性用户对它自己的元数据有完整的读写访问权限,这些元数据称为虚拟私有目录。RMAN元数据存储在虚拟私有目录的属主的模式中。基础恢复目录的属主决定每个虚拟私有目录用户可以访问哪个对象。

可以在使用或已经使用Oracle数据库不同版本的环境中使用恢复目录。作为结果,环境可以有不同版本的RMAN客户端,恢复目录数据库,恢复目录模式和目标数据库。“导入和移动恢复目录”章节阐述了如何合并多个恢复目录模式到一个模式。


1.2.3.关于RMAN恢复目录的重新同步

对于比如备份,还原和交叉检查的RMAN操作,RMAN总是首先更新控制文件,然后传播元数据到恢复目录。从挂载的控制文件到恢复目录的元数据流动被称为恢复目录重新同步,确保RMAN从控制文件获取的元数据是当前的。


1.2.4.关于存储的脚本(Stored Script)

可以使用存储的脚本作为命令文件的替代选项来管理频繁使用的RMAN命令序列。脚本存在恢复目录中而不是文件系统中。

**本地存储的脚本(local stored script)与当脚本创建时RMAN连接的目标数据库相关,只有当连接到目标数据库时才能够执行。**全局存储的脚本(global stored script)可在注册在恢复目录中的任何数据库上运行。虚拟私有目录用户对全局脚本只有只读权限。必须连接到基础恢复目录时才能创建或更新全局脚本。


1.2.5.Data Guard环境中的恢复目录

必须使用恢复目录来管理Data Guard环境中的所有物理主备数据库的RMAN元数据。RMAN使用恢复目录作为Data Guard环境的一个单一的数据源。

在相反的重新同步中,RMAN可以使用恢复目录来更新主备控制文件。在这种情况中,元数据从恢复目录流向控制文件而不是从相反方向。RMAN在大部分需要的情况下自动执行重新同步。因此,不需要经常使用RESYNC命令来手动重新同步。


1.3.管理恢复目录的基本步骤

管理恢复目录包括创建恢复目录,然后使用目录注册目标数据库。

设置恢复目录给RMAN使用的基本步骤如下所示:
1) 创建恢复目录。
2) 在恢复目录中注册目标数据库。这个步骤让RMAN存储目标数据库的元数据在恢复目录中。
3) 如果需要,登记任何更旧的记录不再存储在目标控制文件中的备份。
4) 如果需要,为特定的用户创建虚拟私有目录,决定它们允许访问的元数据。
5) 通过包含它在备份和恢复策略中来保护恢复目录。


2.创建恢复目录

2.1.配置恢复目录数据库

当使用恢复目录时,RMAN要求你维护一个恢复目录模式。恢复目录存储在模式的缺省表空间中。特权用户如SYS不能是恢复目录的属主。

决定将使用哪个数据库来安装恢复目录模式和如何备份数据库。同样,决定是否使目录数据库在ARCHIVELOG模式运行,这是建议的。

注:不要使用要备份的目标数据库作为恢复目录的数据库。如果目标数据库丢失,恢复目录必须受到保护。


2.1.1.规划恢复目录模式的大小

你必须分配空间给目录模式使用。恢复目录模式的大小取决于由目录监控的数据库数量。

模式随着归档redo日志文件和每个数据库的备份的数量的增加而增长。最后,如果你使用存储在目录中的RMAN存储脚本,某些空间必须分配给这些脚本。

例如,假设数据库trgt有100个文件,每天备份数据库1次,产生50个只包含1个备份片的备份集。如果假设备份片表中的每行使用最大数量的空间,那么每天的备份在恢复目录中消耗小于170KB。因此,如果备份1年,那么这段时间的总存储是大约62M。假设大约相同数量的归档日志,那么最差的情况是每年消耗大约120MB的元数据存储。对于更典型的情况,只有一部分备份片行空间被使用,每年15MB是更实际的。

如果规划注册多个数据库在恢复目录中,那么记得基于之前的计算累加每个数据库需要的空间来达成恢复目录模式的缺省表空间的总大小。


2.1.2.为恢复目录数据库分配磁盘空间

如果在现有的数据库中创建恢复目录,那么增加足够的空间来保存恢复目录模式的缺省表空间。

如果创建一个新的数据库来保存恢复目录,那么除了恢复目录模式本身的空间之外,为恢复目录数据库的其它文件分配空间:
1) SYSTEM和SYSAUX表空间
2) 临时表空间
3) Undo表空间
4) 在线redo日志文件

恢复目录数据库中使用的大部分空间用于支持表空间,例如,SYSTEM,临时和undo表空间。下表描述了典型的空间要求。

空间类型空间要求
SYSTEM表空间90MB
临时表空间5MB
回滚或undo表空间5MB
恢复目录表空间在恢复目录中注册的每个数据库使用15MB
在线redo日志每个1MB(3组,每组有2个成员)

2.2.创建恢复目录模式属主

在选择了恢复目录数据库和创建必要的空间之后,准备创建恢复目录的属主和授予用户必要的权限。

为以下部分中的指令假设以下背景信息:
1)在恢复目录数据库CATDB的表空间TOOLS存储恢复目录。如果使用RMAN关键字作为表空间名称,那么必须将它们包含在引号中和使用大写字母。
2)表空间TEMP存在恢复目录数据库中。

在恢复目录数据库中创建恢复目录模式:
1) 启动SQL*Plus,使用管理员权限连接到包含恢复目录的数据库。在这个示例中,数据库是catdb。

2) 为恢复目录数据用户和模式。
CREATE USER rco IDENTIFIED BY password
TEMPORARY TABLESPACE temp
DEFAULT TABLESPACE tools
QUOTA UNLIMITED ON tools;

3) 授予RECOVERY_CATALOG_OWNER角色给模式属主。这个角色给用户提供所有需要维护和查询恢复目录的权限。
GRANT RECOVERY_CATALOG_OWNER TO rco;

4)(可选地)通过运行dbmsrmanvpc.sql脚本和-vpd选项为恢复目录启用VPD模式。
以下命令为用户rco拥有的恢复目录启用VPD模式:
SQL> @/$ORACLE_HOME/rdbms/admin/dbmsrmanvpc.sql -vpd rco;


2.3.执行CREATE CATALOG命令

在创建目录属主之后,使用RMAN的CREATE CATALOG命令创建目录表。命令在目录属主的缺省表空间中创建目录。

注:从Oracle 12c Release 1(12.1.0.2)开始,恢复目录数据库必须使用Oracle数据库企业版。

创建恢复目录:
1) 为恢复目录数据库启用Oracle分区(Partitioning)。

2) 启动RMAN,使用恢复目录属主连接到包含目录的数据库。
$ rman catalog rco

3)运行CREATE CATALOG命令来创建目录。目录的创建要花费几分钟。如果目录表空间是用户的缺省表空间,那么运行以下命令:
RMAN>CREATE CATALOG;

可以在CREATE CATALOG命令中为目录指定表空间名称。例如:
RMAN> CREATE CATALOG TABLESPACE cat_tbs;

注:如果恢复目录的表空间的名称是RMAN关键字,那么它必须是大写字母和包含在引号中。例如:
RMAN> CREATE CATALOG TABLESPACE ‘CATALOG’;

4)使用SQL*Plus查询恢复目录来检查结果查看创建了哪些表:
SQL>SELECT TABLE_NAME FROM USER_TABLES;


3.在恢复目录中注册数据库

在恢复目录中注册目标数据库以便在恢复目录中维护数据库的记录。

3.1.关于在恢复目录中注册数据库

在恢复目录中登记(enrolling)目标数据库的过程称为注册(registration)。

如果目标数据库没有注册在恢复目录中,那么RMAN不能使用目录为数据库上的操作存储元数据。你仍然可以在没有注册的数据库上执行RMAN操作:RMAN总是存储它的元数据在目标数据库的控制文件中

如果在Data Guard环境中没有使用恢复目录,那么使用REGISTER命令来注册每个数据库。每个数据库必须具有唯一的DBID。如果使用RMAN的DUPLICATE命令或在SQL语句CREATE DATABASE,那么数据库自动分配一个唯一的DBID。如果通过其它方式创建数据库,那么复制的数据库可能像它的源数据库一样含有相同的DBID。可以使用DBNEWID工具来更改DBID这样就可以在相同的目录中注册源和复制的数据库。

可以使用UNREGISTER命令来从恢复目录中取消注册数据库。


3.1.1.关于备数据库注册

在Data Guard环境中,主备数据库共享相同的DBID和数据库名称。为了符合在目录中注册的条件,在Data Guard环境中的每个数据库必须具有不同的DB_UNIQUE_NAME值

数据库的DB_UNIQUE_NAME参数在初始化参数文件中设置。如果在Data Guard环境中使用RMAN,那么只可以为主数据库使用REGISTER DATABASE命令

可以使用以下技术来注册备数据库到恢复目录中:
1) 当作为TARGET连接到备数据库时,RMAN自动注册数据库到恢复目录中
2) 当为恢复目录未知的备数据库运行CONFIGURE DB_UNIQUE_NAME命令时,如果主数据库已经注册,RMAN自动注册这个备数据库。


3.2.使用REGISTER DATABASE命令注册数据库

为目标数据库使用恢复目录的第一步是在恢复目录中注册目标数据库。如果在Data Guard环境中使用目录,只能以这种方式注册主数据库。

使用以下步骤:
1)启动RMAN,连接到目标数据库和恢复目录。恢复目录数据库必须处于打开状态。
例如,执行以下命令使用网络服务名称catdb和用户rco(目录模式的属主)连接到目录数据库:
% rman TARGET / CATALOG rco@catdb;

2)如果目标数据库没有挂载,那么挂载或打开它:
STARTUP MOUNT;

3)注册目标数据库到连接的恢复目录:
REGISTER DATABASE;

RMAN在目录表中创建行来包含关于目标数据库的信息,然后从控制文件复制所有关于目标数据库的相关数据到目录,与控制文件同步目录。

4)确认注册已经成功。
RMAN> REPORT SCHEMA;


4.在恢复目录中登记备份

如果在磁盘上有数据文件副本,备份片或归档日志,那么可以使用CATALOG命令登记它们到恢复目录。当使用一个恢复目录,登记更旧的由于时限长已经从控制文件中删除的备份让RMAN在还原过程中使用更旧的备份。

以下命令举例说明这个技术:
CATALOG DATAFILECOPY ‘/disk1/old_datafiles/01_01_2003/users01.dbf’;
CATALOG ARCHIVELOG ‘/disk1/arch_logs/archive1_731.dbf’,
‘/disk1/arch_logs/archive1_732.dbf’;
CATALOG BACKUPPIECE ‘/disk1/backups/backup_820.bkp’;

也可以使用CATALOG START WITH命令登记一个目录中的多个备份文件,如下所示:
CATALOG START WITH ‘/disk1/backups/’;

RMAN列出要增加到RMAN仓库的文件,在增加备份之前提示确认。在使用CATALOG START WITH创建前缀时要谨慎。RMAN使用指定的前缀扫描磁盘上所有路径的所有文件。前缀不仅仅是目录名称。使用错误的前缀会导致登记错误的文件集。

例如,假设一组目录/disk1/backups,/disk1/backups-year2003, /disk1/backupsets, /disk1/backupsets/test等,所有都包含备份文件。以下命令登记所有这些目录中的所有文件,因为/disk1/backups是所有这些目录的路径的前缀:
CATALOG START WITH ‘/disk1/backups’;

为了只登记在目录/disk1/backups中的备份,正确的命令如下所示:
CATALOG START WITH ‘/disk1/backups/’;


5.创建和管理虚拟私有目录(Virtual Private Catalog)

5.1.虚拟私有目录概述

缺省情况下,任何RMAN恢复目录的所有用户具有完整权限来读取,选择,插入,更新和删除目录中的任何元数据。例如,如果两个不相关的数据库的管理员共享相同的恢复目录,每个管理员可以,不管无意还是恶意,毁坏另外一个数据库的目录数据。在很多企业中,这种情况是可以容忍的,因为相同的人员管理很多不同的数据库,也管理恢复目录。但在其它企业中,在各种数据库的管理员之间以及DBA和恢复目录管理员之间都有清晰的职责划分,你可能期望限制每个数据库管理员的权限为只修改属于他们负责的那些数据库的备份元数据,同时仍然保留单一的集中管理的RMAN恢复目录的好处。这个目标可以通过执行虚拟私有目录来达到。

从Oracle数据库11g开始RMAN恢复目录支持虚拟私有目录,但不会使用它们直到明确创建为止。在一个恢复目录下可以创建的虚拟私有目录的数量是没有限制的。每个虚拟私有目录由数据库模式用户拥有,该用户与拥有恢复目录的用户不同。

在设置一个虚拟私有目录用户之后,恢复目录的管理员给每个虚拟私有目录授予权限来使用当前注册在恢复目录中的一个或多个数据库的目录。当使用虚拟私有目录时,恢复目录的管理员也可以授予权限来注册新的数据库。

注:每个虚拟私有目录可以访问所有全局的存储脚本和那些非全局的属于虚拟私有目录有权限的那些数据库的存储脚本。虚拟私有目录不能访问非全局的属于它们没有权限的那些数据库存储脚本,它们不能创建全局的存储脚本。


5.2.为虚拟私有目录使用VPD模式

RMAN使用虚拟私有数据库(Virtual Private Database)功能来执行虚拟私有目录。

当RMAN基础恢复目录创建时,VPD功能缺省情况下不启用。需要在升级基础目录模式之后运行$ORACLE_HOME/rdbms/admin/dbmsrmanvpc.sql脚本来明确为基础恢复目录启用VPD模式。

脚本dbmsrmanvpc.sql的格式如下所示:
$ORACLE_HOME/rdbms/admin/dbmsrmanvpc.sql [[-vpd | -novpd | -scan ]
base_catalog_schema_name[…]] | -all

当运行dbmsrmanvpc.sql时,RMAN基础目录模式名称作为命令行参数提供。每次运行脚本时可以指定最多10个基础目录模式名称。

下表描述了当运行dbmsrmanvpc.sql脚本时可以使用的选项。必须使用其中一个命令行选项或提供目录模式名称。
dbmsrmanvpc.sql选项名称 描述
-vpd 授予要求的权限来支持VPD保护的目录
-novpd 通过清理基础恢复目录模式,撤消授权和移除数据库对象来禁用VPD功能。这个选项只有当不存在VPC用户在基础恢复目录中注册的时候才被使用。
-scan 执行RMAN基础目录属主模式扫描和报告VPC用户授予的权限和状态。
-all 自动检测RMAN基础目录模式和升级。

为RMAN基础目录rman_cat的所有虚拟私有目录启用VPD模式:
SQL> @$ORACLE_HOME/rdbms/admin/dbmsrmanvpc.sql -vpd rman_cat


5.3.创建虚拟私有目录

创建虚拟私有目录是一个多步骤的过程,首先创建拥有虚拟私有目录的数据库用户,然后创建虚拟私有目录。

注:如果恢复目录是虚拟私有目录,那么连接到它的RMAN客户端必须在补丁级别10.1.0.6或10.2.0.3。Oracle 9i RMAN客户端不能连接到虚拟私有目录。这个版本限制不影响RMAN客户端连接到Oracle数据库11g基础恢复目录,即使它有一些虚拟私有目录用户。

假设以下数据库在基础恢复目录中注册:prod1,prod2和prod3。拥有基础恢复目录的数据库用户是rco。你想创建数据库用户vpc1和授予这个用户只对prod1和prod2的访问权限。缺省情况下,虚拟私有目录的属主不能访问基础恢复目录。

基础RMAN恢复目录必须在创建虚拟私有目录之前创建。

创建虚拟私有目录:
1)启动SQL*Plus,使用管理员权限连接到恢复目录数据库。

2)创建拥有虚拟私有目录的用户。
例如,如果你想数据库用户vpc1拥有虚拟私有目录,那么执行以下命令:
SQL> CREATE USER vpc1 IDENTIFIED BY password
DEFAULT TABLESPACE vpcusers
QUOTA UNLIMITED ON vpcusers;

3)授予CREATE SESSION权限给拥有虚拟私有目录的用户,然后退出SQL*Plus。
以下示例授予权限给用户vpc1:
SQL> GRANT CREATE SESSION TO vpc1;
SQL> EXIT;

4)启动RMAN,作为基础恢复目录属主连接到恢复目录数据库(不是虚拟私有目录属主)。
以下示例作为rco连接到基础恢复目录:
% rman
RMAN> CONNECT CATALOG rco@catdb;

5)授予期望的权限给虚拟私有目录属主。
以下示例给用户vpc1授予访问prod1和prod2的元数据(但不是prod3)的权限:
RMAN> GRANT CATALOG FOR DATABASE prod1 TO vpc1;
RMAN> GRANT CATALOG FOR DATABASE prod2 TO vpc1;

你也可以使用DBID而不是数据库名称。虚拟私有目录用户不能访问任何其它注册在恢复目录中的数据库的元数据。

以下示例授予用户vpc1访问PDB hr_pdb的元数据的权限:
GRANT CATALOG FOR PLUGGABLE DATABASE hr_pdb TO vpc1;

也可以授予用户在恢复目录中注册新的目标数据库的权限。例如:
RMAN> GRANT REGISTER DATABASE TO vpc1;


5.4.使用虚拟私有目录注册数据库

为了在虚拟私有目录中存储目标数据库的备份元数据,必须使用虚拟私有目录注册数据库。

使用虚拟私有目录注册数据库和存储备份元数据:
1)启动RMAN和作为虚拟私有目录属主(不是基础目录属主)连接到恢复目录数据库。作为TARGET连接到想注册的数据库。
%rman
RMAN> CONNECT TARGET /
RMAN> CONNECT CATALOG vpc1@catdb;

2)注册元数据需要在虚拟私有目录中存储的数据库。
以下示例使用虚拟私有目录属主vpc1注册数据库:
RMAN> REGISTER DATABASE;

3) 使用BACKUP命令和要求的子语句备份数据库。
与备份相关的元数据存储在虚拟私有目录中。


5.5.撤消虚拟私有目录属主的权限

在创建虚拟私有目录之后,可以必要时撤消目录访问权限。

假设两个数据库注册在基础恢复目录:prod1和prod2。作为基础恢复目录的属主,可以授予用户vpc1对prod1的访问权限。你也已经授予该用户在他的虚拟私有目录中注册数据库的权限。现在你想撤消vpc1的权限。

撤消虚拟私有目录属主的权限:
1)启动RMAN,作为恢复目录属主(不是虚拟私有目录属主)连接到恢复目录数据库:
以下示例作为rco连接到恢复目录:
% rman
RMAN> CONNECT CATALOG rco@catdb;

2)撤消虚拟私有目录属主的指定的权限:
以下示例撤消虚拟私有目录属主vpc1访问pdod1的元数据的权限:
REVOKE CATALOG FOR DATABASE prod1 FROM vpc1;

你也可以指定DBID而不是数据库名称。目录vcp1保留所有其它授予的目录权限。

以下命令撤消虚拟目录属主vpc1访问PDB hr_pdb的元数据库的权限:
REVOKE CATALOG FOR PLUGGABLE DATABASE hr_pdb FROM vpc1;

也可以撤消在恢复目录中注册新的目标数据库的权限:
REVOKE REGISTER DATABASE FROM vpc1;


5.6.升级虚拟私有目录

本节描述如何使用UPGRADE CATALOG命令升级虚拟私有目录。

RMAN使用虚拟私有数据库(VPD)功能来执行虚拟私有目录。如果通过使用低于Oracle 12c Release 1(12.1.0.2)数据库的版本创建恢复目录和虚拟私有目录,或者数据库没有升级到Oracle 12c Release 2(12.2)或更高,那么必须升级这些虚拟私有目录。RMAN提供位于目录$ORACLE_HOME/rdbms/admin的脚本来升级虚拟私有目录。

升级虚拟私有目录:
1)使用SQL*Plus作为具有SYSDBA权限的SYS用户连接到恢复目录数据库。

2)运行dbmsrmansys.sql脚本来授予角色RECOVERY_CATALOG_OWNER要求的额外的权限。
SQL> @$ORACLE_HOME/rdbms/admin/dbmsrmansys.sql

3)运行dbmsrmanvpc.sql脚本来升级虚拟私有目录模式到VPD模式。
基础恢复目录模式名称必须作为输入参数提供给脚本。可以指定最多10个模式名称。可替换地,可以使用-all选项来自动检测基础目录模式和升级所有相关联的虚拟私有目录模式。

以下命令升级rco拥有的基础恢复目录的虚拟私有目录模式:
SQL> @$ORACLE_HOME/rdbms/admin/dbmsrmanvpc.sql -vpd rco

4)连接RMAN到基础恢复目录,升级基础恢复目录,然后退出RMAN。

假设拥有基础恢复目录的数据库用户是rco。以下命令升级基础恢复目录。必须输入2次命令UPGRADE CATALOG来确认升级。
$ rman CATALOG rco@catdb
RMAN> UPGRADE CATALOG;
RMAN> UPGRADE CATALOG;
RMAN> EXIT;


6.保护恢复目录

在备份和恢复策略中包括恢复目录数据库。如果不备份恢复目录,磁盘故障发生时会损坏恢复目录数据库,就可能会丢失目录中的元数据。如果没有恢复目录内容,恢复其它数据库可能会更困难。


6.1.备份恢复目录

一个单一的恢复目录可以存储多个目标数据库的元数据。因此,丢失恢复目录可能是灾难性的。必须频繁地备份恢复目录。

本节为保护恢复目录的策略开发提供一般的准则。


6.1.1.频繁备份恢复目录

恢复目录数据库是一个与任何其它数据库一样的数据库,也是备份和恢复策略的一个关键部分。通过备份保护恢复目录像数据库的任何其它部分一样。恢复目录数据库的备份策略是整体备份和恢复策略的一部分。

使用备份目标数据库一样的频率备份恢复目录。例如,如果每周对目标数据库做一个完整的数据库备份,那么在备份目标数据库之后备份恢复目录。恢复目录的备份可以在灾难恢复的场景中帮助你。即使你必须使用控制文件自动备份还原恢复目录数据库,你也可以使用在还原的恢复目录数据库中的备份的全记录来还原目标数据库。


6.1.2.为物理备份选择合适的技术

当备份恢复目录数据库,可以使用RMAN来做备份。

如下图所示,使用NOCATALOG选项启动RMAN,这样RMAN仓库是目录数据库中的控制文件。
在这里插入图片描述

当为恢复目录数据库开发RMAN备份策略时遵循以下准则:
1)运行恢复目录数据库在ARCHIVELOG模式以便可以在需要时执行时间点恢复。
2)设置保留策略到大于1的REDUNDANCY值。
3)备份数据库到2个不同的介质(例如,磁盘和磁带)。
4)定期运行BACKUP DATABASE PLUS ARCHIVELOG到介质管理器(如果可用的话),或只到磁盘。
5)不要使用另外的恢复目录作为备份的仓库。
6)配置控制文件自动备份特性为ON。

使用这个策略,控制文件自动备份特性确保恢复目录数据库总是可以恢复,只要控制文件自动备份可用。


6.1.3.分开恢复目录和目标数据库

恢复目录只有与它设计来保护的数据分开时才是有效的。因此,必须决不存储包含数据库的RMAN仓库的恢复目录在和目标数据库相同的数据库中。同样,不要存储目录数据库在与目标数据库相同的磁盘上。

为了阐述为什么建议数据分开,假设为数据库prod1和prod2存储目录。如果prod1遭受完全的介质故障,如果prod1的恢复目录也存储在prod1,那么丢失数据数据库也同时丢失恢复目录。在这个时候唯一的选项是还原prod1的控制文件的自动备份,使用它来还原和恢复数据库,而缺乏存储在恢复目录中的任何信息的好处。


6.1.4.为逻辑备份导出恢复目录数据

使用Data Pump Export工具创建的RMAN恢复目录的逻辑备份可以是物理备份的有用的补充。

对于恢复目录数据库的损坏,可以使用Data Pump Import快速重新导入导出的恢复目录数据到另外一个数据库和重建目录。


6.2.恢复恢复目录

还原和恢复恢复目录数据库与使用还原和恢复任何其它数据库很相似。

可以从自动备份中为恢复目录数据库还原控制文件和spfile,然后对数据库的剩余部分还原和执行完整的恢复。如果是在使用多个恢复目录,那么可以使用另外的恢复目录来记录关于这个恢复目录数据库的元数据。

如果不能通过正常的Oracle恢复过程来恢复恢复目录数据库,那么必须重建目录。这种最坏的场景包括以下例子:
1) 恢复目录数据库从没有备份过。
2) 恢复目录数据库备份过,但由于数据文件备份或归档日志不可用导致不能恢复。

具有以下选项来部分重建缺失的恢复目录的内容:
1)使用RESYNC CATALOG命令来使用来自目标数据库的控制文件或控制文件副本的任何RMAN仓库信息更新恢复目录。控制文件中由于时间长而抛弃的记录的元数据是无法恢复的。
2)执行CATALOG START WITH命令重新登记可用的备份。

为了最小化最坏情况场景的可能性,备份策略必须至少包括备份恢复目录。


7.管理存储的脚本

可以在恢复目录中创建和存储脚本。

7.1.关于存储的脚本

可以使用存储的脚本作为命令文件的替换选项来管理频繁使用的RMAN命令序列。脚本存储在恢复目录而不是文件系统中。

存储的脚本可以是本地的或全局的。本地脚本与脚本创建时RMAN连接的目标数据库相关联,只有当连接到目标数据库时才能执行。全局存储脚本可以对注册在恢复目录中的任何数据库运行,如果RMAN客户端连接到恢复目录和目标数据库。

在CREATE SCRIPT命令的括号中容许的命令与在RUN块中支持的命令相同。任何在RUN命令中合法的命令也允许在存储脚本中。以下命令在存储脚本中是非法的:RUN,@和@@。

当指定一个脚本名称,RMAN允许但一般不要求使用引号包含存储脚本的名称。如果名称以数字开头或一个RMAN保留关键字,那么必须使用引号包含名称来作为存储脚本名称使用。考虑避免以非字母开头的字符或与RMAN保留关键字相同的名称作为存储脚本名称。

考虑使用命令惯例来避免全局和本地存储脚本之间的混淆。对于EXECUTE SCRIPT,DELETE SCRIPT和PRINT SCRIPT命令,如果作为参数传递的脚本名称不是为连接的目标实例定义的脚本名称,那么RMAN使用相同的名称搜索全局脚本。例如,如果全局脚本global_backup在恢复目录中,但没有本地存储的脚本global_backup为目标数据库定义,那么以下命令删除全局脚本:
DELETE SCRIPT global_backup;

为了使用与存储脚本相关的命令,即使是全局脚本,也必须同时连接到恢复目录和目标数据库实例。


7.2.创建存储的脚本

可以使用CREATE SCRIPT命令来创建存储的脚本。

如果指定了GLOBAL,那么这个名称的全局脚本必须在恢复目录中不存在。如果没有指定GLOBAL,那么目标数据库相同名称的本地脚本必须不存在。也可以使用REPLACE SCRIPT来创建一个脚本或更新一个存在的脚本。

创建存储脚本:
1) 启动RMAN,连接到目标数据库和恢复目录(如果使用的话)。

2)运行CREATE SCRIPT 命令。
以下示例创建一个本地脚本:
CREATE SCRIPT full_backup
{
    BACKUP DATABASE PLUS ARCHIVELOG;
    DELETE OBSOLETE;
}

对于全局脚本,语法是类似的:
CREATE GLOBAL SCRIPT global_full_backup
{
    BACKUP DATABASE PLUS ARCHIVELOG;
    DELETE OBSOLETE;
}

可选地,可以提供描述信息给COMMENT:
CREATE GLOBAL SCRIPT global_full_backup
COMMENT ‘use only with ARCHIVELOG mode databases’
{
    BACKUP DATABASE PLUS ARCHIVELOG;
    DELETE OBSOLETE;
}

也可以通过读取一个文本文件的内容来创建一个脚本。这个文件必须以左括号字符({)开头,在RUN块中包含一系列有效的命令,然后以右括号(})结束。否则,会报语法错误,正如命令在键盘输入一样。
CREATE SCRIPT full_backup
    FROM FILE ‘/tmp/my_script_file.txt’;

3)检查输出。
如果没有错误输出,那么RMAN成功创建脚本和存储在恢复目录中。


7.3.替换存储的脚本

为了更新存储的脚本,使用REPLACE SCRIPT脚本。

如果正在替换本地脚本,那么必须连接到当创建脚本时连接的目标数据库。如果脚本不存在,那么RMAN创建它。

替换存储的脚本:
1)启动RMAN,连接到目标数据库和恢复目录(如果使用的话)。

2)执行REPLACE SCRIPT命令。
以下示例使用新内容更新脚本full_backup:
REPLACE SCRIPT full_backup
{
    BACKUP DATABASE PLUS ARCHIVELOG;
}

可以通过指定GLOBAL关键字更新全局脚本:
REPLACE GLOBAL SCRIPT global_full_backup
COMMENT ‘A script for full backup to be used with any database’
{
    BACKUP AS BACKUPSET DATABASE PLUS ARCHIVELOG;
}

与CREATE SCRIPT一样,可以使用一个文本文件更新本地或全局存储脚本:
REPLACE GLOBAL SCRIPT global_full_backup
    FROM FILE ‘/tmp/my_script_file.txt’;


7.4.执行存储的脚本

使用EXECUTE SCRIPT运行存储的脚本。

如果指定了GLOBAL,那么这个名称的全局脚本必须在恢复目录中存在;否则,RMAN返回错误RMAN-06004。如果不指定GLOBAL,那么RMAN搜索为当前目标数据库定义的本地脚本。如果这个名称的本地脚本没有找到,RMAN搜索相同名称的全局脚本,如果找到则执行它。

执行存储脚本:
1)启动RMAN,连接到目标数据库和恢复目录(如果使用的话)。

2)如果需要,使用SHOW来检查配置的通道。
脚本使用在执行脚本的时间时配置的自动通道。如果必须覆盖配置的通道,在脚本中使用ALLOCATE CHANNEL命令。因为是RUN块,如果脚本中的一个RMAN命令失败,脚本中接下来的命令也不会执行。

3)运行EXECUTE SCRIPT。命令要求一个RUN块,如下例所示:
RUN
{
    EXECUTE SCRIPT full_backup;
}

如果指定名称的脚本存在,上面的命令调用本地脚本。如果没有找到本地脚本,但指定名称的全局脚本存在,那么RMAN执行全局脚本。

如果本地和全局脚本有相同的名称,也可以使用EXECUTE GLOBAL SCRIPT来控制调用哪个脚本。如果没有名称为global_full_backup的本地脚本,以下两个命令具有相同的效果:
RUN
{
    EXECUTE GLOBAL SCRIPT global_full_backup;
}

RUN
{
    EXECUTE SCRIPT global_full_backup;
}


7.5.创建和执行动态的存储的脚本

可以在CREATE SCRIPT命令中指定替换变量。

当在命令行中启动RMAN,子语句USING指定一个或多个值给命令文件中的替换变量使用。如同在SQL*Plus,&1指示哪里放置第1个值,&2指示哪里放置第2个值,等等。

创建和使用动态存储脚本:
1) 创建包含CREATE SCRIPT语句和必须动态更新值的替换变量的命令行文件。

以下示例为磁带集的名称,FORMAT的字符串,标签名称和还原点名称使用替换变量。
CREATE SCRIPT quarterly {
ALLOCATE CHANNEL c1
    DEVICE TYPE sbt
    PARMS ‘ENV=(OB_MEDIA_FAMILY=&1)’;
BACKUP
    TAG &2
    FORMAT ‘/disk2/bck/&1%U.bck’
    KEEP FOREVER
    RESTORE POINT &3
    DATABASE;
}

2)连接RMAN到目标数据库(必须是挂载或打开的)和恢复目录,为恢复目录脚本指定初始值。
% rman TARGET / CATALOG rco@catdb USING arc_backup bck0906 FY06Q3

恢复目录被要求KEEP FOREVER,但不要求任何其它KEEP选项。

3)运行在第一个步骤中创建的命令文件来创建存储脚本。
RMAN> @/tmp/catscript.rman

4)每个季度,执行存储脚本,为替换变量传输值。

以下示例执行名称为quaterly恢复目录脚本。示例指定介质家族的名称为arc_backup(磁带集),bck1206作为FORMAT字符串的一部分,FY06Q4作为还原点的名称。
RUN
{
  EXECUTE SCRIPT quarterly
    USING arc_backup
                 bck1206
                 FY06Q4;
}


7.6.打印存储的脚本

命令PRINT SCRIPT显示存储的脚本或将它输出到文件。

打印存储脚本:
1)启动RMAN,连接到目标数据库和恢复目录。

2)运行PRINT SCRIPT命令:
PRINT SCRIPT full_backup;

发送脚本的内容到文件,使用以下命令格式:
PRINT SCRIPT full_backup
    TO FILE ‘/tmp/my_script_file.txt’;

对于全局脚本,类似的语法如下:
PRINT GLOBAL SCRIPT global_full_backup;

PRINT GLOBAL SCRIPT global_full_backup
    TO FILE ‘/tmp/my_script_file.txt’;


7.7.列出存储的脚本名称

使用命令LIST … SCRIPT NAMES来显示定义在恢复目录中的脚本名称。

当RMAN连接到恢复目录而没有连接到目标实例时,只有命令LIST GLOBAL SCRIPT NAMES和LIST ALL SCRIPT NAMES能够使用。LIST … SCRIPT NAMES命令的其它格式要求一个恢复目录连接。

列出存储的脚本名称:
1)启动RMAN,连接到目标数据库和恢复目录。

2)运行LIST … SCRIPT NAMES命令。
例如,运行以下命令来列出所有当前连接的目标数据库可以执行的全局和本地脚本:
LIST SCRIPT NAMES;

以下命令只列出全局脚本名称:
LIST GLOBAL SCRIPT NAMES;

列出所有存储在当前恢复目录中的脚本的名称,包括注册在恢复目录中的所有目标数据库的全局脚本和本地脚本:
LIST ALL SCRIPT NAMES;

对于列出的每个脚本,输出标示定义脚本的目标数据库名称或脚本是否是全局的。


7.8.删除存储的脚本

使用DELETE GLOBAL SCRIPT命令从恢复目录中删除存储的脚本。

删除存储的脚本:
1)启动RMAN,连接到目标数据库和恢复目录。

2)运行DELETE SCRIPT命令。

如果使用DELETE SCRIPT而不含GLOBAL,而在目标数据库不存在指定名称的存储的脚本,那么RMAN搜索一个指定名称的全局的存储的脚本,如果存在则删除全局脚本。例如,假设输入以下命令:
DELETE SCRIPT ‘global_full_backup’;

在这个情况中,RMAN搜索为当前目标数据库定义的脚本global_full_backup,如果不能找到,它就搜索名称为global_full_backup的全局脚本,然后删除它。

删除全局存储的脚本:
DELETE GLOBAL SCRIPT ‘global_full_backup’;


7.9.在RMAN启动时执行存储的脚本

当启动RMAN客户端时,使用SCRIPT参数执行恢复目录中的存储的脚本,例如:
% rman TARGET / CATALOG rco@catdb SCRIPT ‘/tmp/fbkp.cmd’;

当启动RMAN客户端时,必须连接到包含存储的脚本的恢复目录和脚本应用的目标数据库。

如果本地和全局脚本使用相同的名称定义,那么RMAN总是执行本地脚本。


8.维护恢复目录

维护恢复目录包括重新同步,更新和升级恢复目录等任务。

本节描述各种管理和维护任务。


8.1.关于恢复目录维护

在创建恢复目录和注册目标数据库之后,必须维护目录。

例如,必须运行RMAN维护命令来更新备份记录和删除不再需要的备份。必须执行这种维护类型不管是否与恢复目录一起使用RMAN。其它维护类型,例如升级恢复目录模式,是与恢复目录一起使用RMAN所特有的。

如果在Data Guard环境中使用恢复目录,那么特别的考虑应用到恢复目录中记录的备份和数据库文件。


8.2.重新同步恢复目录

当RMAN执行重新同步,它比较恢复目录和目标数据库当前或备份的控制文件的内容,使用缺失或更改过的元数据更新恢复目录。

当目标控制文件挂载和目录可用的时候,大部分RMAN命令自动执行重新同步。在Data Guard环境中,RMAN可以执行反向重新同步来使用目录的元数据更新数据库控制文件。


8.2.1.关于恢复目录的重新同步

恢复目录的重新同步确保RMAN从控制文件获取的元数据保持当前状态。重新同步可以是完全或部分的。

在部分重新同步(partial resynchronization)中,RMAN读取目标数据库的当前控制文件来更新更改过的关于新备份和新归档redo日志等的元数据。RMAN不重新同步关于数据库物理模式的元数据。

在完全重新同步(full resynchronization)中,RMAN更新所有更改的记录,包括数据库模式的记录。RMAN在数据库发生结构性更改(增加或删除数据库文件,创建新转生(new incarnation)等)或RMAN持久性配置更改之后执行完全重新同步。

当RMAN执行完全重新同步时,它创建一个快照控制文件,它是一个临时的备份控制文件。数据库确保在任何时间点只有一个RMAN会话访问快照控制文件。RMAN在目标数据库主机上操作系统特定的位置中创建快照控制文件。可以指定快照控制文件的名称和位置。

快照控制文件确保RMAN对控制文件有一个一致性的查看。因为这个控制文件是用来短期使用,它没有在目录中注册。RMAN在恢复目录中记录控制文件的检查点来标记目录的现时性。


8.2.1.1.关于在Data Guard环境中恢复目录的重新同步

RMAN只有当作为TARGET连接到数据库时,才会自动与数据库重新同步恢复目录。因此,当作为TARGET连接到环境中的一个数据库时,RMAN不会自动重新同步Data Guard环境中的每个数据库。

可以使用RESYNC CATALOG FROM DB_UNIQUE_NAME命令手动与Data Guard环境中的数据库同步恢复目录。

对于手动重新同步的一个例子,假设RMAN作为TARGET连接到生产数据库prod和你已经使用CONFIGURE为dgprod3创建一个配置。如果运行RESYNC CATALOG FROM DB_UNIQUE_NAME dgprod3,那么RMAN使用dgprod3控制文件重新同步恢复目录。在这个情况中,RMAN执行一个正常的重新同步,元数据从dgprod3控制文件流向目录和一个反向重新同步。在反向重新同步时,RMAN使用恢复目录中的持久配置来更新dgprod3控制文件


8.2.2.决定何时重新同步恢复目录

当RMAN连接到目标数据库和恢复目录和已经执行RMAN命令时,RMAN自动重新同步恢复目录。

因此,不需要经常手动运行RESYNC CATALOG命令。以下部分描述要求手动重新同步目录的情形。


8.2.2.1.在恢复目录不可用之后重新同步

当执行会引起部分重新同步的RMAN命令时,如果恢复目录不可用,那么在后来打开目录数据库时,使用RESYNC CATALOG命令手动重新同步它。

例如,目标数据库可能在纽约而恢复目录数据库在日本。你可能不想每天在CATALOG模式中备份数据库来避免依赖地理位置上遥远数据库的可用性。在这种情况中,可以尽可能频繁地连接到恢复目录和运行RESYNC CATALOG命令。


8.2.2.2.当备份不频繁时在归档模式重新同步

假设目标数据库运行在ARCHIVELOG模式。也假设数据库的相关操作如下:
1)备份数据库不频繁(例如,在数据库备份之间几百个redo日志被归档)
2)每天产生大量的日志切换(例如,在目录重新同步之间1000个切换)

在这种情况中,你可能想定期手动重新同步恢复目录,因为当redo日志切换发生或redo日志归档时恢复目录不会自动更新。数据库只在控制文件中存储关于redo日志切换和归档redo日志的元数据。必须定期重新同步来传输这个信息到恢复目录。

必须多频繁重新同步恢复目录取决于数据库归档redo日志的速率。操作的成本与自之前重新同步以后已经在控制文件中插入或更改的记录数量成比例。如果没有记录已经被插入或修改,那么重新同步的成本很低;如果很多记录已经被插入或更改,那么重新同步更消耗时间。


8.2.2.3.在配置备数据库之后重新同步

即使没有作为TARGET连接到数据库,也可以为备数据库创建或更改RMAN配置。

使用CONFIGURE DB_UNIQUE_NAME或CONFIGURE … FOR DB_UNIQUE_NAME命令执行这个任务。如后面章节“手动重新同步恢复目录”所述,可以手动重新同步备数据库来更新备数据库的控制文件。


8.2.2.4.在控制文件记录的由于时间长而删除之前重新同步

你的目标是确保恢复目录中的元数据是当前的。因为恢复目录从目标控制文件中获取元数据,目录中的数据的现时性取决于控制文件中的数据的现时性。必须确保控制文件中的备份元数据在被新的记录覆盖之前记录在目录中。

初始化参数CONTROL_FILE_RECORD_KEEP_TIME决定了记录在成为被覆盖的候选者之前在控制文件中保留的最少天数。因此,必须确保在被擦除之前将控制文件记录重新同步到恢复目录。

每隔一段小于CONTROL_FILE_RECORD_KEEP_TIME设置的时间执行其中一个以下的操作:
1)做一次备份,因此执行一次内含的恢复目录的重新同步。
2)使用RESYNC CATALOG命令手动重新同步恢复目录。

确保CONTROL_FILE_RECORD_KEEP_TIME比备份或重新同步之间的间隔更长。否则,控制文件记录会在传输到恢复目录之前被重用。在大部分情况下一个额外的星期是一个安全边际。

警告:决不能设置CONTROL_FILE_RECORD_KEEP_TIME为0。如果这样做,控制文件中的备份记录可能会在RMAN将它们增加到目录之前被覆盖。

如果控制文件变得太大会出现问题。目标数据库控制文件的大小增长取决于以下数量:
1)执行的备份
2)数据库生成的归档redo日志
3)信息存储在控制文件中的天数

如果控制文件增长太大,因为它已经达到最大块数量或最大记录数而不能再扩展,那么数据库可能会覆盖最旧的记录,即使记录的时长少于CONTROL_FILE_RECORD_KEEP_TIME设置。在这种情况中,数据库将日志写到alert日志。如果你步骤发现这种情形发生,那么减少CONTROL_FILE_RECORD_KEEP_TIME的值,增加重新同步的频率。


8.2.3.手动重新同步恢复目录

使用RESYNC CATALOG来强制与目标数据库控制文件完全重新同步恢复目录。

取决于你是否想重新同步一个特定的数据库或Data Guard环境中的所有数据库,可以使用RESYNC CATALOG FROM DB_UNIQUE_NAME指定数据库唯一名称。为了使用DB_UNIQUE_NAME ALL,必须作为SYS用户使用密码文件验证连接到目标数据库。一般来说,在为备数据库运行CONFIGURE命令之后但还没有连接到备数据库之前执行这个操作。

1)启动RMAN,连接到目标数据库和恢复目录。

2)挂载或打开目标数据库:
STARTUP MOUNT;

3)重新同步恢复目录。
RESYNC CATALOG;

以下示例重新同步standby1的控制文件:
RESYNC CATALOG FROM DB_UNIQUE_NAME standby1;

当作为SYS连接到目标数据库和使用密码文件验证时,为Data Guard环境中的所有数据库重新同步控制文件:
RESYNC CATALOG FROM DB_UNIQUE_NAME ALL;


8.3.在更改DB_UNIQUE_NAME之后更新恢复目录

你可能决定更改Data Guard环境中的数据库的DB_UNIQUE_NAME。在这种情况中,可以运行CHANGE DB_UNIQUE_NAME命令来关联恢复目录中旧DB_UNIQUE_NAME的元数据到新的DB_UNIQUE_NAME。

命令CHANGE DB_UNIQUE_NAME不会实际上更改数据库本身的DB_UNIQUE_NAME,而是更新唯一名称已经或将要更改的数据库的目录元数据。

以下步骤假设主数据库的DB_UNIQUE_NAME是prodny和你已经更改备数据库的DB_UNIQUE_NAME从prodsf1到prodsf2。在更改主数据库的DB_UNIQUE_NAME之后,也可以使用相同的步骤,除了在步骤1作为TARGET连接到备数据库而不是主数据库之外。

在更改DB_UNIQUE_NAME之后更新恢复目录:
1) 作为TARGET连接RMAN到主数据库和恢复目录。
% rman
RMAN> CONNECT CATALOG rco@catdb
RMAN> CONNECT TARGET sbu@prodny

2) 列出恢复目录已知的DB_UNIQUE_NAME值。
RMAN> LIST DB_UNIQUE_NAME OF DATABASE;

3)更改RMAN元数据中的DB_UNIQUE_NAME。
以下示例更改数据库的唯一名称从备数据库prodsf1到prodsf2:
RMAN> CHANGE DB_UNIQUE_NAME FROM prodsf1 TO prodsf2;


8.4.从恢复目录取消注册目标数据库

可以使用UNREGISTER DATABASE命令从恢复目录中取消注册数据库。

当数据库从恢复目录中取消注册时,在恢复目录中的所有RMAN仓库记录会丢失。数据库可以再次注册,但该数据库的恢复目录记录现在是基于重新注册时的控制文件内容。目标数据库控制文件中比CONTROLFILE_RECORD_KEEP_TIME设置更旧的记录会丢失。存储的脚本,由于没有存储在控制文件中,也会丢失。


8.4.1.当不在Data Guard环境中时取消注册目标数据库

使用UNREGISTER DATABASE命令取消注册目标数据库。

这个场景假设你没有在使用恢复目录存储主备数据库的元数据。

取消注册数据库:
1)启动RMAN,作为TARGET连接到要取消注册的数据库和恢复目录。

没有必要连接到目标数据库,但如果不这样做,就必须在UNREGISTER命令中指定目标数据库的名称。如果在恢复目录中多个数据库拥有相同的名称,那么必须创建一个RUN块包含命令和使用SET DBID来设置数据库的DBID。

2)记下RMAN启动时显示的DBID。
例如,当连接到打开的目标数据库时,RMAN输出以下格式的一行:
connected to target database: PROD (DBID=39525561)

3)作为预防措施,使用LIST BACKUP SUMMARY和LIST COPY SUMMARY列出记录在恢复目录中的所有备份可能是有用的。这样,如果以后决定重新注册数据库,可以重新登记控制文件未知的备份。

4)如果你的目的是实际上完全删除所有数据库的备份,那么运行DELETE语句来删除所有存在的备份。不要删除所有备份如果你的目的只是将数据库从恢复目录中移除和依赖控制文件来存储这个数据库的RMAN元数据。

以下命令阐述如何删除备份:
DELETE BACKUP DEVICE TYPE sbt;
DELETE BACKUP DEVICE TYPE DISK;
DELETE COPY;

RMAN列出它要删除的备份和在删除它们之前提示确认。

5)运行UNREGISTER DATABASE命令。
UNREGISTER DATABASE;

RMAN显示数据库的名称和DBID,提示你确认:
database name is “RDBMS” and DBID is 931696259
Do you really want to unregister the database (enter YES or NO)? yes

当过程完成时,RMAN输出以下信息:
database unregistered from the recovery catalog


8.4.2.取消注册备数据库

命令UNREGISTER支持DB_UNIQUE_NAME子语句在Data Guard环境中使用。可以使用这个子语句来移除特定数据库的元数据。

恢复目录关联备份到特定的数据库。当取消注册数据库时,RMAN为这些备份文件更新数据库名称为null。因此,备份仍然被记录但没有属主。可以执行CHANGE … RESET DB_UNIQUE_NAME命令来关联当前没有属主的备份到不同的数据库。如果在UNREGISTER命令中指定INCLUDING BACKUPS,那么RMAN也一同移除取消注册的数据库的备份元数据。

在这个场景中,假设主数据库lnx3有关联的备数据库standby1。你想取消注册备数据库。

取消注册备数据库:
1) 启动RMAN,作为TARGET连接到主数据库。同时,连接RMAN到恢复目录。
% rman
RMAN> CONNECT TARGET “sbu@lnx3 AS SYSBACKUP”;
RMAN> CONNECT CATALOG rco@catdb;

2)列出数据库唯一名称。
RMAN> LIST DB_UNIQUE_NAME OF DATABASE;

List of Databases
DB Key DB Name 		DB ID 		   Database Role 	Db_unique_name
------- ------- ----------------- --------------- ------------------
1 		LNX3 		781317675 			STANDBY 		STANDBY1
1 		LNX3 		781317675 			PRIMARY			 LNX3

3)运行UNREGISTER DB_UNIQUE_NAME命令。
RMAN> UNREGISTER DB_UNIQUE_NAME standby1;


8.5.在恢复目录中重置数据库转生

当使用RESETLOGS选项打开数据库时会创建数据库的一个转生(incarnation)。可以在视图V$DATABASE_INCARNATION中访问新转生的记录。

如果使用RESETLOGS选项打开数据库,那么新的数据库转生记录会自动在恢复目录中创建。数据库也内在和自动地执行RESET DATABASE命令,它指定这个数据库新转生是当前的转生。所有接下来的备份和目标数据库完成的日志归档都与新的数据库转生关联。

不管什么时候RMAN返回数据库到当前RESETLOGS SCN之前的一个SCN,或者是RESTORE和RECOVER,或者是FLASHBACK DATABASE,命令RESET DATABASE TO INCARNATION都是必需的。然而,在以下场景中不需要明确执行RESET DATABASE TO INCARNATION,因为RMAN内含地与FLASHBACK一起运行该命令。
1)使用FLASHBACK DATABASE来倒回数据库到在直接祖先路径(direct ancestral path)的一个SCN。
2)使用FLASHBACK DATABASE来倒回数据库到一个还原点。

以下步骤解释当恢复越过RESETLOGS时如何重置数据库转生。

为介质恢复重置恢复目录到一个更旧的转生:
1)决定期望的数据库转生的转生主键。执行LIST INCARNATION命令来获取转生主键值:
LIST INCARNATION OF DATABASE trgt;

List of Database Incarnations
DB Key Inc Key DB Name   DB ID 	STATUS Reset SCN   Reset Time
------- ------- ------- ------ ------- ----------- -----------
1 		 2 		TRGT 1224038686 PARENT 	1         02-JUL-12
1 		582 	TRGT 1224038686 CURRENT 59727     10-JUL-12

转生主键列在Inc Key列中。

2)重置数据库到旧的转生。
RESET DATABASE TO INCARNATION 2;

3)如果先前的转生的控制文件可用的和已挂载,那么跳到步骤6。否则,关闭数据库和以不挂载方式启动。
SHUTDOWN IMMEDIATE
STARTUP NOMOUNT

4)从旧转生中还原控制文件。如果控制文件已经打过标签,那么指定标签名称。否则,可以运行SET UNTIL命令,如下例所示:
RUN
{
    SET UNTIL ‘SYSDATE-45’;
    RESTORE CONTROLFILE; # only if current control file is notavailable
}

5)挂载还原的控制文件:
ALTER DATABASE MOUNT;

6)运行RESTORE和RECOVER命令来从先前的转生中还原和恢复数据库文件,然后使用RESETLOGS选项打开数据库。
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;


8.6.升级恢复目录

8.6.1.关于恢复目录升级

如果升级到Oracle数据库12c Release 1(12.1.0.2)或之后的版本,那么恢复目录数据库必须使用Oracle数据库企业版。

如果使用恢复目录模式的版本比RMAN客户端要求的更低,那么必须升级它。《Oracle Database Backup and Recovery Reference》的compatibility matrix阐述了哪些模式版本和哪些RMAN版本兼容。例如,如果使用Oracle数据库11g的RMAN客户端和10.2版本的恢复目录模式,必须升级目录。

恢复目录模式的Oracle数据库10g Release 1版本要求CREATE TYPE权限。如果在10gR1之前的版本创建恢复目录属主,如果当它不包含CREATE TYPE权限时授予RECOVERY_CATALOG_OWNER角色,那么必须在升级目录之前明确授予CREATE TYPE权限给这个用户。

当执行UPGRADE CATALOG时,如果恢复目录的版本高于RMAN客户端要求的版本,会收到一个错误。然而,如果恢复目录是当前的和不需要升级,RMAN允许UPGRADE CATALOG命令运行,这样可以在任何需要的时候重新创建包。检查日志文件以发现升级过程中产生的错误信息。


8.6.1.1.升级Data Guard环境中的恢复目录的特殊考虑

假设在Data Guard环境中升级恢复目录模式到Oracle数据库11g或更高的版本。当RMAN连接到备数据库,它自动注册新数据库信息和重新同步以获取控制文件中的文件名称。

在重新同步的过程中,RMAN将名称与目标数据库名称关联起来。因为恢复目录包含历史元数据,目录中的某些记录是控制文件未知的。例如,standby1控制文件不知道在primary1上做的所有备份。这些旧记录的数据库唯一名称是null。可以使用CROSSCHECK来修正这些记录。


8.6.2.确认恢复目录模式的版本

恢复目录模式版本存储在恢复目录中。这个信息很重要假如在生产系统中维护多个不同版本的数据库,必须确认目录模式的版本适用于特定的目标数据库版本。

确认恢复目录的模式版本:
1)启动SQL*Plus,作为目录属主连接到恢复目录数据库。

2) 查询 RCVER表来获取模式版本:
SQL> *SELECT FROM rcver;

VERSION
------------
12.01.00.01

如果表显示多行,那么RCVER表中的最高版本是当前恢复目录模式的版本。表只存储主版本号而不是补丁版本号。例如,假设RCVER表显示以下行:

VERSION
------------
10.02.00
11.02.00
12.01.00.01

这些行表示目录使用10.2.0版本的可执行文件创建,然后升级到11.2.0版本,最后升级到12.1.0.1版本。目录模式的当前版本是12.1.0.1。


8.6.3.使用UPGRADE CATALOG命令

升级恢复目录:
1)为恢复目录数据库启动Oracle分区。

2)如果恢复目录数据库使用标准版,那么使用以下一种技术:
a.从标准版迁移恢复目录数据库到企业版;
b.移动恢复目录到Oracle数据库企业版,然后使用IMPORT CATALOG命令导入恢复目录到数据库。

3) 使用SQL*Plus作为具有SYSDBA权限的SYS用户连接到恢复目录数据库。

4)运行dbmsrmansys.sql脚本来授予RECOVERY_CATALOG_OWNER角色要求的额外权限。
SQL> @$ORACLE_HOME/rdbms/admin/dbmsrmansys.sql

5)(可选)运行dbmsrmanvpc.sql脚本和-vpd选项来为恢复目录启用虚拟私有目录模式。

以下命令为用户rco拥有的基础恢复目录启用虚拟私有目录模式:
SQL> @$ORACLE_HOME/rdbms/admin/dbmsrmanvpc.sql -vpd rco;

6)退出SQL*Plus。

7)启动RMAN和连接RMAN到恢复目录数据库。

8)运行UPGRADE CATALOG命令:
RMAN> UPGRADE CATALOG;
RMAN> UPGRADE CATALOG;


8.7.导入和移动恢复目录

可以在RMAN中使用IMPORT CATALOG命令来合并一个恢复目录模式到另外一个。

在以下情形中这个命令是有用的:
1)为数据库的不同的版本有多个恢复目录模式。你想合并所有存在的模式为一个而不丢失备份元数据。
2)你想移动恢复目录从一个数据库到另外一个数据库。


8.7.1.关于恢复目录导入

当使用IMPORT CATALOG,源目录模式(source catalog schema)是要导入到不同模式中的目录模式。目标目录模式(destination catalog schema)是你想导入源目录模式到的目录模式。

缺省情况下,RMAN从在源恢复目录中注册的所有目标数据库导入元数据。可选地,可以指定要从源目录模式中导入的数据库ID列表。

缺省情况下,RMAN在成功导入后从源目录模式中取消注册导入的数据库。为表示取消注册是否成功,RMAN在取消注册被合并的数据库之前和之后打印信息。也可以指定NO UNREGISTER选项来指定不从源目录中取消注册数据库

存储的脚本要么是全局的要么是本地的。在导入过程中因为目标模式已经包含脚本名称,全局脚本但不是本地脚本有名称冲突是有可能的。在这种情况中,RMAN重命名全局脚本名称为COPY OF script_name。例如,RMAN重命令bp_cmd为COPY OF bp_cmd。

如果重命名的全局脚本仍然不是唯一的,那么RMAN重命名它为COPY(2) OF script_name。如果这个脚本名称也存在,那么RMAN重命名这个脚本为COPY(3) OF script_name。RMAN继续COPY(n) OF模式直到脚本唯一命名。


8.7.2.导入恢复目录的前提要求

目标数据库,恢复目录数据库和恢复目录模式可以是不同的数据库版本。建议的实践是导入所有存在的恢复目录到一个单一的恢复目录模式是最近版本的恢复目录。

当使用IMPORT CATALOG,源恢复目录模式的版本必须与你运行命令的RMAN可执行文件的当前版本相同。如果源目录模式是一个更低的版本,那么在导入模式之前升级它到当前版本。如果源目录模式是一个更高的版本,那么尝试使用更高版本的RMAN可执行文件导入。

数据库不可以同时注册在源和目标目录模式。如果有数据库当前同时注册在这两个目录模式中,那么在执行导入前从源目录模式取消注册数据库。


8.7.3.导入恢复目录

当导入一个恢复目录到另外一个,不需要连接到目标数据库。RMAN只需要连接到源和目标目录。

在这个例子中,数据库scrdb包含用户102cat拥有的10.2恢复目录模式,而数据库destdb包含用户111cat拥有的11.1恢复目录模式。

导入恢复目录:
1) 启动RMAN,作为CATALOG连接到目标恢复目录模式。
% rman
RMAN> CONNECT CATALOG 111cat@destdb;

2) 导入源恢复目录模式,指定源目录的连接字符串。
例如,输入以下命令导入数据库srcdb上用户102cat拥有的目录。
IMPORT CATALOG 102cat@srcdb;

可以指定数据库的DBID或数据库名称来导入注册在源目录中目标数据库子集的元数据。
IMPORT CATALOG 102cat@srcdb DBID=1423241,1423242;
IMPORT CATALOG 102cat@srcdb DB_NAME=prod3, prod4;

3)可选地,连接到目标数据库来检查元数据已经成功导入。例如,作为TARGET连接到数据库prod1,列出这个数据库的所有备份:
CONNECT TARGET “sbu@prod1 AS SYSBACKUP”;
LIST BACKUP;


9.删除恢复目录

命令DROP CATALOG删除由CREATE CATALOG创建的对象。如果拥有恢复目录的用户也含有不是由CREATE CATALOG创建的对象,那么DROP CATALOG命令不移除这些对象。

如果删除一个恢复目录,而你没有恢复目录模式的备份,那么所有在目录中注册的目标数据库的备份会变成不可用。然而,每个目标数据库的的控制文件仍然保留着数据库最近的备份记录。

命令DROP CATALOG不适合用于从有多个目标数据库注册的恢复目录中取消注册一个单一的数据库。删除恢复目录会删除注册在目录中的所有目标数据库的备份的恢复目录记录

删除恢复目录模式:
1)启动RMAN,连接到目标数据库和恢复目录。作为目录模式的属主连接到要删除的恢复目录。
% rman TARGET / CATALOG rco@catdb

2)运行删除目录命令。
DROP CATALOG;
DROP CATALOG;

注:即使在删除恢复目录之后,控制文件仍然包含关于备份的记录。为了从控制文件中清除RMAN仓库记录,重建控制文件。




来源:《Oracle Database Backup and Recovery User’s Guide,19c》

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值