Sun Cluster Geographic Edition 数据复制指南(适用于 Oracle Data Guard)

第 1 章 使用 Oracle Data Guard 软件复制数据

本章介绍如何在 Sun Cluster Geographic Edition 环境中使用 Oracle Data Guard 软件来配置数据复制,

其中包含以下主题:

本 Sun Cluster Geographic Edition 发行版支持以下 Oracle Data Guard 数据库备用类型:

当与 Oracle 实时应用群集 (Real Application Cluster, RAC) 软件一起使用时,Sun Cluster Geographic Edition 软件支持使用 Oracle Data Guard 进行数据复制。在使用 Oracle Data Guard 复制数据之前,必须先熟悉 Oracle Data Guard 文档。有关安装并配置 Oracle Data Guard 软件及其最新修补程序的信息,请参见 Oracle Data Guard 文档


注 –

在数据复制期间,主群集中的数据被复制到备用群集。备用群集可以位于在地理位置上与主群集分开的站点。主群集与备用群集之间的距离取决于您的数据复制产品所支持的距离。


本章中的示例过程说明了如何配置 Oracle Data Guard 以便在主数据库与备用数据库之间复制数据。

在 Oracle Data Guard 保护组中复制数据(任务图)

下表概述了在保护组中配置 Oracle Data Guard 数据复制的步骤。

表 1–1 Oracle Data Guard 数据复制的管理任务

任务 

描述 

执行 Oracle Data Guard 软件的初始配置。 

请参见初始配置 Oracle Data Guard 软件

创建针对 Oracle Data Guard 数据复制而配置的保护组。 

请参见如何创建和配置 Oracle Data Guard 保护组

添加由 Oracle Data Guard 控制的配置。 

请参见如何将 Oracle Data Guard Broker 配置添加到 Oracle Data Guard 保护组

将应用程序资源组添加到该保护组。 

请参见如何将应用程序资源组添加到 Oracle Data Guard 保护组

将保护组配置复制到备用群集。 

请参见如何将 Oracle Data Guard 保护组配置复制到伙伴群集

激活该保护组。 

请参见如何激活 Oracle Data Guard 保护组

检查复制的运行时状态。 

请参见检查 Oracle Data Guard 数据复制的运行时状态

检测故障。 

请参见在使用 Oracle Data Guard 数据复制的系统上检测群集故障

使用切换操作来迁移服务。 

请参见通过切换操作迁移使用 Oracle Data Guard 的服务

使用接管操作来迁移服务。 

请参见在使用 Oracle Data Guard 的系统上强制执行接管操作

强制执行接管操作后恢复数据。 

请参见执行接管操作后恢复 Oracle Data Guard 数据

Oracle Data Guard 数据复制概述

本节概述了 Oracle Data Guard 与 Sun Cluster Geographic Edition 的集成,重点说明了对 Oracle Data Guard 的支持与对其他数据复制产品(如 Sun StorageTekTM Availability Suite 软件、Hitachi TrueCopy 和 EMC SRDF)的支持的不同。

Oracle Data Guard 阴影资源组

可以将由 Oracle Data Guard 软件控制的 Oracle Data Guard Broker 配置添加到保护组。Sun Cluster Geographic Edition 软件为每个 Oracle Data Guard Broker 配置创建一个阴影 RAC 服务器代理资源组。阴影资源组的名称遵循以下格式:

ODGconfigurationname-rac-proxy-svr-shadow-rg

例如,由 Oracle Data Guard 软件控制的名为 sales 的 Oracle Data Guard Broker 配置具有名为 sales-rac-proxy-svr-shadow-rg 的阴影 RAC 服务器代理资源组。但是,如果配置名称包含一个或多个句点 (.),这些句点将转换为下划线字符 (_) 来构成资源组名称。因此,配置名称 mysales.com 具有名为 mysales_com -rac-proxy-svr-shadow-rg 的阴影资源组。

阴影 RAC 服务器代理资源组“投影”您所创建的实际 RAC 服务器代理资源组,以便管理和监视受 Sun Cluster 软件控制的 Oracle RAC 数据库。

每个阴影资源组都包含一项资源,即 SUNW.gds 资源,该资源的探测脚本反映了 RAC 服务器代理资源组的状态。该资源的名称遵循以下格式:


ODGconfigurationname-rac-proxy-svr-shadow-rs

有关 RAC 服务器代理资源组的更多信息,请参见《Sun Cluster Data Service for Oracle RAC Guide for Solaris OS》

阴影 RAC 服务器代理资源组是必需的,因为 Oracle Data Guard 软件与其他 Sun Cluster Geographic Edition 复制产品不同,它是 Oracle RAC 软件必不可少的一部分。Oracle Data Guard 要求 Oracle RAC 软件正在运行并且数据库已启动才能复制其数据。

因此,将实际 RAC 服务器代理资源组置于 Sun Cluster Geographic Edition 控制之下将导致 Oracle RAC 数据库在备用群集上关闭。相比而言,阴影 RAC 服务器代理资源组则可以置于 Sun Cluster Geographic Edition 控制之下。执行此操作时可以不中断数据复制过程,同时仍使配置可以遵循用于管理应用程序资源组的常用 Sun Cluster Geographic Edition 结构。

