Oracle DG

本文详细介绍了如何使用物理备用数据库进行读/写测试和报告,包括故障切换步骤、重新激活备用数据库、增量备份和恢复、控制文件的备份与恢复等关键操作。通过这些步骤,可以在确保数据安全的同时,实现数据库的高效管理和维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  
   create tablespace "tbs001" datafile '/u01/app/oracle/oradata/icisep/tbs001.dbf' size 100m reuse autoextend on next 1280k maxsize 1024M logging extent management local segment space management auto;

   create table scott.t1 (f1 varchar2(100)) tablespace "tbs001" pctfree 10 initrans 1 maxtrans 255 storage (initial 64k buffer_pool default) logging;

create or replace procedure scott.insert_t1(
  p_times in number,
  p_desc  in varchar2
) as
begin
  for i in 1..p_times loop
    insert into scott.t1 values(to_char(systimestamp,'YYYYMMDD HH24:MI:SSXFF') || ' did ' || p_desc);
  end loop;
  commit;
end;
/

  

   1. Check flashback status on both DBs:
      SQL> Select flashback_on from v$database;
      # The results are 'YES'

   2. Disable the dg_broker_start on both DBs:
      SQL> Alter system set dg_broker_start=false scope=both;

   3. On standby DB(icises):
      SQL> Shutdown immediate;
      SQL> Startup nomount;
      SQL> Alter database mount standby database;

   4. Reset the log_archive_dest for remote:
      SQL> ALTER SYSTEM SET log_archive_dest_3='service="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=oracletest02.macaowater.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=icises_XPT)(INSTANCE_NAME=icises)(SERVER=dedicated)))"','   LGWR SYNC AFFIRM delay=0 OPTIONAL max_failure=0 max_connections=1   reopen=300 db_unique_name="icises" register net_timeout=180 valid_for=(online_logfile,primary_role)' SCOPE=BOTH;
      SQL> alter system set log_archive_dest_state_3=enable scope=both;

   5. On primary DB(icisep), login scott to do some transactions:
      SQL> call scott.insert_t1(10000, 'before failover');

   6. On primary DB(icisep), login sys to switch log file:
      SQL> alter system switch logfile;
      SQL> alter system switch logfile;
      SQL> alter system switch logfile;

   7. On primary DB(icisep), create a restore point:
      SQL> CREATE RESTORE POINT before_failover_prim;

   8. On standby DB(icises), create a restore point too:
      SQL> CREATE RESTORE POINT before_failover_stdby;

   9. Emulate a failure on primary DB(icisep):
      SQL> shutdown immediate;

  10. Failover to standby DB(icises):
      SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
      SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
      SQL> Alter database open;

  11. On new primary DB(icises), set the log_archive_dest for remote:
      SQL> ALTER SYSTEM SET log_archive_dest_3='service="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=oracletest01.macaowater.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=icisep_XPT)(INSTANCE_NAME=icisep)(SERVER=dedicated)))"','   LGWR SYNC AFFIRM delay=0 OPTIONAL max_failure=0 max_connections=1   reopen=300 db_unique_name="icisep" register net_timeout=180 valid_for=(online_logfile,primary_role)' SCOPE=BOTH;
      SQL> alter system set log_archive_dest_state_3=enable scope=both;

  12. On new primary DB(icises), login user scott to do some transactions:
      SQL> call scott.insert_t1(20000, 'after failover');
      SQL> call scott.insert_t1(5000, 'after failover, before reinstate');

  13. On new primary DB(icises), login sys to switch log files:
      SQL> alter system switch logfile;
      SQL> alter system switch logfile;
      SQL> alter system switch logfile;

  14. Now starting to re-instate the old primary DB(icisep). on new primary
      DB(icises), check the standby_became_primary_scn:
      SQL> SELECT STANDBY_BECAME_PRIMARY_SCN FROM V$DATABASE;

  15. On old primary DB(icisep):
      SQL> Startup mount;
      SQL> FLASHBACK DATABASE TO SCN {standby_became_primary_scn};  -- ORA-38743: Time/SCN is in the future of the database.
      SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
      SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_state_3=defer scope=both;
      SQL> SHUTDOWN IMMEDIATE;
      SQL> STARTUP noMOUNT;
      SQL> Alter database mount standby database;

  16. Now, switch the log files, On primary DB(icises):
      SQL> call scott.insert_t1(6000, 'after reinstate');
      SQL> ALTER SYSTEM SWITCH LOGFILE;
      SQL> ALTER SYSTEM SWITCH LOGFILE;
      SQL> ALTER SYSTEM SWITCH LOGFILE;

  17. On standby DB(icisep):
      SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

  18. On primary DB(icises), login scott to do some transactions:
      SQL> call scott.insert_t1(50000, 'after reinstate, before switchover');

  19. On primary DB(icises), switch log files:
      SQL> alter system switch logfile;
      SQL> alter system switch logfile;
      SQL> alter system switch logfile;

  20. Now, begin to do the switchover, on primary DB(icises):
      SQL> shutdown immediate
      SQL> startup
      SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY with session shutdown; -- long time process
      SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_state_3=defer scope=both;

  21. On standby DB(icisep):
      SQL> SHUTDOWN IMMEDIATE;
      SQL> STARTUP MOUNT;
      SQL> Alter database RECOVER MANAGED STANDBY DATABASE FINISH; -- 00283 & 38760
      SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY with session shutdown;
      SQL> ALTER DATABASE OPEN;

  22. On primary DB(icisep), enable the remote log_archive_dest:
      SQL> ALTER SYSTEM SET log_archive_dest_state_3=enable SCOPE=BOTH;

  23. On primary DB(icisep), switch log files:
      SQL> ALTER SYSTEM SWITCH LOGFILE;
      SQL> ALTER SYSTEM SWITCH LOGFILE;
      SQL> ALTER SYSTEM SWITCH LOGFILE;

  24. On standby DB(icises):
      SQL> Shutdown immediate;
      SQL> Startup nomount;
      SQL> Alter database mount standby database;
      SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

  25. Flashback to before_failover, on primary DB(icisep):
      SQL> Shutdown immediate;
      SQL> Startup mount;
      SQL> flashback database to restore point before_failover_prim;
      SQL> alter database open resetlogs;

  26. Sshutdown the standby DB(icises):
      SQL> shutdown immediate;
      SQL> startup nomount
      SQL> alter database mount standby database;
      SQL> flashback database to restore point before_failover_stdby;
      # It's OK.

  26. Enable the dg_broker_start on both DBs:
      SQL> Alter system set dg_broker_start=true scope=both;












