设置将来的辅助数据库

Oracle Cloud Infrastructure (OCI) 中建立第一个物理备用数据库后,您将在另一个区域中创建第二个物理备用数据库。第二个数据库是基于云的灾难恢复环境中的数据库。

Oracle Data Guard 级联备用功能,即第二个备用数据库从第一个备用数据库(而不是直接从本地主数据库)接收 redo,可减少来自内部部署主机站点的网络流量。它还将确定最终将成为主要 redo 传播路由的内容。

目前,由于存在一些限制,我们无法使用 OCI 工具来建立和全面管理未来的灾难恢复数据库。Oracle Data Guard 关联云服务当前无法注册现有的备用数据库关系,也无法管理备用数据库配置。因此,例如,无法使用 Oracle Managed Disaster Recovery Cloud Service。

由于两个备用数据库都使用基于 OCI 的占位符数据库建立,因此 OCI 控制层可以管理每个数据库的打补丁和其他生命周期活动。

创建占位符数据库

使用 OCI 控制台在不同区域(推荐)或同一区域中的不同可用性域中创建新的占位符数据库。

请按照此处的步骤操作,不要使用 OCI 或 dbaascli 等工具删除占位符数据库。
  1. 选择 Oracle Public Cloud 上的 Exadata 。选择要在其中部署数据库的 Oracle Exadata Database Service on Dedicated Infrastructure 服务。

    请遵循以下约束条件:

    • 数据库主目录必须与源具有相同的软件版本、发行版和修补程序级别。
    • DB_NAME 必须与主数据库和第一个备用数据库上的相同。
    • DB_UNIQUE_NAME 可以留空或指定,但必须与内部部署主数据库和第一个物理备用数据库不同。
    • 预配此数据库时,请勿配置自动备份。
    • 预配此数据库时,请勿指定 PDB 名称。
  2. 捕获级联备用配置数据。
    1. oracle OS 用户身份登录到托管刚刚创建的占位符数据库的数据库节点之一。
    2. 为此数据库寻找环境。
    3. 使用 DB_UNIQUE_NAME 运行以下命令:
    $ srvctl config database -db DB_UNIQUE_NAME
    保存此配置数据,您将在下面的几个步骤中使用它。
  3. 关闭占位符数据库。
    $ srvctl stop database -db cascade standby placeholder database -stopoption immediate
  4. 以网格 OS 用户身份登录。使用命令 asmcmd,清空 +DATAC1/DB_UNIQUE_NAME 下的目录中的文件:
    1. DATAFILE
    2. ONLINELOG
    3. 所有 PDB GUID/DATAFILE
    4. +DATAC1/DB_UNIQUE_NAME/CONTROLFILE 下的所有控制文件
    5. 在步骤 1 中捕获的配置数据中指定的密码文件
  5. +RECOC1/DB_UNIQUE_NAME 下,删除目录 ARCHIVELOGAUTOBACKUPFLASHBACKLOG 中的文件。
  6. 不删除 spfile

为数据库还原做准备

配置新 Oracle 主目录以准备还原数据库。

  • 调整每个环境中的 tnsnames.ora 文件以了解其他每个数据库。验证环境之间的通信。
  • 从第一个备用数据库复制口令文件。
  • 从第一个备用数据库复制透明数据加密 (Transparent Data Encryption,TDE) wallet。
  • 调整级联备用数据库的数据库参数。

为级联备用配置 TNS

调整每个环境中的 tnsnames.ora 文件以了解其他每个数据库。验证环境之间的通信。

Data Guard 中介必须能够与配置中的每个数据库通信,无论它连接到哪个实例。Oracle Zero Downtime Migration 针对初始备用关系执行了此配置。必须将级联备用数据库添加到配置中:
  • 将级联备用数据库的 TNS 连接字符串添加到本地主数据库和第一个备用数据库的所有 Oracle Real Application Clusters (Oracle RAC) 实例使用的 tnsnames.ora 文件
  • 将本地主数据库和第一个 OCI 备用数据库的 TNS 连接字符串添加到级联备用数据库的所有 Oracle RAC 实例使用的 tnsnames.ora 文件中。
