验证 DR 就绪情况

查看灾难恢复就绪情况的最佳实践,并验证灾难恢复设置中是否有计划事件和计划外事件。

关于 DR 就绪情况

查看灾难恢复 (DR) 就绪情况的最佳实践。

使用 Active Data Guard 可将只读工作量卸载到备用数据库,以提供备用数据库已准备好生产的连续应用程序级别验证。除了 Oracle Data Guard 应用进程执行的连续 Oracle 块级别验证之外,这还提供了一定程度的保证。

使用快照备用数据库创建生产数据库的确切副本以进行开发和测试。定期将备用数据库置于读/写模式(使用 Data Guard 快照备用数据库),以验证其支持读写生产负载的准备情况。快照备用数据库还可用于修补程序和升级的最终功能和性能测试级别,因为 DR 系统大小与生产系统类似。快照备用数据库继续从归档主数据库接收 redo,供以后使用,该数据库始终提供数据保护。但是,如果在进行测试时需要故障转移,则恢复时间 (RTO) 将延长将快照备用数据库转换回备用数据库所需的时间量。备用数据库处于快照模式时,快速恢复区需要其他存储空间(用于保存从主生产数据库接收的归档重做,供以后使用,以及快照备用数据库生成的当前重做和闪回日志)。

下面是使用快照备用数据库的一些好处:

  • 它提供了用于开发和测试的生产数据库的确切副本,同时始终维护数据保护。您可以使用 Oracle Real Application Testing 选项捕获主数据库工作量,然后重放该工作量以便在快照备用数据库上进行测试。
  • 通过转换为物理备用数据库并重新同步,可以轻松刷新以包含当前生产数据。

将备用数据库转换为快照备用数据库

当您希望生产数据库的精确副本时,可以使用 Oracle Data Guard 中介将物理备用数据库转换为快照备用数据库并验证故障转移。

快照备用数据库是从物理备用数据库创建的完全可更新的备用数据库。在快照备用数据库上,将收到 redo 数据,但在快照备用数据库转换回物理备用数据库之前,不会应用这些数据。

使用 Oracle Data Guard 命令行界面 (command-line interface, DGMGRL) 可以直接从命令行界面管理 Oracle Data Guard 中介配置及其各种成员。

  1. 使用 sys 用户名和口令登录备用数据库实例上的 DGMGRL 会话。
    DGMRGL> connect
    Username: sys
    Password:
    输出看起来类似于以下内容:
    Connected to "ORCLCDB_iad1s3"
    Connected as SYSDBA.
  2. 将物理备用数据库转换为快照备用数据库。
    DGMGRL> convert database standby_database_unique_name (standbyDB) to snapshot standby;
    转换完成时,输出将具有类似于以下内容的行:
    Converting database "standby_database_unique_name" to a Snapshot Standby database, please wait...
    Database "standby_database_unique_name" converted successfully
  3. 查看配置以验证转换。
    DGMGRL> show configuration;
    输出看起来类似于以下内容:
    Configuration - onpremdr
      Protection Mode: MaxPerformance
      Members:
      orclcdb_iad1s3 - Primary database
        orclcdb        - Physical standby database 
    Fast-Start Failover:  Disabled
    Configuration Status:
    SUCCESS   (status updated 26 seconds ago)
  4. 将快照备用数据库转换回物理备用数据库。
    DGMGRL> convert database standby_database_unique_name to physical standby;
    输出看起来类似于以下内容:
    Converting database "orclcdb" to a Physical Standby database, please wait...
    Operation requires a connection to database "orclcdb_iad1s3"
    Connecting ...
    Connected to "ORCLCDB_IAD1S3"
    Connected as SYSDBA.
    Operation requires shut down of instance "ORCLCDB" on database "orclcdb"
    Shutting down instance "ORCLCDB"...
    Connected to "ORCLCDB"
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    Operation requires start up of instance "ORCLCDB" on database "orclcdb"
    Starting instance "ORCLCDB"...
    Connected to an idle instance.
    ORACLE instance started.
    Connected to "ORCLCDB"
    Database mounted.
    Connected to "ORCLCDB"
    Continuing to convert database "orclcdb" ...
    Database "orclcdb" converted successfully
  5. 查看配置以验证转换。
    DGMGRL> show configuration;
    输出看起来类似于以下内容:
    Configuration - onpremdr
    
      Protection Mode: MaxPerformance
      Members:
      orclcdb_iad1s3 - Primary database
        orclcdb        - Physical standby database 
          Warning: ORA-16854: apply lag could not be determined
    
    Fast-Start Failover:  Disabled
    
    Configuration Status:
    WARNING   (status updated 11 seconds ago)

