3.1.6 同步恢复目录

本章前面已经设置了恢复目录,此时可将一个或多个数据库注册到恢复目录中。注册过程将备份信息和目标数据库结构传播到恢复目录中。一般而言,RMAN将控制文件中的大多数信息保存在恢复目录中;然而,在恢复目录中执行一些操作时,需要手动更新元数据库。

以下几节介绍有关恢复目录同步的主题:注册数据库、注销数据库以及重新同步恢复目录。另外,你将了解如何更改冗余数据库的数据库标识符(Database Identifier, DBID),以便在恢复目录中注册冗余数据库。在恢复目录中记录的每个数据库的DBID必须是唯一的。

1.注册数据库

对于RMAN将予以备份或恢复的每个数据库,都必须在RMAN仓库中进行注册。此操作记录诸如目标数据库模式和目标数据库唯一DBID的信息。只需要将目标数据库注册一次,随后连接到目标数据库的RMAN会话将自动在仓库中引用正确的元数据信息。只能成功注册处于MOUNT或OPEN状态的数据库。

下例使用操作系统身份验证方法连接到目标数据库,使用密码身份验证方法连接到仓库:

        [oracle@tettnang ~]$ rman target / catalog rcat_owner/Rcat9095@rcat
        Recovery Manager: Release 12.1.0.1.0 -
            Production on Tue Feb 18 21:20:26 2014
        Copyright (c)1982, 2013, Oracle and/or its affiliates. All rights reserved.
        connected to target database: RPT12C (DBID=1766066998)
        connected to recovery catalog database
        RMAN> register database;
        database registered in recovery catalog
        starting full resync of recovery catalog
        full resync complete
        RMAN>

所有注册到仓库的数据库都必须拥有唯一DBID;如果尝试再次注册数据库,将会看到以下错误消息:

        RMAN> register database;
        RMAN-00571: ===========================================================
        RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
        RMAN-00571: ===========================================================
        RMAN-03009: failure of register command on
            default channel at 02/18/2014 21:22:40
        RMAN-20002: target database already registered in recovery catalog
        RMAN>

可使用Cloud Control注册数据库。图3-2显示Recovery Catalog Settings页面,在此页面中可以指定恢复目录并注册数据库。如果未在注册过程中执行此步骤,那么使用EM执行的任何备份都不会记录在恢复目录中。

图3-2 使用EM指定仓库和注册数据库

2.更改数据库的DBID

上一节尝试第二次在恢复目录中注册同一数据库,但是RMAN不允许注册冗余数据库,因为拥有相同DBID的数据库已经存在于恢复目录中。如果复制了数据库,又要为两个数据库使用同一恢复目录,该怎么办呢?可以使用DBNEWID实用程序(在Linux命令行提示符下使用nid命令)。

如果在运行nid时未指定任何参数,那么界面中将显示可能的参数:

        [oracle@tettnang ~]$ nid
        DBNEWID: Release 12.1.0.1.0 - Production on Tue Feb 18 21:37:46 2014
        Copyright (c)1982, 2013, Oracle and/or its affiliates. All rights reserved.

        Keyword     Description                  (Default)
        ----------------------------------------------------
        TARGET      Username/Password            (NONE)
        DBNAME      New database name            (NONE)
        LOGFILE     Output Log                    (NONE)
        REVERT      Revert failed change          NO
        SETNAME     Set a new database name only  NO
        APPEND      Append to output log          NO
        HELP        Displays these messages       NO

        [oracle@tettnang ~]$

TARGET指定数据库的用户名和密码。还可以根据需要指定DBNAME来创建新的数据库名以及DBID,如果只更改数据库名,请指定SETNAME=Y。

以下是更改前的RPT12C数据库的DBID:

        SQL> select dbid, name from v$database;

              DBID   NAME
        ---------- ---------
        1766066998 RPT12C
        SQL>

必须以MOUNT模式,干净地关闭和重新启动将要更改其名称和DBID的数据库,如本例所示:

        SQL> shutdown immediate
        Database closed.
        Database dismounted.
        ORACLE instance shut down.
        SQL> startup mount
        ORACLE instance started.

        Total System Global Area 3140026368 bytes
        Fixed Size                2686512 bytes
        Variable Size          1040187856 bytes
        Database Buffers        2080374784 bytes
        Redo Buffers             16777216 bytes
        Database mounted.
        SQL>