阴影 RAC 服务器代理资源组的状态指示受 RAC 服务器代理资源组监视和控制的数据库是主群集还是备用群集。也就是说,此状态指示数据库是否在主群集上联机且在备用群集上不受管理。此外,阴影 RAC 服务器代理资源的状态还反映了 RAC 服务器代理资源的状态以及数据库是主群集还是备用群集。

Oracle Data Guard 复制资源组

当控制 Oracle Data Guard 软件的 Oracle Data Guard Broker 配置添加到保护组时,Sun Cluster Geographic Edition 软件会在复制资源组中为该特定 Oracle Data Guard Broker 配置创建一项特殊的复制资源。通过监视这些复制资源组,Sun Cluster Geographic Edition 软件能够监视复制的整体状态。系统将为每个保护组中的每个 Oracle Data Guard Broker 配置创建一个带有一个复制资源的复制资源组。

复制资源组的名称遵循以下格式:

ODGProtectiongroupName-odg-rep-rg.

复制资源组中的复制资源可监视本地群集上 Oracle Data Guard Broker 配置的复制状态,该状态由 Oracle Data Guard Broker 软件报告。

复制资源的名称遵循以下格式:

ODGBrokerConfigurationName-odg-rep-rs.


注 –

在 Oracle Data Guard 中,当在群集中激活保护组时,会启用数据复制资源。因此,在 Oracle Data Guard 中,取消激活保护组的群集中的数据复制状态显示为 unknown


初始配置 Oracle Data Guard 软件

本节介绍了在 Sun Cluster Geographic Edition 产品中配置 Oracle Data Guard 复制所需执行的初始步骤。


注 –

本文档中的步骤介绍如何使用 Oracle 工具与命令(如 dgmgrl),这些步骤只是为了说明。请查阅 Oracle 文档,确定满足环境特定要求而需遵循的详细过程。


保护组示例 sales-pg 在本节中被配置在包含两个(伙伴)群集 cluster-pariscluster-newyork 的伙伴关系中。由每个群集上的单个 RAC 服务器代理资源组管理和监视的 Oracle RAC 数据库通过 mysales_com -rac-proxy-svr-shadow-rg 阴影 RAC 服务器代理资源组投影。应用程序数据包含在 sales 数据库中,并由 Oracle Data Guard 作为 mysales.com Oracle Data Guard Broker 配置的一部分进行复制。

阴影 RAC 服务器代理资源组 mysales_com-rac-proxy-svr-shadow-rg 和 Oracle Data Guard Broker 配置 mysales.com 同时在 cluster-pariscluster-newyork 群集上存在。但是,它们投影的 RAC 服务器代理资源组的名称可能在 cluster-pariscluster-newyork 群集上不同。sales-pg 保护组通过管理 cluster-pariscluster-newyork 群集之间的数据复制来保护应用程序数据。

本节提供了以下信息:

Oracle Data Guard Broker 配置

要定义 Oracle Data Guard Broker 配置,需要确定以下信息:

在一对主数据库和备用数据库之间配置 Oracle Data Guard 后,可以通过使用 ${ORACLE_HOME}/bin/dgmgrl 命令来定义所指定复制的属性创建 Oracle Data Guard Broker 配置。可以使用此命令来设置和检索前面列出的 Oracle Data Guard Broker 属性。

您还需要确定管理每个群集上的 Oracle RAC 数据库的 RAC 服务器代理资源组的名称。可以通过 clsetup 命令使用数据服务配置向导来配置这些名称,或者按照《Sun Cluster Data Service for Oracle RAC Guide for Solaris OS》中的附录 D “Command-Line Alternatives”中的说明来配置这些名称。

在下表所列出的 Oracle Data Guard Broker 配置属性中,只能使用 Sun Cluster Geographic Edition 软件更改 Protection Mode 属性。不能使用 Sun Cluster Geographic Edition 软件修改配置中的其他 Oracle Data Guard Broker 属性,如 DelayMinsMaxFailureMaxConnectionsNetTimeout 属性。您需要手动调整这些属性,这可以使用 Oracle Data Guard Broker 命令来完成,也可以通过使用 SQL*Plus 修改 spfile 服务器参数文件或 init${SID}.ora 文件中保存的相应数据库参数来完成。

属性 

允许的值 

描述 

Protection Mode

MaxPerformanceMaxAvailability MaxProtection

Oracle 所使用的数据复制模式,范围从异步 (MaxPerformance) 到同步 (MaxProtection)

Standby type

physicallogical

所执行的复制的类型,作为主数据库定义的一部分保存,包括 Redo Apply (physical) 或 SQL Apply (logical)

Configuration name

 

Oracle Data Guard Broker 配置(包含一个主数据库和一个备用数据库)的名称 

Primary database

 

主数据库的名称、其 net 服务名以及其备用类型 

Secondary database

 

备用数据库的名称以及其 net 服务名 

在执行切换和接管操作期间,Sun Cluster Geographic Edition 软件修改 Oracle Data Guard Broker 配置角色更改。

有关 Oracle Data Guard Broker 配置的更多信息,请参阅 Oracle Data Guard Broker 文档

Procedure如何设置主数据库

在下面的步骤中,主群集称为 cluster-paris(节点 phys-paris-1phys-paris-2),备用群集称为 cluster-newyorkphys-newyork-1phys-newyork-2)。Oracle Clusterware 虚拟 IP 主机名的后面追加后缀 -crs