Using a Physical Standby Database for Read/Write Testing and Reporting

1.standby DB
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
CREATE RESTORE POINT before_application_patch GUARANTEE FLASHBACK DATABASE;

2.primary DB
ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_3=DEFER;

3.standby DB
ALTER DATABASE ACTIVATE STANDBY DATABASE;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
ALTER DATABASE OPEN;

4.Do many transactions.

5.Revert the activated database back to a physical standby database
SQL> STARTUP MOUNT FORCE;
SQL> FLASHBACK DATABASE TO RESTORE POINT before_application_patch;
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
SQL> STARTUP MOUNT FORCE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

6.enable the remote log archive on primary DB.
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_3=ENABLE;

If now the status is not sync.
7. On the standby database, stop the managed recovery process (MRP):
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

8. On the standby database, find the SCN which will be used for the incremental backup at the primary database:
SQL> SELECT CURRENT_SCN FROM V$DATABASE;

9. In RMAN, connect to the primary database and create an incremental backup from the SCN derived in the previous step:
# rman target=icisep
RMAN> BACKUP INCREMENTAL FROM SCN <SCN from previous step> DATABASE FORMAT '/tmp/ForStandby_%U' tag 'FORSTANDBY';

10. Transfer all backup sets created on the primary system to the standby system (note that there may be more than one backup file created).

11. Connect to the standby database as the RMAN target, and catalog all incremental backup pieces:
# rman target=icises
RMAN> CATALOG START WITH '/tmp/ForStandby';

12. Recover the standby database with the cataloged incremental backup:
RMAN> RECOVER DATABASE NOREDO;

13. In RMAN, connect to the primary database and create a standby control file backup:
RMAN> BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/tmp/ForStandbyCTRL.bck';

14. Copy the standby control file backup to the standby system.

15. Shut down the standby database and startup nomount:

16. In RMAN, connect to standby database and restore the standby control file:
RMAN> RESTORE STANDBY CONTROLFILE FROM '/tmp/ForStandbyCTRL.bck';

17. Shut down the standby database, remove the redo logs, set LOG_FILE_NAME_CONVERT  and startup mount:
SQL> alter system set LOG_FILE_NAME_CONVERT='/icisep/','/icises/' scope=spfile;
SQL> shutdown immediate;
# rm *.log
SQL> startup mount;

18. On the standby database, clear all standby redo log groups (there may be more than 3):
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 2;
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 3;