这些 TNS 条目必须分别使用 SCAN IP 地址,而不是 SCAN 名称。以下是 Oracle Zero Downtime Migration 为我们的第一个备用数据库创建的合规 TNS 条目示例:
CDBHCM_iad1dx =
          (DESCRIPTION =
             (ADDRESS = (PROTOCOL = TCP) (HOST = <SCAN IPv4 address  1>) (PORT = 1521))
             (ADDRESS = (PROTOCOL = TCP) (HOST = <SCAN IPv4 address  2>) (PORT = 1521))
             (ADDRESS = (PROTOCOL = TCP) (HOST = <SCAN IPv4 address  3>)) (PORT = 1521))
            (CONNECT_DATA =
              (SERVER = DEDICATED)
              (SERVICE_NAME = CDBHCM_iad1dx)
              (FAILOVER_MODE =
                  (TYPE = select)
                  (METHOD = basic)
              )
              (UR=A)
             )
          )

您必须以 oracle OS 用户身份登录到每个数据库服务器,获取环境源,然后将目录更改为 $TNS_ADMIN

  1. 对于本地主数据库和第一个 OCI 备用数据库的每个 Oracle RAC 实例,请编辑 tnsnames.ora 文件并添加级联备用数据库 TNS 连接字符串。
  2. 对于 OCI 级联备用数据库的每个 Oracle RAC 实例,编辑 tnsnames.ora 文件并为内部部署主数据库和第一个 OCI 备用数据库添加 TNS 连接字符串。
  3. 测试是否可以使用带有添加的连接字符串别名的 tnsping 实用程序从级联备用数据库对第一个备用数据库执行 ping 操作。
    $ tnsping CDBHCM_iad1dx
    这将返回延迟时间为毫秒的 OK 。如果未返回 OK ,则相应地检查错误和地址。
  4. 使用 SQL*Plus 测试从将托管级联备用数据库的每个数据库服务器到第一个备用数据库 (CDBHCM_iad1dx) 的连接。您需要主数据库的 SYS 密码。
    $ sqlplus sys/<password>@CDBHCM_iad1dx as sysdba
    更正所有错误并重复,直到成功连接。

复制口令文件

从第一个备用数据库复制口令文件。

  1. 以 oracle 操作系统用户身份登录到承载第一个备用数据库 (CDBHCM_iad1dx) 的服务器之一。
  2. 使用 srvctl 确定此数据库的口令文件所在的位置,然后将其复制到 /tmp 目录。
    要确定 wallet 根位置,请以 sysdba 身份运行以下命令:
    $ srvctl config database -db first standby db name
  3. 查找显示 "Password file:" 的行并记录其位置(Oracle Automatic Storage Management (Oracle ASM) 路径)。
  4. 成为 Grid OS 用户并使用 asmcmd 命令将口令文件复制到 /tmp 目录:
    $ asmcmd -p
    asmcmd> cd +DATAC1/path from step 3
    asmcmd> cp <password file name> /tmp/password file name
  5. 使用 scp 或使用任何方式在 OCI 中传输文件,将密码文件传输到级联备用数据库服务器上的某个临时位置。
  6. 以 Grid OS 用户身份登录放置口令文件的级联备用数据库服务器。使用在上面的级联备用配置数据中指定的位置,将口令文件复制到 Oracle ASM 中。
    $ asmcmd -p --privilege sysdba
    asmcmd> pwcopy –dbuniquename cascade standby db unique name /tmp/password-file-name +ASM Diskgroup/path/password-file-name -f
    例如:
    asmcmd> pwcopy –dbuniquename CDBHCM_phx5s   /tmp/password file name +DATAC1/CDBHCM_phx5s/PASSWORD/orapwCDBHCM_phx5s -f 
  7. 通过验证每个数据库是否可以连接到所有其他数据库,确保所有 TNS 连接字符串都已正确配置。修复以下连接尝试的任何连接错误都将失败。
    1. 从内部部署(主要)数据库:
      $ sqlplus sys/password@first standby db as sysdba
      $ sqlplus sys/password@cascade standby db as sysdba
    2. 从第一个物理备用数据库:
      $ sqlplus sys/password@on-prem primary as sysdba
      $ sqlplus sys/password@cascade standby db as sysdba
    3. 从级联物理备用数据库:
      $ sqlplus sys/password@on-prem primary as sysdba
      $ sqlplus sys/password@first standby db as sysdba
    在所有连接尝试成功之前,请勿继续。