cluster-paris 上的主数据库称为 sales,它具有实例 sales1sales2cluster-newyork 上的备用数据库称为 salesdr,它具有实例 salesdr1salesdr2。对于每个数据库和实例,net 命名服务名均追加后缀 -svc,例如 sales-svcsales1 -svc

开始之前

请确保您已编辑了自己的 Oracle 用户 .profile .cshrc 文件,以便为本地 Oracle RAC 数据库实例设置正确的 Oracle SIDORACLE_HOMEPATH 环境变量。除非另行说明,否则您只需要从主群集中托管受保护的数据库实例的某个节点运行命令。

  1. 检验您可以在所有主节点和备用节点上解析 Oracle Clusterware 使用的 Oracle 虚拟 IP 地址。


    phys-paris-1# getent hosts phys-paris-1-crs
    10.11.112.41    phys-paris-1-crs
    
    
  2. 在主群集上创建一个数据库。

    使用 Oracle 数据库配置助手 (Database Configuration Assistant, dbca) 或 SQL*Plus 实用程序。

  3. 确认主数据库的 Oracle 密码文件存在。


    oracle (phys-paris-1)$ cd ${ORACLE_HOME}/dbs
    oracle (phys-paris-1)$ ls -l orapwsales1
    lrwxrwxrwx   1 oracle   oinstall      25 November  2 02:06 orapwsales1
    	-> /oradata/SALES/orapwsales

    Oracle Data Guard 要求主群集和备用群集中所有参与节点上的 Oracle 密码文件一致。

    如果密码文件不存在,请按照如下所示创建一个:


    oracle (phys-paris-1)$ orapwd file=${ORACLE_HOME}/dbs/orapwsales1 \
    	password=sysdba_password
    

    之后便可以将该文件移到共享存储上的某个位置,并从每个节点创建一个指向该文件的符号链接。更改文件名以反映每个节点上的本地 SID。之后,便可以将该文件复制到备用群集 (cluster-newyork) 上。

  4. 使用 sqlplus 命令确保数据库处于日志记录模式。


    oracle (phys-paris-1)$ sqlplus '/ as sysdba'
    SQL> alter database force logging;
    Database altered.
  5. 配置 Oracle Data Guard Broker 配置文件位置。

    按如下所示运行 sqlplus 命令,并将两个文件名替换为适合您的配置的文件名。确保这些文件位于所有 cluster-paris 节点均可见的共享存储上。


    oracle (phys-paris-1)$ sqlplus '/ as sysdba'
    SQL> alter system set dg_broker_config_file1='/oradata/SALES/dr1sales.dat'
       2 scope=both sid='*';
    System altered.
    SQL> alter system set dg_broker_config_file2='/oradata/SALES/dr2sales.dat'
       2 scope=both sid='*';
    System altered.
  6. 关闭所有数据库实例。

  7. 在主数据库上,挂载一个数据库实例并启用 Oracle 数据库闪回功能。


    oracle (phys-paris-1)$ sqlplus '/ as sysdba'
    SQL> startup mount;
    ORACLE instance started.
    
    Total System Global Area  532676608 bytes
    Fixed Size                  2031416 bytes
    Variable Size             276824264 bytes
    Database Buffers          247463936 bytes
    Redo Buffers                6356992 bytes
    Database mounted.
    System altered.
    SQL> alter database archivelog;
    Database altered.
    SQL> alter database flashback on;
    Database altered.
    SQL> alter database open;
    Database altered.
  8. 重新启动其他数据库实例。

  9. 创建数据库备用重做日志。

    您可能需要添加多个备用重做日志,具体取决于您的配置。这些日志的名称、数量和大小取决于若干因素,其中包括您是否使用最佳灵活结构 (Optimal Flexible Architecture, OFA)、拥有的联机重做日志文件的数量以及这些日志文件的大小。下面的示例说明了如何在使用 OFA 命名模式的情况下配置单个 50 MB 的备用重做日志文件。一个默认的双节点 Oracle RAC 数据库通常要求添加六个日志文件。


    oracle (phys-paris-1)$ sqlplus '/ as sysdba'
    SQL> alter database add standby logfile size 50m;
    Database altered.
  10. 配置 Oracle 日志归档目的地。

    您可能需要改变或添加一个或多个 Oracle 日志归档目的地参数,具体取决于您的配置。这些参数具有一些可调属性。有关详细信息,请查阅 Oracle 文档。下面的示例显示了设置的两个日志归档目的地,一个用于本地群集,另一个用于备用群集,其中使用了 OFA 命名。


    oracle (phys-paris-1)$ sqlplus '/ as sysdba'
    SQL> alter system set log_archive_dest_1='location=use_db_recovery_file_dest
       2 arch mandatory valid_for=(all_logfiles,all_roles)
       3 db_unique_name=sales' scope=both sid='*';
    System altered.
    
    SQL> alter system set log_archive_dest_2='service=salesdr-svc
      2 lgwr sync affirm valid_for=(online_logfiles,primary_role)
      3 db_unique_name=salesdr' scope=both sid='*';
    System altered.
    
    SQL> alter system set log_archive_dest_10='location=use_db_recovery_file_dest'
      2 scope=both sid='*';
    System altered.
    
    SQL> alter system set standby_file_management='AUTO' scope=both sid='*';
    System altered.
  11. 配置获取归档日志 (Fetch Archive Log, FAL) 参数。

    为使数据库能够知道在服务器上的什么位置获取缺少的归档重做日志,以及将这些日志发送到客户机上的什么位置,需要设置 FAL 系统属性。这些属性使用源数据库和目标数据库的 net 服务名。可通过运行下面的 sqlplus 命令将这些参数设置为对于您的配置而言正确的值。


    oracle (phys-paris-1)$ sqlplus '/ as sysdba'
    SQL> alter system set fal_server='salesdr-svc' scope=both sid='*';
    System altered.
    
    SQL> alter system set fal_client='sales-svc' scope=both sid='*';
    System altered.