设置 Oracle Data Guard 参数

在执行切换之前,请在主数据库实例和备用数据库实例上设置 Oracle Data Guard 参数。

  1. 在本地主数据库上,检查系统更改号 (SCN)。
    select standby_became_primary_scn from v$database;
    输出看起来类似于以下内容:
    STANDBY_BECAME_PRIMARY_SCN
    --------------------------
                                  0
  2. 验证未在主数据库上启用闪回。
    select flashback_on from v$database;
    输出看起来类似于以下内容:
    FLASHBACK_ON
    ------------------
    NO
  3. 在本地实例上,创建与 Oracle 用户具有相同主数据库名的恢复目录。
    在此示例中,ORCLCDB 是内部部署数据库的名称。
    [oracle@bastion dbhome_1]$ cd /opt/oracle/
    [oracle@bastion oracle]$ mkdir recovery
    [oracle@bastion oracle]$ cd recovery/
    [oracle@bastion recovery]$ mkdir ORCLCDB
    [oracle@bastion oracle]$ cd ORCLCDB /
    确认完整路径。
    $ pwd
    /opt/oracle/recovery/ORCLCDB
  4. 设置 DB_RECOVERY_FILE_DEST_SIZE 参数的大小以满足数据库大小。
    以下示例使用 20G 作为示例数据大小。根据您的数据库设置数据大小。
    SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=20G;
    System altered
  5. 定义早期创建的目录的数据库恢复文件目标。
    SQL> alter system set db_recovery_file_dest = '/opt/oracle/recovery/on_premises_SID';
    System altered
  6. 对主数据库启用闪回。
    SQL> alter database flashback on;
    Database altered
  7. 确认已启用(启用)数据库闪回。
    SQL> select flashback_on from v$database;
    输出看起来类似于以下内容:
    FLASHBACK_ON
    ------------------
    YES
  8. 确定是否在云中的 OCI 备用数据库上启用闪回。
    SQL> select flashback_on from v$database;
    输出看起来类似于以下内容:
    FLASHBACK_ON
    ------------------
    NO
  9. 查询云中备用数据库的开放模式状态。
    SQL> select open_mode from v$database;
    输出看起来类似于以下内容:
    OPEN_MODE
    -------------------- 
    MOUNTED
  10. 在云中的数据库实例上设置闪回。
    SQL> alter database recover managed standby database cancel;
    Database altered
  11. 查询云中备用数据库的开放模式状态。
    SQL> select open_mode from v$database;
    输出看起来类似于以下内容:
    OPEN_MODE
    -------------------- 
    MOUNTED
  12. 启用备用数据库闪回。
    SQL> alter database flashback on;
    Database altered
  13. 将备用数据库与会话断开连接。
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
    Database altered
  14. 确认已启用(启用)数据库闪回。
    SQL> select flashback_on from v$database;
    FLASHBACK_ON
    ------------------
    YES
  15. 显示保留参数。
    SQL> show parameter_retention;
    输出看起来类似于以下内容:
    NAME				     TYPE	 VALUE
    ------------------------------------ ----------- ------------------------------
    db_flashback_retention_target	     integer	 1440
    undo_retention			      integer	 900

将主数据库从内部部署切换为 OCI