接下来在命令行提示符中运行nid命令,这里只更改DBID:

        [oracle@tettnang ~]$ nid target=/

        DBNEWID: Release 12.1.0.1.0 - Production on Tue Feb 18 21:46:23 2014

    Copyright (c)1982, 2013, Oracle and/or its affiliates. All rights reserved.

    Connected to database RPT12C (DBID=1766066998)

    Connected to server version 12.1.0

    Control Files in database:
        +DATA/RPT12C/CONTROLFILE/current.261.826650871
        +RECOV/RPT12C/CONTROLFILE/current.256.826650871

    Change database ID of database RPT12C? (Y/[N]) => Y

    Proceeding with operation
    Changing database ID from 1766066998 to 1779317104
        Control File +DATA/RPT12C/CONTROLFILE/current.261.826650871 - modified
        Control File +RECOV/RPT12C/CONTROLFILE/current.256.826650871 - modified
        Datafile +DATA/RPT12C/DATAFILE/system.258.82665079 - dbid changed
        Datafile +DATA/RPT12C/DATAFILE/example.266.82665088 - dbid changed
        Datafile +DATA/RPT12C/DATAFILE/sysaux.257.82665075 - dbid changed
        Datafile +DATA/RPT12C/DATAFILE/undotbs1.260.82665084 - dbid changed
        Datafile +DATA/RPT12C/DATAFILE/users.269.82693134 - dbid changed
        Datafile +DATA/RPT12C/DATAFILE/users.259.82665084 - dbid changed
        Datafile +DATA/RPT12C/DATAFILE/undotbs1.270.82693134 - dbid changed
    . . .
        Datafile +DATA/RPT12C/TEMPFILE/temp1.381.82768161 - dbid changed
        Datafile +DATA/RPT12C/TEMPFILE/temp2.382.82768162 - dbid changed
        Datafile +DATA/RPT12C/TEMPFILE/temp3.383.82768162 - dbid changed
        Control File +DATA/RPT12C/CONTROLFILE/current.261.826650871 -
          dbid changed
        Control File +RECOV/RPT12C/CONTROLFILE/current.256.826650871 -
          dbid changed
        Instance shut down

    Database ID for database RPT12C changed to 1779317104.
    All previous backups and archived redo logs for this database are unusable.
    Database is not aware of previous backups and archived logs
      in Recovery Area.
    Database has been shutdown, open database with RESETLOGS option.
    Successfully changed database ID.
    DBNEWID - Completed successfully.

    [oracle@tettnang ~]$

最后,使用RESETLOGS选项打开数据库:

    [oracle@tettnang ~]$ sqlplus / as sysdba

    SQL*Plus: Release 12.1.0.1.0 Production on Tue Feb 18 21:51:19 2014

    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
        Connected to an idle instance.

        SQL> startup mount
        ORACLE instance started.

        Total System Global Area 3140026368 bytes
        Fixed Size                2686512 bytes
        Variable Size          1040187856 bytes
        Database Buffers        2080374784 bytes
        Redo Buffers             16777216 bytes
        Database mounted.
        SQL> alter database open resetlogs;

        Database altered.
        SQL>

下面是更改后的DW数据库的DBID:

        SQL> select dbid, name from v$database;

              DBID NAME
        ---------- ---------
        1779317104 RPT12C
        SQL>

使用DBNEWID(nid)命令至少有一个缺点:由于所有备份文件都包含旧DBID,因此以前的备份将失效;在更改DBID后,首先必须使用RESETLOGS选项打开数据库(如上例所示)。另外,由于现在没有可用的旧备份,因此必须完整备份数据库。

3.注销数据库

如果由于现有目录空间紧张或注册的数据库有误,则需要将备份信息从一个恢复目录迁移到另一个恢复目录,可以使用UNREGISTER命令从恢复目录注销数据库。在本例中,连接到目标数据库和恢复目录,然后执行UNREGISTER命令:

        [oracle@tettnang ~]$ rman target / catalog rcat_owner/Rcat9095@rcat

        Recovery Manager: Release 12.1.0.1.0 -
            Production on Tue Feb 18 21:58:42 2014

        Copyright (c)1982, 2013, Oracle and/or its affiliates.
            All rights reserved.

        connected to target database: RPT12C (DBID=1779317104)
        connected to recovery catalog database

        RMAN> unregister database;

        database name is "RPT12C" and DBID is 1779317104
        Do you really want to unregister the database (enter YES or NO)? yes
        database unregistered from the recovery catalog
        RMAN>

注销数据库后,仍会将备份元数据存储在控制文件中,存储的天数由初始化参数CONTROL_FILE_RECORD_KEEP_TIME指定。在注册数据库时,Oracle将使用控制文件中的备份相关信息和数据库结构元数据填充恢复目录。如果希望在重新注册数据库时添加未保存在控制文件中的任何备份信息,则可以使用CATALOG命令手动添加备份元数据,如下一节所述。

4.记录其他备份文件