Procedure如何配置主数据库侦听器和命名服务

  1. 为 Oracle Data Guard 创建静态侦听器。


    注 –

    请在所有 cluster-paris 节点上执行此步骤。


    Oracle Data Guard 要求您配置静态侦听器。下面的示例使用 ${ORACLE_HOME}=/oracle/oracle/product/10.2.0/db_1,并说明在 ${ORACLE_HOME}/network/admin/listener.ora 文件中的什么位置添加静态侦听器的对应条目。SID_LIST_LISTENER_PHYS-PARIS-1(SID_NAME = sales1) 行因节点而异,而 (GLOBAL_DBNAME=sales_DGMGRL)cluster-newyork 上有所不同。稍后,您将在 cluster-newyork 节点上添加这些条目。


    oracle (phys-paris-1)$ cat ${ORACLE_HOME}/network/admin/listener.ora
    SID_LIST_LISTENER_PHYS-PARIS-1 =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = /oracle/oracle/product/10.2.0/db_1)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = sales1)
          (GLOBAL_DBNAME=sales_DGMGRL)
          (ORACLE_HOME = /oracle/oracle/product/10.2.0/db_1)
        )
      )
    oracle (phys-paris-1)$
  2. 重新启动侦听器。

    要启用这些静态条目,请在 cluster-paris 中的每个节点上重新启动 Oracle 侦听器进程。


    oracle (phys-paris-1)$ lsnrctl stop LISTENER_PHYS_PHYS-PARIS-1
    LSNRCTL for Solaris: Version 10.2.0.3.0 - Production on 29-OCT-2008 02:04:56
    
    Copyright (c) 1991, 2006, Oracle.  All rights reserved.
    
    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    The command completed successfully
    oracle$ lsnrctl start LISTENER_PHYS_PHYS-PARIS-1
    LSNRCTL for Solaris: Version 10.2.0.3.0 - Production on 29-OCT-2008 02:05:04
    
    Copyright (c) 1991, 2006, Oracle.  All rights reserved.
    
    Starting /oracle/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
    
    TNSLSNR for Solaris: Version 10.2.0.3.0 - Production
    …
    Services Summary...
    Service "PLSExtProc" has 1 instance(s).
      Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
    Service "sales" has 2 instance(s).
      Instance "sales1", status READY, has 2 handler(s) for this service...
      Instance "sales2", status READY, has 1 handler(s) for this service...
    Service "salesXDB" has 2 instance(s).
      Instance "sales1", status READY, has 1 handler(s) for this service...
      Instance "sales2", status READY, has 1 handler(s) for this service...
    Service "sales_DGB" has 2 instance(s).
      Instance "sales1", status READY, has 2 handler(s) for this service...
      Instance "sales2", status READY, has 1 handler(s) for this service...
    Service "sales_DGMGRL" has 1 instance(s).
      Instance "sales1", status UNKNOWN, has 1 handler(s) for this service...
    Service "sales_XPT" has 2 instance(s).
      Instance "sales1", status READY, has 2 handler(s) for this service...
      Instance "sales2", status READY, has 1 handler(s) for this service...
    The command completed successfully
  3. 检验所有数据库实例的 net 服务命名条目。

    确保您所使用的命名服务方法(tnsnames.ora 或目录服务)为所有 Oracle 数据库实例均定义了相应的条目。下面的示例仅显示针对 cluster-paris 群集的条目类型。此外,还应在修改 pfile 参数文件时,为您稍后创建的备用 (salesdr) 数据库实例添加相应的条目。在本示例中,sales 数据库动态地向侦听器注册一个服务名 sales(请参见数据库的 service_names 初始化参数)。


    oracle (phys-paris-1)$ cat ${ORACLE_HOME}/network/admin/tnsnames.ora
    SALES1-SVC =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = phys-paris-1-crs)(PORT = 1521)
          (SEND_BUF_SIZE = 65535)(RECV_BUF_SIZE = 65535))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = sales)
          (INSTANCE_NAME = sales1)
        )
      )
    
    SALES2-SVC =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = phys-paris-2-crs)(PORT = 1521)
          (SEND_BUF_SIZE = 65535)(RECV_BUF_SIZE = 65535))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = sales)
          (INSTANCE_NAME = sales2)
        )
      )
    
    SALES-SVC =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = phys-paris-1-crs)(PORT = 1521)
          (SEND_BUF_SIZE = 65535)(RECV_BUF_SIZE = 65535))
          (ADDRESS = (PROTOCOL = TCP)(HOST = phys-paris-2-crs)(PORT = 1521)
          (SEND_BUF_SIZE = 65535)(RECV_BUF_SIZE = 65535))
          (LOAD_BALANCE = yes)
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = sales)
        )
      )
    
    LISTENERS_SALES =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = phys-paris-1-crs)(PORT = 1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = phys-paris-2-crs)(PORT = 1521))
      )