19. On the standby database, restart Flashback Database:
SQL> ALTER DATABASE FLASHBACK OFF;
SQL> ALTER DATABASE FLASHBACK ON;

20. On the standby database, restart MRP
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

Oracle Data Guard 是 Oracle 数据库提供的一个高可用性解决方案,用于保护数据库免受故障、灾难和数据损坏的影响。它通过维护一个或多个备用数据库(Standby Database)来实现主数据库(Primary Database)的实时或近实时复制。以下是 Oracle Data Guard 的配置指南和使用方法的详细说明: ### 配置 Oracle Data Guard #### 1. 环境准备 在配置 Oracle Data Guard 之前,需要确保满足以下条件: - 主数据库和备用数据库的硬件和操作系统环境应尽可能相似。 - 确保主数据库和备用数据库之间的网络连接稳定。 - 配置 TNS(Transparent Network Substrate)别名,以便主数据库和备用数据库可以相互通信。 - 确保主数据库处于归档模式(ARCHIVELOG mode),因为 Data Guard 依赖于归档日志文件进行数据同步。 #### 2. 创建物理备用数据库 创建物理备用数据库的过程包括以下几个步骤: - **备份主数据库**:使用 RMAN(Recovery Manager)对主数据库进行完整备份。 - **复制备份文件到备用数据库服务器**:将主数据库的备份文件复制到备用数据库服务器。 - **恢复备用数据库**:使用 RMAN 恢复备用数据库。 - **配置初始化参数**:修改主数据库和备用数据库的初始化参数,以启用 Data Guard 功能。例如,设置 `LOG_ARCHIVE_CONFIG`、`LOG_ARCHIVE_DEST_2` 和 `FAL_SERVER` 等参数。 - **启动 MRP 进程**:在备用数据库上启动 Managed Recovery Process (MRP),以应用从主数据库传输过来的归档日志。 #### 3. 配置逻辑备用数据库 逻辑备用数据库与物理备用数据库不同,它允许在备用数据库上执行 SQL 语句。配置逻辑备用数据库的过程包括: - **创建逻辑备用数据库**:使用 `DBMS_LOGMNR` 和 `DBMS_LOGSTDBY` 包来创建逻辑备用数据库。 - **启用逻辑应用进程**:启动逻辑应用进程(LSP),以便将主数据库的更改应用于逻辑备用数据库。 #### 4. 配置 Broker Oracle Data Guard Broker 是一个管理框架,用于简化 Data Guard 的配置和管理。启用 Broker 的步骤包括: - **启用 Broker 支持**:在主数据库和备用数据库的初始化参数中设置 `DG_BROKER_START=TRUE`。 - **使用 DGMGRL 命令行工具**:通过 DGMGRL 命令行工具创建和管理 Data Guard 配置。 ### 使用 Oracle Data Guard #### 1. 监控 Data Guard 状态 可以通过以下方式监控 Data Guard 的状态: - **查询 V$ARCHIVED_LOG 视图**:检查归档日志的传输和应用情况。 - **查询 V$MANAGED_STANDBY 视图**:查看 MRP 进程的状态。 - **使用 Enterprise Manager**:通过 Oracle Enterprise Manager 提供的图形界面监控 Data Guard 的状态。 #### 2. 执行切换和故障转移 Data Guard 支持两种类型的切换操作: - **计划切换(Switchover)**:在正常情况下将主数据库的角色切换到备用数据库。此操作是可逆的。 - **故障转移(Failover)**:当主数据库发生故障时,将备用数据库提升为新的主数据库。此操作通常是不可逆的。 切换和故障转移可以通过以下命令执行: ```sql -- 计划切换 ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY; -- 故障转移 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE; ``` #### 3. 维护和优化 为了确保 Data Guard 的高效运行,建议定期进行以下维护和优化操作: - **检查归档日志传输延迟**:确保归档日志能够及时传输到备用数据库。 - **调整初始化参数**:根据实际需求调整 `LOG_ARCHIVE_DEST_2`、`FAL_SERVER` 等参数。 - **定期测试故障转移**:验证备用数据库在故障情况下的可用性和恢复能力。 ### 示例代码:配置物理备用数据库 以下是一个简单的示例,展示如何配置物理备用数据库: ```sql -- 在主数据库上启用归档模式 SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; -- 配置 LOG_ARCHIVE_CONFIG 参数 ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary_db, standby_db)'; -- 配置归档日志传输目的地 ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db'; -- 启动 MRP 进程 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT; ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值