当您有计划的活动(例如维护)时,可以将 Oracle Cloud Infrastructure (OCI) 中的数据库设为数据丢失为零的主数据库。切换是在内部部署数据库上启动并在云中的数据库实例上完成的计划事件。

  1. 使用 sys 用户名和口令登录内部部署数据库上的 DGMGRL 会话。
    DGMRGL> connect
  2. 在本地数据库上,验证备用数据库是否已准备好切换和故障转移。
    在此示例中,主数据库为 orclcdb,备用数据库为 orclcdb_iadls3
    DGMGRL> validate database orclcdb_iad1s3 (StandbyDatabaseOCIInstance)
    输出看起来类似于以下内容:
    Database Role:     Physical standby database
      Primary Database:  orclcdb
    
      Ready for Switchover:  Yes
      Ready for Failover:    Yes (Primary Running)
    
      Managed by Clusterware:
        orclcdb       :  NO             
        orclcdb_iad1s3:  NO             
        Validating static connect identifier for the primary database orclcdb...
        The static connect identifier allows for a connection to database "orclcdb".
    
      Log Files Cleared:
        orclcdb Standby Redo Log Files:         Cleared
        orclcdb_iad1s3 Online Redo Log Files:   Not Cleared
        orclcdb_iad1s3 Standby Redo Log Files:  Available
    
      Current Log File Groups Configuration:
        Thread #  Online Redo Log Groups  Standby Redo Log Groups Status       
                  (orclcdb)               (orclcdb_iad1s3)                     
        1         3                       2                       Insufficient SRLs
    
      Future Log File Groups Configuration:
        Thread #  Online Redo Log Groups  Standby Redo Log Groups Status       
                  (orclcdb_iad1s3)        (orclcdb)                            
        1         3                       0                       Insufficient SRLs
        Warning: standby redo logs not configured for thread 1 on orclcdb
  3. 在内部部署(主数据库)数据库上,执行命令以切换到备用数据库。
    DGMGRL> switchover to orclcdb_iad1s3 (StandbyDatabaseOCIInstance)
    输出看起来类似于以下内容:
    Performing switchover NOW, please wait...
    New primary database "orclcdb_iad1s3" is opening...
    Operation requires start up of instance "ORCLCDB" on database "orclcdb"
    Starting instance "ORCLCDB"...
    Connected to an idle instance.
    ORACLE instance started.
    Connected to "ORCLCDB"
    Database mounted.
    Database opened.
    Connected to "ORCLCDB"
    Switchover succeeded, new primary is "orclcdb_iad1s3"
  4. 在内部部署数据库上,显示配置状态。
    DGMGRL> show configuration
    输出看起来类似于以下内容:
    Configuration - onpremdr
    
      Protection Mode: MaxPerformance
      Members:
      orclcdb_iad1s3 - Primary database
      orclcdb        - Physical standby database 
    
    Fast-Start Failover:  Disabled
    
    Configuration Status:
    SUCCESS   (status updated 70 seconds ago)
  5. 在云中的数据库上,确定打开模式状态。
    SQL> select open_mode from v$database;
    输出看起来类似于以下内容:
    OPEN_MODE
    -------------------- 
    READ WRITE
  6. 在内部部署数据库上,确定打开模式状态。
    SQL> select open_mode from v$database;
    输出看起来类似于以下内容:
    OPEN_MODE
    -------------------- 
    READ ONLY WITH APPLY
云中的备用数据库现在是主数据库。

将主数据库从 OCI 切换回内部部署