Procedure如何准备备用数据库

  1. 创建主数据库的备份。

    下面的示例说明了如何使用 Oracle 恢复管理器 (Recovery Man, RMAN) 实用程序来创建可以在备用 cluster-newyork 群集上恢复的主数据库副本。该示例还说明了如何避免执行单独的步骤来创建备用数据库的控制文件。有关完成此步骤的选项的更多信息,请参见 Oracle 文档。


    oracle (phys-paris-1)$ rman
    RMAN> connect target sys/DBA_password@sales-svc;
    RMAN> connect auxiliary /;
    RMAN> backup device type disk tag 'mybkup' database include current
    2> controlfile for standby;
    RMAN> backup device type disk tag 'mybkup' archivelog all not backed up;
    
  2. 将备份文件复制到备用系统。

    cluster-newyork 群集上创建相应的目录分层结构,并将数据库备份复制到该群集中。您为此示例中所示的文件指定的实际位置取决于您在配置数据库时所做的具体选择。


    oracle (phys-newyork-1)$ mkdir -p $ORACLE_BASE/admin/salesdr
    oracle (phys-newyork-1)$ cd $ORACLE_BASE/admin/salesdr
    oracle (phys-newyork-1)$ mkdir adump bdump cdump dpdump hdump pfile udump
    Make the directory for the database backup
    oracle (phys-newyork-1)$ mkdir -p /oradata/flash_recovery_area/SALES/backupset/date
    Copy over the files
    oracle (phys-newyork-1)$ cd /oradata/flash_recovery_area/SALES/backupset/date
    oracle (phys-newyork-1)$ scp oracle@phys-paris-1:`pwd`/\* .
    Make the base directory for new database files
    oracle (phys-newyork-1)$ mkdir -p /oradata/SALESDR
    
  3. 创建一个 pfile 参数文件。

    为备用数据库 (salesdr) 创建一个合适的服务器初始化文件。创建此文件的最简单方法是复制主数据库的参数并进行修改。下面的示例说明如何创建 pfile 参数文件:


    oracle (phys-paris-1)$ sqlplus '/ as sysdba'
    SQL> CREATE PFILE='/tmp/initpfile_for_salesdr.ora' FROM SPFILE;
    File created.
    SQL> quit
    
  4. 修改 pfile 参数文件。

    将特定于主群集的所有条目更改为适合于备用群集的条目,如下面的示例所示。修改带 Oracle SID 前缀的条目(即 sales1sales2),以便使用备用数据库实例的 SID 名称(即 salesdr1salesdr2)。您可能还需要进行其他更改,具体取决于您的配置。


    注 –

    请勿更改 db_name 参数,该参数在两个群集上均必须保留为 sales


    You created these directories previously
    *.audit_file_dest='/oracle/oracle/product/10.2.0/db_1/admin/salesdr/adump'
    *.background_dump_dest='/oracle/oracle/product/10.2.0/db_1/admin/salesdr/bdump'
    *.user_dump_dest='/oracle/oracle/product/10.2.0/db_1/admin/salesdr/udump'
    *.core_dump_dest='/oracle/oracle/product/10.2.0/db_1/admin/salesdr/cdump'
    
    Remove the following entry
    *.control_files='...list primary control files...'
    
    Add this entry
    *.db_unique_name='salesdr'
    
    *.dg_broker_config_file1='/oradata/SALESDR/dr1salesdr.dat'
    *.dg_broker_config_file2='/oradata/SALESDR/dr2salesdr.dat'
    
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=salesdrXDB)'
    
    Switch the client and server entries around, as shown in the following entries
    *.fal_client='salesdr-svc'
    *.fal_server='sales-svc'
    
    *.remote_listener='LISTENERS_SALESDR'
    
    Switch the log archive destinations
    *.log_archive_dest_1='location=use_db_recovery_file_dest arch
    mandatory valid_for=(all_logfiles,all_roles) db_unique_name=salesdr'
    *.log_archive_dest_2='service=sales-svc lgwr sync affirm 
    valid_for=(online_logfiles,primary_role) db_unique_name=sales'
  5. pfile 参数文件复制到备用系统。

  6. 启动备用数据库,并将 pfile 参数文件转换为 spfile 服务器参数文件。

    1. 以 Oracle 用户身份登录到 cluster-newyork 节点之一,并将 pfile 参数文件转换为 spfile 服务器参数文件。


      oracle (phys-newyork-1)$ ORACLE_SID=salesdr1 export ORACLE_SID
      oracle (phys-newyork-1)$ sqlplus '/ as sysdba'
      SQL> startup nomount pfile='/tmp/initpfile_for_salesdr.ora';
      SQL> create spfile='/oradata/SALESDR/spfilesalesdr.ora'
        2> from pfile='/tmp/initpfile_for_salesdr.ora';
      SQL> shutdown
      
    2. 在所有 cluster-newyork 节点上创建 ${ORACLE_HOME}/dbs/initsalesdr1.ora 文件,并在该文件中插入以下条目:


      oracle (phys-newyork-1) cat ${ORACLE_HOME}/dbs/initsalesdr1.ora
      SPFILE='/oradata/SALESDR/spfilesalesdr.ora'
    3. 仅在一个节点上重新启动数据库,准备恢复所备份的主数据库。


      oracle (phys-newyork-1) sqlplus '/ as sysdba'
      You are now starting from the spfile
      SQL> startup nomount
      ORACLE instance started.
      
      Total System Global Area  532676608 bytes
      Fixed Size                  2031416 bytes
      Variable Size             289407176 bytes
      Database Buffers          234881024 bytes
      Redo Buffers                6356992 bytes
  7. 复制主数据库的 Oracle 密码文件以供备用数据库使用。

    复制您在 cluster-paris 群集上创建的 Oracle 密码文件,并将其放在 cluster-newyork 群集中的共享存储上。然后,从每个 cluster-newyork 节点创建指向该文件的链接,并再次更改符号链接的名称以反映本地备用节点上的 Oracle SID