复制 TDE Wallet

从第一个备用数据库复制透明数据加密 (Transparent Data Encryption,TDE) wallet。在 Oracle Exadata Database Service on Dedicated Infrastructure 上,云工具用于存储 TDE wallet 的位置位于 Oracle Advanced Cluster File System (Oracle ACFS) 上,集群中所有数据库服务器都共享该位置。
  1. oracle OS 用户身份登录到托管第一个备用数据库 (CDBHCM_iad1dx) 的服务器之一,并将目录更改为 wallet 根位置。
    要确定 wallet 根位置,请以 sysdba 身份运行以下命令:
    $ sqlplus / as sysdba
    SQL> show wallet_root
    $ cd wallet root location from “show wallet_root” above
  2. 转到 wallet 根位置并压缩 tde 目录。
    tde 目录位于步骤 1 中给定的目录下,该目录通常为 /var/opt/oracle/dbaas_acf/<DB_NAME>/wallet_root
    $ zip -r CDBHDM_tde_wallet.zip  tde
  3. 将此 ZIP 文件传输到将托管级联数据库 (CDBHCM_phx5s) 到临时位置(例如,/tmp)的数据库服务器之一。
    使用 scp 或通过任何方式在 OCI 中传输文件。
  4. oracle OS 用户身份登录将托管级联数据库 (CDBHCM_phx5s) 以及 zip 文件所在的数据库服务器,并将目录更改为 wallet 根位置。

    位置应与之前的位置相同,因为 DB_NAME 是相同的 (CDBHCM)。

    $ cd /var/opt/oracle/dbaas_acf/<DB_NAME>/wallet_root
  5. 将现有 TDE 目录移动到其他名称。
    $ mv tde tde_date
  6. 将包含步骤 2 中创建的 TDE wallet (CDBHDM_tde_wallet.zip) 的 ZIP 文件移动到以下路径:/var/opt/oracle/dbaas_acf/<DB_NAME>/wallet_root
    DB_NAME 替换为数据库的名称。
  7. 解压缩 CDBHDM_tde_wallet.zip 文件。
    $ unzip CDBHDM_tde_wallet.zip

这将创建一个新的 tde 子目录,其中包含第一个物理备用数据库的 wallet 文件。

调整级联备用数据库的数据库参数