如果已经在RMAN以外的范围创建了备份,或者已经注册了数据库但控制文件中的RMAN备份已经过期,则可以使用CATALOG命令将这些备份添加到RMAN恢复目录中。可以使用CATALOG命令及其关联的关键字,将以下备份文件类型添加到恢复目录中:

●数据文件副本DATAFILECOPY

●备份信息段BACKUPPIECE

●控制文件副本CONTROLFILECOPY

●归档重做日志文件ARCHIVELOG

例如,除了闪回恢复区中已经记录的归档日志文件外,可能还需要在恢复目录中记录其他归档日志文件目标。如果将特定ASM磁盘组位置或文件系统位置中的多个备份文件记录到目录中,则可以使用START WITH选项。本例使用START WITH选项,将ASM磁盘组+DATA2中的所有备份文件记录到目录中:

        RMAN> catalog start with '+DATA2';

提示:

在START WITH子句中指定的文件名或文件路径只是一个前缀,不允许使用通配符。

练习3-1

将其他备份文件记录到目录中

在本练习中,COMPLREF数据库在/u00/oradata/arch/complref中有一个附加的归档日志目标,这些归档日志文件的创建时间早于在恢复目录中注册数据库的时间。可使用Unix ls命令查询文件系统位置,然后将相应位置中的所有归档日志文件添加到恢复目录中:

(1)在文件系统中查询备份文件的列表:

        [oracle@oel63 complref]$ ls -l /u00/oradata/arch/complref
        total 11120
        -rw-r----- 1 oracle vboxsf 11375104 Feb 18 23:48 1_557_821312592.dbf
        -rw-r----- 1 oracle vboxsf    1024 Feb 18 23:49 1_558_821312592.dbf
        -rw-r----- 1 oracle vboxsf    1536 Feb 18 23:49 1_559_821312592.dbf
        [oracle@oel63 complref]$

(2)连接到RMAN,然后使用CATALOG START WITH命令将这些归档重做日志文件添加到恢复目录中:

        [[oracle@tettnang ~]$ rman target / catalog rcat_owner/Rcat9095@rcat

        Recovery Manager: Release 12.1.0.1.0 -
            Production on Tue Feb 18 21:58:42 2014

        Copyright (c)1982, 2013, Oracle and/or its affiliates. All rights reserved.

        connected to target database: RPT12C (DBID=1779317104)
        connected to recovery catalog database

        RMAN> catalog start with '/u00/oradata/arch/complref';
        searching for all files that match the pattern /u00/oradata/arch/complref

        List of Files Unknown to the Database
        =====================================
        File Name: /u00/oradata/arch/complref/1_557_821312592.dbf
        File Name: /u00/oradata/arch/complref/1_558_821312592.dbf
        File Name: /u00/oradata/arch/complref/1_559_821312592.dbf

        Do you really want to catalog the above files (enter YES or NO)? yes
        cataloging files...
        cataloging done
        List of Cataloged Files
        =======================
        File Name: /u00/oradata/arch/complref/1_557_821312592.dbf
        File Name: /u00/oradata/arch/complref/1_558_821312592.dbf
        File Name: /u00/oradata/arch/complref/1_559_821312592.dbf
        RMAN>

如果有意或无意间注销了数据库,则可以重新注册数据库。但是,控制文件中的一些备份元数据可能已经过期,而重新注册会使用控制文件中的元数据。如果有一个闪回恢复区,则可以使用CATALOG命令的RECOVERY AREA选项,方便地重新记录闪回恢复区中的所有备份内容:

        RMAN> catalog recovery area noprompt;

NOPROMPT关键字会记录每个备份,而且不要求予以确认。

5.以手动方式重新同步恢复目录

某些情况下,可能需要重新同步目标数据库的控制文件与恢复目录中的元数据。例如,恢复目录数据库可以由于网络问题或恢复目录数据库停用而未记录一个或多个备份。此时,RMAN仅在目标数据库控制文件中记录备份信息。即使恢复目录不可用,RMAN也始终将备份信息记录在控制文件中!

另外,可能执行偶然性备份并依赖于归档重做日志文件进行恢复。这本来并不是问题,但此时不会在恢复目录中自动记录最新归档重做日志文件的列表。

最后,有时可能会更改目标数据库的物理结构。此信息会自动记录在目标数据库的控制文件中,而不会记录在恢复目录中。

以手动方式重新同步恢复目录是一个简单的过程。在启动RMAN并连接到恢复目录后,运行RESYNC CATALOG命令,如下例所示:

        RMAN> resync catalog;
        starting full resync of recovery catalog
        full resync complete
        RMAN>

考点:

在运行RMAN BACKUP命令或手动执行重新同步时,RMAN恢复目录会记录有关目标数据库结构、归档重做日志和备份的信息。