Procedure如何配置备用数据库侦听器和命名服务

  1. 为 Oracle Data Guard 创建静态侦听器。


    注 –

    请在所有 cluster-newyork 节点上执行此步骤。


    Oracle Data Guard 要求您配置静态侦听器。下面的示例使用 ${ORACLE_HOME}=/oracle/oracle/product/10.2.0/db_1,并说明在 ${ORACLE_HOME}/network/admin/listener.ora 文件中的什么位置添加静态侦听器的对应条目。SID_LIST_LISTENER_PHYS-NEWYORK-1(SID_NAME = salesdr1) 行因节点而异,而 (GLOBAL_DBNAME=salesdr_DGMGRL)cluster-paris 上有所不同。


    oracle (phys-newyork-1)$ cat ${ORACLE_HOME}/network/admin/listener.ora
    SID_LIST_LISTENER_PHYS-NEWYORK-1 =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = /oracle/oracle/product/10.2.0/db_1)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = salesdr1)
          (GLOBAL_DBNAME=salesdr_DGMGRL)
          (ORACLE_HOME = /oracle/oracle/product/10.2.0/db_1)
        )
      )
    oracle (phys-newyork-1)$
  2. 重新启动侦听器。

    要启用这些静态条目,请在 cluster-newyork 中的每个节点上重新启动 Oracle 侦听器进程。


    oracle (phys-newyork-1)$ lsnrctl stop LISTENER_PHYS_PHYS-NEWYORK-1
    LSNRCTL for Solaris: Version 10.2.0.3.0 - Production on 29-OCT-2008 02:04:56
    
    Copyright (c) 1991, 2006, Oracle.  All rights reserved.
    
    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    The command completed successfully
    oracle$ lsnrctl start LISTENER_PHYS_PHYS-NEWYORK-1
    LSNRCTL for Solaris: Version 10.2.0.3.0 - Production on 29-OCT-2008 02:05:04
    
    Copyright (c) 1991, 2006, Oracle.  All rights reserved.
    
    Starting /oracle/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
    
    TNSLSNR for Solaris: Version 10.2.0.3.0 - Production
    …
    Services Summary...
    Service "PLSExtProc" has 1 instance(s).
      Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
    Service "salesdr" has 2 instance(s).
      Instance "salesdr1", status READY, has 2 handler(s) for this service...
      Instance "salesdr2", status READY, has 1 handler(s) for this service...
    Service "salesdrXDB" has 2 instance(s).
      Instance "salesdr1", status READY, has 1 handler(s) for this service...
      Instance "salesdr2", status READY, has 1 handler(s) for this service...
    Service "salesdr_DGB" has 2 instance(s).
      Instance "salesdr1", status READY, has 2 handler(s) for this service...
      Instance "salesdr2", status READY, has 1 handler(s) for this service...
    Service "salesdr_DGMGRL" has 1 instance(s).
      Instance "salesdr1", status UNKNOWN, has 1 handler(s) for this service...
    Service "salesdr_XPT" has 2 instance(s).
      Instance "salesdr1", status READY, has 2 handler(s) for this service...
      Instance "salesdr2", status READY, has 1 handler(s) for this service...
    The command completed successfully
  3. 检验所有数据库实例的 net 服务命名条目。

    确保您所使用的命名服务方法(tnsnames.ora 或目录服务)为所有 Oracle 数据库实例均定义了相应的条目。下面的示例仅显示针对 cluster-newyork 群集的条目类型。在本示例中,salesdr 数据库动态地向侦听器注册一个服务名 salesdr(请参见数据库的 service_names 初始化参数)。


    oracle (phys-newyork-1)$ cat ${ORACLE_HOME}/network/admin/tnsnames.ora
    SALESDR1-SVC =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = phys-newyork-1-crs)(PORT = 1521)
          (SEND_BUF_SIZE = 65535)(RECV_BUF_SIZE = 65535))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = salesdr)
          (INSTANCE_NAME = salesdr1)
        )
      )
    
    SALESDR2-SVC =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = phys-newyork-2>-crs)(PORT = 1521)
          (SEND_BUF_SIZE = 65535)(RECV_BUF_SIZE = 65535))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = salesdr)
          (INSTANCE_NAME = salesdr2)
        )
      )
    
    SALESDR-SVC =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = phys-newyork-1-crs)(PORT = 1521)
          (SEND_BUF_SIZE = 65535)(RECV_BUF_SIZE = 65535))
          (ADDRESS = (PROTOCOL = TCP)(HOST = phys-newyork-2-crs)(PORT = 1521)
          (SEND_BUF_SIZE = 65535)(RECV_BUF_SIZE = 65535))
          (LOAD_BALANCE = yes)
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = salesdr)
        )
      )
    
    LISTENERS_SALESDR =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = phys-newyork-1-crs)(PORT = 1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = phys-newyork-2-crs)(PORT = 1521))
      )
  4. 确认备用侦听器 listener.oratnsnames.ora 文件包含正确的条目,然后重新启动侦听器进程。

    确保这些文件包含静态 Oracle Data Guard 侦听器条目,以及对应主群集数据库服务和备用群集数据库服务的命名服务条目。如果您未使用 Oracle 目录命名服务查找,则需要在 tnsnames.ora 中包含这些条目。


    oracle (phys-newyork-1)$ lsnrctl stop LISTENER_PHYS-NEWYORK-1
    LSNRCTL for Solaris: Version 10.2.0.3.0 - Production on 29-OCT-2008 02:04:56
    
    Copyright (c) 1991, 2006, Oracle.  All rights reserved.
    
    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    The command completed successfully
    oracle$ lsnrctl start LISTENER_PHYS-NEWYORK-1
    LSNRCTL for Solaris: Version 10.2.0.3.0 - Production on 29-OCT-2008 02:05:04
    
    Copyright (c) 1991, 2006, Oracle.  All rights reserved.
    
    Starting /oracle/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...
    
    TNSLSNR for Solaris: Version 10.2.0.3.0 - Production
    …
    Services Summary...
    Service "PLSExtProc" has 1 instance(s).
      Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
    Service "salesdr_DGMGRL" has 1 instance(s).
      Instance "salesdr1", status UNKNOWN, has 1 handler(s) for this service...
    The command completed successfully