完成级联备用数据库的配置。

  1. oracle OS 用户身份登录到承载第一个备用数据库 (CDBHCM_iad1dx) 的服务器之一,并为环境提供源。
    $ . ./CDBHCM.env
  2. 从第一个备用数据库创建 pfile,以用作用于调整级联备用数据库上的参数的参考。
    $ cd $ORACLE_HOME/dbs
    $ sqlplus / as sysdba
    SQL> create pfile=’tmp_CDBHCM_iad1dx_init.ora’ from spfile;
  3. 登录将承载级联备用数据库 (CDBHCM_phx5s) 并为环境提供源的数据库服务器之一:
    $ . ./CDBHCM.env
  4. 在一个实例上启动 NOMOUNT
    $ sqlplus / as sysdba
    SQL> startup nomount
  5. 对级联数据库的数据库参数进行以下调整,引用上面步骤 2 中的数据库参数列表:
    SQL> alter system set control_files=’’ sid=’*’ scope=spfile;
    SQL> alter system set undo_tablespace=’<Refer to the parameter list from step 2>’ sid=’<ORACLE_SID for instance 1>’ scope=spfile;
    SQL> alter system set undo_tablespace=’<Refer to the parameter list from step 2>’ sid=’<ORACLE_SID for instance 2>’ scope=spfile;
    SQL> alter system set undo_tablespace=’<Refer to the parameter list from step 2>’ sid=’<ORACLE_SID for instance N>’ scope=spfile;
    SQL> alter system set sga_target=’<Refer to the parameter list from step 2>’ sid=’*’ scope=spfile;
    SQL> alter system set log_buffer=’<Refer to the parameter list from step 2>’ sid=’*’ scope=spfile;
  6. 调整特定于 PeopleSoft 的参数。
    SQL> alter system set “_gby_hash_aggregation_enabled”=false sid=’*’ scope=spfile;
    SQL> alter system set “_ignore_desc_in_index”=true sid=’*’ scope=spfile;
    SQL> alter system set “_unnest_subquery”=true sid=’*’ scope=spfile;
    SQL> alter system set nls_length_semantics='CHAR' sid=’*’ scope=spfile;

    注意:

    请勿更改以下参数:
    • DB_NAME
    • DB_UNIQUE_NAME
    • WALLET_ROOT
  7. 在实例上关闭并重新启动 NOMOUNT 以实施更改。
    $ sqlplus / as sysdba
    SQL> shutdown immediate
    SQL> startup nomount

将数据库还原到级联备用数据库

将数据库从第一个物理备用数据库还原到级联备用数据库。使用 Oracle Recovery Manager (RMAN) 命令 RESTORE FROM SERVICE 恢复控制文件和数据文件。

  1. 如果未启动级联备用数据库的实例,请在 NOMOUNT 中启动该实例:
    $ sqlplus / as sysdba 
    $ SQL> startup nomount
  2. 使用 RMAN 将控制文件和数据文件从第一个备用数据库恢复到级联备用数据库。

    注意:

    可能需要调整“设备类型磁盘”的 RMAN 通道数,以免使网络饱和。如果需要进行更改,则在执行命令“从服务还原数据库”之前执行此操作。可以使用以下命令执行此操作,并根据需要替换 N:
    RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM N; 
    $ rman target / nocatalog
    RMAN> restore standby controlfile from service ‘first standby db name’;
    RMAN> alter database mount;
    RMAN> restore database from service ‘first standby db name’ section size 8G;
    RMAN> shutdown immediate;
    RMAN> exit
  3. 重新启动所有实例并使用 srvctl 挂载级联备用数据库。
    $ srvctl start database -db cascade standby db unique name -startoption mount
  4. 使用以下脚本创建和清除所有联机和备用日志文件。
    $ sqlplus “/ as sysdba”
    SQL> set pagesize 0 feedback off linesize 120 trimspool on
    SQL> spool /tmp/clearlogs.sql
    SQL> select distinct 'alter database clear logfile group '||group#||';' from v$logfile;
    SQL> spool off
  5. 在执行生成的 clearlogs.sql 脚本之前对其进行检查。这将导致数据库实例为所有线程创建和清除联机和备用日志文件。然后,执行脚本。
    SQL> @/tmp/clearlogs.sql

为级联备用数据库配置 Data Guard 中介

您已通过 Oracle Zero Downtime Migration 在本地主数据库与第一个 OCI 备用数据库之间配置了 Data Guard 中介,现在可以将级联备用数据库添加到配置中。