Oracle Cloud Infrastructure (OCI) 中的数据库实例设为主数据库后,使用 OCI 数据库实例上的 Oracle Data Guard 命令行界面 (DGMGRL) 切换回内部部署数据库并将其重新设为主数据库。

  1. 验证云中主数据库的数据库角色。
    在此示例中,ORCLCDB 是内部部署数据库的名称,orclcdb_iad1s3 是云中的数据库实例的名称。
    DGMGRL> validate database orclcdb;
    输出可能类似于以下内容:
    Database Role: Physical standby database
      Primary Database: orclcdb_iad1s3
    
      Ready for Switchover:  Yes
      Ready for Failover:    Yes (Primary Running)
    
      Managed by Clusterware:
        orclcdb_iad1s3:  NO             
        orclcdb       :  NO             
        Validating static connect identifier for the primary database orclcdb_iad1s3...
    Unable to connect to database using (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.0.2.1)(PORT=1539)))(CONNECT_DATA=(SERVICE_NAME=ORCLCDB_iad1s3_DGMGRL.sub08120021431.onpremocidrvcn.example.com)(INSTANCE_NAME=ORCLCDB)(SERVER=DEDICATED)(STATIC_SERVICE=TRUE)))
    ORA-12541: TNS:no listener
    
    Failed.
        Warning: Ensure primary database's StaticConnectIdentifier property
        is configured properly so that the primary database can be restarted
        by DGMGRL after switchover
    
      Log Files Cleared:
        orclcdb_iad1s3 Standby Redo Log Files:  Cleared
        orclcdb Online Redo Log Files:          Not Cleared
        orclcdb Standby Redo Log Files:         Available
    
      Current Log File Groups Configuration:
        Thread #  Online Redo Log Groups  Standby Redo Log Groups Status       
                  (orclcdb_iad1s3)        (orclcdb)                            
        1         3                       2                       Insufficient SRLs
    
      Future Log File Groups Configuration:
        Thread #  Online Redo Log Groups  Standby Redo Log Groups Status       
                  (orclcdb)               (orclcdb_iad1s3)                     
        1         3                       2                       Insufficient SRLs

    如果收到静态连接标识符警告消息,请查看配置参数、SID 服务名、主机 IP 地址或端口地址。

  2. 使用 sys 用户名和口令登录 DGMGRL 会话。
    DGMRGL> connect
  3. 查看内部部署数据库的静态连接标识符。
    DGMGRL> show database orclcdb StaticConnectIdentifier
    复查输出以验证 StaticConnectIdentifier 参数是否准确。以下是一个示例:
    DGMGRL> show database orclcdb StaticConnectIdentifier
      StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.0.2.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORCLCDB)(INSTANCE_NAME=ORCLCDB)(SERVER=DEDICATED)(STATIC_SERVICE=TRUE)))'
  4. 查看云中数据库实例的静态连接标识符。
    DGMGRL> show database orclcdb_iad1s3 StaticConnectIdentifier
      StaticConnectIdentifier = 
    '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.30.3)(PORT=1539)
    ))(CONNECT_DATA=(SERVICE_NAME=ORCLCDB_iad1s3_DGMGRL.sub08120021431.onpremocidrvcn.examplevcn.com) 
    INSTANCE_NAME=ORCLCDB)(SERVER=DEDICATED)))'
    复查输出以验证 StaticConnectIdentifier 参数(例如端口号和服务名)是否正确。
  5. 更正任何 StaticConnectIdentifier 参数,例如端口号和服务名。
    编辑属性时,必须使用 Oracle Data Guard 命令行界面 (command-line interface, DGMGRL) 而不带任何换行符。此示例更正云中数据库实例的端口号和服务名 (orclcdb_iad1s3)。
    DGMGRL> edit database 'orclcdb_iad1s3' set property StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.0.2.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORCLCDB)(INSTANCE_NAME=ORCLCDB)(SERVER=DEDICATED)))';
    Property "staticconnectidentifier" updated
  6. 验证云中的数据库实例。
    DGMGRL> validate database orclcdb_iad1s3;
    输出看起来类似于以下内容:
    Database Role:    Primary database
      Ready for Switchover:  Yes
    
      Managed by Clusterware:
        orclcdb_iad1s3:  NO             
        Validating static connect identifier for the primary database orclcdb_iad1s3...
        The static connect identifier allows for a connection to database "orclcdb_iad1s3".
  7. 验证内部部署数据库。
    DGMGRL> validate database orclcdb;
    输出看起来类似于以下内容:
    Database Role:     Physical standby database
      Primary Database:  orclcdb_iad1s3
      Ready for Switchover:  Yes
      Ready for Failover:    Yes (Primary Running)
    
      Managed by Clusterware:
        orclcdb_iad1s3:  NO             
        orclcdb       :  NO             
        Validating static connect identifier for the primary database orclcdb_iad1s3...
        The static connect identifier allows for a connection to database "orclcdb_iad1s3".
    
      Standby Apply-Related Information:
        Apply State:      Running
        Apply Lag:        2 seconds (computed 7 seconds ago)
        Apply Delay:      0 minutes
    
      Log Files Cleared:
        orclcdb_iad1s3 Standby Redo Log Files:  Cleared
        orclcdb Online Redo Log Files:          Not Cleared
        orclcdb Standby Redo Log Files:         Available
    
      Current Log File Groups Configuration:
        Thread #  Online Redo Log Groups  Standby Redo Log Groups Status       
                  (orclcdb_iad1s3)        (orclcdb)                            
        1         3                       2                       Insufficient SRLs
    
      Future Log File Groups Configuration:
        Thread #  Online Redo Log Groups  Standby Redo Log Groups Status       
                  (orclcdb)               (orclcdb_iad1s3)                     
        1         3                       2                       Insufficient SRLs
  8. 显示和查看配置。
    DGMGRL> show configuration;
    输出看起来类似于以下内容:
    Configuration - onpremdr
    
      Protection Mode: MaxPerformance
      Members:
      orclcdb_iad1s3 - Primary database
        orclcdb        - Physical standby database 
    
    Fast-Start Failover:  Disabled
    
    Configuration Status:
    SUCCESS   (status updated 27 seconds ago)
  9. 从 OCI 中的数据库实例切换到内部部署数据库。
    DGMGRL> switchover to orclcdb;
    输出看起来类似于以下内容:
    Performing switchover NOW, please wait...
    Operation requires a connection to database "orclcdb"
    Connecting ...
    Connected to "ORCLCDB"
    Connected as SYSDBA.
    New primary database "orclcdb" is opening...
    Operation requires start up of instance "ORCLCDB" on database "orclcdb_iad1s3"
    Starting instance "ORCLCDB"...
    Connected to an idle instance.
    ORACLE instance started.
    Connected to "ORCLCDB_iad1s3"
    Database mounted.
    Database opened.
    Connected to "ORCLCDB_iad1s3"
    Switchover succeeded, new primary is "orclcdb"
    装载数据库后,您可能会收到以下警告:
    ORA-16000: database or pluggable database open for read-only access  
    
    Please complete the following steps to finish switchover:
           start up instance "ORCLCDB" of database "orclcdb" 

    可以忽略警告并继续执行下一步。

  10. 在备用数据库(现在是主数据库)上,连接并复查配置。
    DGMGRL> show configuration;
    输出看起来类似于以下内容:
    Configuration - onpremdr
    
      Protection Mode: MaxPerformance
      Members:
      orclcdb        - Primary database
        orclcdb_iad1s3 - Physical standby database 
    
    Fast-Start Failover:  Disabled
    
    Configuration Status:
    SUCCESS   (status updated 86 seconds ago)
  11. 在主数据库实例 ORCLCDB 上,验证模式是否为 read write
    SQL> select database_role, open_mode from v$database;
    DATABASE_ROLE	 OPEN_MODE
    ---------------- --------------------
    PRIMARY 	   READ WRITE
  12. (可选)您可以使用 verbose 命令显示完整的堆栈转储,包括角色、状态、实例、属性以及预警日志和 Data Guard 中介日志的位置。
    DGMGRL> show database verbose orclcdb

您可以在内部部署数据库和 OCI 数据库实例之间前后切换主数据库。