Procedure如何启动和恢复备用数据库

  1. 恢复数据库备份。

    继续处理 cluster-newyork 群集,现在可以将主数据库备份中的数据恢复到备用数据库。下面的示例说明了如何使用 Oracle 恢复管理器 (Recovery Manager, RMAN) 实用程序。


    oracle (phys-newyork-1) rman
    RMAN> connect target sys/oracle@sales-svc;
    RMAN> connect auxiliary /;
    RMAN> duplicate target database for standby nofilenamecheck;
  2. 将备用重做日志添加到备用数据库。

    您必须满足的精确要求取决于您的配置。所需遵循的步骤与对主群集执行的步骤完全相同。

  3. 在备用数据库上启用闪回。


    oracle (phys-newyork-1)$ sqlplus '/ as sysdba'
    SQL> alter database flashback on;
    Datbase altered.
    SQL> shutdown immediate;
    SQL> startup mount;
    ORACLE instance started.
    …
  4. 恢复备用数据库。


    oracle (phys-newyork-1) sqlplus '/ as sysdba'
    SQL> alter database recover managed standby database using current logfile disconnect;
    

Procedure如何检验配置是否在正常工作

  1. 检验日志文件传输是否正常。

    显示 SQL> 提示时,登录到 cluster-paris 群集上的数据库实例之一,执行几次日志交换。


    oracle (phys-paris-1)$ sqlplus '/ as sysdba'
    SQL> alter system switch logfile;
    SQL> alter system switch logfile;
    
  2. 检查 ${ORACLE_HOME}/admin/sales/bdump/alert_sales1.log 中是否存在任何可能阻止日志归档的问题。

    如果存在错误,请更正。此过程可能需要一定的时间。可以使用以下命令检查网络连接是否正确:


    oracle (phys-paris-1)$ tnsping salesdr-svc
    oracle (phys-newyork-1)$ tnsping sales-svc
    

Procedure如何完成备用数据库的配置和集成

  1. 向 Oracle Clusterware 中注册新的数据库和实例。

    将备用数据库置于 Oracle Clusterware 控制之下,并将其配置为在 Oracle Clusterware 启动时挂载。


    oracle (phys-newyork-1)$ srvctl add database -d salesdr \
     -r PHYSICAL_STANDBY -o $ORACLE_HOME -s mount;
    oracle (phys-newyork-1)$ srvctl add instance -d salesdr \
     -i salesdr1 -n $phys-newyork-1;
    oracle (phys-newyork-1)$ srvctl add instance -d salesdr \
     -i salesdr2 -n $phys-newyork-2;
    
  2. 配置 Sun Cluster Oracle RAC 易管理性资源。

    将备用数据库与 Sun Cluster 集成。可以使用数据服务配置向导或基于浏览器的 Sun Cluster Manager,前者可以通过 clsetup 实用程序使用。通过集成备用数据库,可以在需要进行故障转移或接管操作时,像管理主数据库一样管理备用数据库。


    注 –

    您创建的资源和资源组供 Sun Cluster Geographic Edition Oracle Data Guard 集成使用。


  3. 在主数据库和备用数据库上启用 Oracle Data Guard。

    您只需要在每个群集(cluster-pariscluster-newyork)中的一个节点上执行下列步骤。


    oracle (phys-newyork-1)$ sqlplus '/ as sysdba'
    SQL> alter system set dg_broker_start=true scope=both sid='*';
    SQL> quit
    oracle (phys-paris-1)$ sqlplus '/ as sysdba'
    SQL> alter system set dg_broker_start=true scope=both sid='*';
    SQL> quit
    