级联备用数据库和内部部署数据库相互之间不直接通信。必要时,通过第一个内部部署备用数据库提供其 redo

  • 当本地数据库是主数据库时,redo 将从本地主数据库发送到或通过第一个备用数据库发送到,然后发送到级联备用数据库:
    • 从本地部署到 OCI 的第一个备用数据库
    • OCI 第一个备用数据库连接到 OCI 级联备用数据库
  • 当第一个备用数据库担任主数据库角色时,会将 redo 直接从该数据库发送到内部部署数据库和级联备用数据库:
    • OCI 主数据库到本地备用数据库
    • OCI 主数据库到 OCI 级联备用数据库
  • 如果级联备用数据库在此配置中成为主数据库,则重做将从该数据库发送到或通过 OCI 第一个备用数据库发送到或发送到内部部署数据库:
    • OCI 首次备用本地部署备用数据库
    • OCI 将主数据库级联到 OCI 第一个备用数据库
  1. 在托管级联备用数据库的数据库服务器上配置 Data Guard 中介。以 oracle 操作系统用户身份登录承载级联备用数据库的数据库服务器之一,并为环境提供源。
    $ sqlplus / as sysdba
    SQL> alter system set dg_broker_config_file1=’+DTAC1/cascade standby db/DG/dr1 cascade standby db.dat’ sid=’*’ scope=both;
    SQL> alter system set dg_broker_config_file2=’+RECOC1/cascade standby db/DG/dr2 cascade standby db.dat’ sid=’*’ scope=both;
    SQL> alter system set dg_broker_start=TRUE sid=’*’ scope=both;
  2. 登录主数据库或第一个物理备用数据库并获取环境。将新的级联备用数据库添加到现有 Data Guard 中介配置。
    $ dgmgrl 
    DGMGRL>  connect sys/password
    DGMGRL> show configuration
    DGMGRL> add database 'cascade standby db’
     as connect identifier is cascade standby db;
  3. 添加 redo routes
    DGMGRL> edit database on-premises db set property redoroutes='(LOCAL : first standby db ASYNC)';
    DGMGRL> edit database first standby db set property redoroutes='(LOCAL : on-premises db ASYNC, cascade standby db ASYNC)(on-premises db : cascade standby db ASYNC)(cascade standby db : on-premises db ASYNC)';
    DGMGRL> edit database cascade standby db set property redoroutes='(LOCAL : first standby db ASYNC)';
  4. 启用新的级联备用数据库。
    DGMGRL> enable database cascade standby db;
  5. 启用级联数据库后,它将开始通过第一个备用数据库接收由内部部署主数据库生成的 redo。在 Data Guard 中介内,显示配置:
    DGMGRL> show configuration lag
    Configuration - zdm_psfthcm_dg
      Protection Mode: MaxPerformance
      Members:
      CDBHCM_sca6dp  - Primary database
        CDBHCM_iad1dx - Physical standby database 
                          Transport Lag:      0 seconds (computed 0 seconds ago)
                          Apply Lag:          0 seconds (computed 1 second ago)
          CDBHCM_phx5s - Physical standby database (receiving current redo)
                            Transport Lag:      1 second (computed 1 second ago)
                            Apply Lag:          2 seconds (computed 1 second ago)
    
    Fast-Start Failover:  Disabled
    
    Configuration Status:
    SUCCESS   (status updated 47 seconds ago)

为将来的备用数据库定义基于角色的数据库服务

添加 PeopleSoft 应用程序在 OCI 辅助数据库填充 PRIMARY 角色时将使用的基于角色的数据库服务。

  1. 为进程调度程序添加基于角色的数据库服务。
    srvctl add service -db CDBHCM_phx5s -pdb HR92U033 -service HR92U033_BATCH -preferred "CDBHCM1,CDBHCM2" -notification TRUE -role PRIMARY -failovermethod BASIC -failovertype AUTO -failoverretry 10 -failoverdelay 3
  2. 为联机用户添加基于角色的数据库服务。
    srvctl add service -db CDBHCM_phx5s -pdb HR92U033 -service HR92U033_ONLINE -preferred "CDBHCM1,CDBHCM2" -notification TRUE -role PRIMARY -failovermethod BASIC -failovertype AUTO -failoverretry 10 -failoverdelay 3