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

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.