Procedure如何创建和启用 Oracle Data Guard Broker 配置

要将 Oracle Data Guard 与 Sun Cluster Geographic Edition 一起使用,需要创建 Oracle Data Guard Broker 配置。

在下面的示例过程中,Oracle Data Guard Broker 配置称为 mysales.comsalesdr 数据库是 sales 数据库的 physical 副本。

  1. 创建主数据库的 Oracle Data Guard Broker 配置。

    可以使用 dgmgrl 命令来创建 Oracle Data Guard Broker 配置。您需要知道要创建的 Oracle Data Guard Broker 配置的名称、主数据库的名称以及用来连接的 net 服务名。将配置指定给 Sun Cluster Geographic Edition 时,也需要知道这些属性。


    oracle (phys-paris-1)$ dgmgrl sys/sysdba_password@sales-svc
    DGMGRL> create configuration mysales.com as primary
    DGMGRL> database is sales connect identifier is sales-svc;
    

    如果在连接到 Oracle Data Guard Broker 时发现错误,请检查 ${ORACLE_HOME}/admin/sales/bdump/alert_ prim_sid.log 文件。可以使用以下命令来检查是否已创建该配置:


    oracle (phys-paris-1)$ dgmgrl sys/sysdba_password@sales-svc
    DGMGRL> show configuration;
    Configuration
      Name:                mysales.com
      Enabled:             NO
      Protection Mode:     MaxPerformance
      Fast-Start Failover: DISABLED
      Databases:
        sales   - Primary database
    
    Current status for "mysales.com":
    DISABLED
  2. 将备用数据库添加到 Oracle Data Guard Broker 配置。

    您需要知道备用数据库的名称、用来连接的 net 服务名以及备用类型(physicallogical)。


    oracle (phys-paris-1)$ dgmgrl sys/sysdba_password@sales-svc
    DGMGRL> add database salesdr as connect identifier is 
     salesdr-svc maintained as physical;
    
  3. 为备用数据库配置应用实例。

    如果备用数据库也是一个多实例 Oracle RAC 数据库,可以指定要应用传送的归档重做日志的实例。启用该配置之前,发出以下命令:


    oracle$ dgmgrl sys/sysdba_password@sales-svc
    DGMGRL> edit database salesdr set property PreferredApplyInstance='salesdr1';
    
  4. 要检验 Oracle Data Guard Broker 配置是否在正常工作,请启用该配置。


    oracle (phys-paris-1)$ dgmgrl sys/sysdba_password@sales-svc
    DGMGRL> enable configuration;
    

    如果您已成功地执行了所有步骤,可以通过使用以下命令检查配置的状态:


    oracle$ dgmgrl sys/sysdba_password@sales-svc
    DGMGRL> show configuration;
    Configuration
      Name:                mysales.com
      Enabled:             YES
      Protection Mode:     MaxPerformance
      Fast-Start Failover: DISABLED
      Databases:
        sales   - Primary database
        salesdr - Physical standby database
    
    Current status for "mysales.com":
    SUCCESS
  5. 检验 Oracle Data Guard Broker 配置是否可以切换。

    在将 Oracle Data Guard Broker 配置添加到 Sun Cluster Geographic Edition 之前,需要检验是否可以在主群集和备用群集之间来回执行数据库的切换。如果此切换不起作用,则 Sun Cluster Geographic Edition 也将无法执行此操作。


    oracle (phys-paris-1)$ dgmgrl sys/sysdba_password@sales-svcDGMGRL> switchover to salesdr
    Performing switchover NOW, please wait...
    Operation requires shutdown of instance "sales1" on database "sales"
    Shutting down instance "sales1"...
    ORA-01109: database not open
    
    Database dismounted.
    ORACLE instance shut down.
    Operation requires shutdown of instance "salesdr1" on database "salesdr"
    Shutting down instance "salesdr1"...
    ORA-01109: database not open
    
    Database dismounted.
    ORACLE instance shut down.
    Operation requires startup of instance "sales1" on database "sales"
    Starting instance "sales1"...
    ORACLE instance started.
    Database mounted.
    Operation requires startup of instance "salesdr1" on database "salesdr"
    Starting instance "salesdr1"...
    ORACLE instance started.
    Database mounted.
    Switchover succeeded, new primary is "salesdr"
    
    DGMGRL switchover to sales;
    Performing switchover NOW, please wait...
    Operation requires shutdown of instance "salesdr1" on database "salesdr"
    Shutting down instance "salesdr1"...
    ORA-01109: database not open
    
    Database dismounted.
    ORACLE instance shut down.
    Operation requires shutdown of instance "sales1" on database "sales"
    Shutting down instance "sales1"...
    ORA-01109: database not open
    
    Database dismounted.
    ORACLE instance shut down.
    Operation requires startup of instance "salesdr1" on database "salesdr"
    Starting instance "salesdr1"...
    ORACLE instance started.
    Database mounted.
    Operation requires startup of instance "sales1" on database "sales"
    Starting instance "sales1"...
    ORACLE instance started.
    Database mounted.
    Switchover succeeded, new primary is "sales"