DATAGUARD之二:12C环境使用broker进行switchover,failover以及snapshot standby

一,SWITCHOVER

说在最前面,使用dg broker虽然简单,但是生产环境做切换之前,很多东西要先检查清楚,包括备库的表空间,文件系统,密码文件,甚至有些环境还配了加密。

比如主库文件系统加了空间,备库忘记了等。要根据实际情况加上验证的步骤。

另外,这是正常切换,可以测试下在主库有问题的情况下强行切换是什么结果。

1, 使用明文密码登录

dgmgrl dgmgr/xxxxxxx

你会看到它显示你以SYSDG登录了

2, 查看状态是否正常

DGMGRL> SHOW CONFIGURATION;
Configuration – ryan
Protection Mode: MaxPerformance
Members:
ryanpr – Primary database
ryanstb – Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 10 seconds ago)

3,验证是否可以直接切换

DGMGRL> validate database "ryanpr";

Database Role: Primary database
Ready for Switchover: Yes
Flashback Database Status:
prime: Off
DGMGRL> validate database "ryanstb";
Database Role: Physical standby database
Primary Database: prime
Ready for Switchover: Yes
Ready for Failover: Yes (Primary Running)
Flashback Database Status:
prime: Off
stand: Off

以上输出没有报错,如果有的话要先行fix了

4,进行切换

DGMGRL> switchover to "ryanstb";

Performing switchover NOW, please wait…
Operation requires a connection to instance “ryanstb” on database “ryanstb
Connecting to instance “ryanstb”…
Connected as SYSDBA.
New primary database “ryanstb” is opening…
Operation requires start up of instance “ryanpr” on database “ryanpr
Starting instance “ryanpr”…
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is “ryanstb

5,再看一下配置

DGMGRL> SHOW CONFIGURATION;
Configuration – ryan
Protection Mode: MaxPerformance
Members:
ryanstb – Primary database
ryanpr – Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 10 seconds ago)

总结,其实就两个步骤,难怪说怕用多了dg broker会忘记comand line

验证:

validate database "ryanpr";

切换:

switchover to "ryanstb";

二,FAILOVER

1,墙裂建议开启flashback,一般现在的配置文档都会说明配置,即便是官档。

select flashback_on from v$database;

两边都要检查

2,启动方法很简单,不需要处于mount状态:

alter database flashback on;

如果是备库,需要先停日志应用服务:

alter database recover managed standby database cancel;

alter database flashback on;

alter database recover managed standby database nodelay disconnect from session;

3,直接failover,在standby操作

failover to ryanstd;

DGMGRL> show configuration;

Configuration - ryan_dg

  Protection Mode: MaxAvailability
  Members:
  ryanpr  - Primary database
    ryanstd - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 21 seconds ago)

DGMGRL> failover to ryanstd;
Performing failover NOW, please wait...
Failover succeeded, new primary is "ryanstd"
DGMGRL> show configuration;

Configuration - ryan_dg

  Protection Mode: MaxAvailability
  Members:
  ryanstd - Primary database
    ryanpr  - Physical standby database (disabled)
      ORA-16661: the standby database needs to be reinstated

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 55 seconds ago)
View Code

4,重建主库

因为开启了flashback,所以我们不用那么麻烦去重建主库了,注意,failover后先做个备份

在备库操作:

reinstate database ryanpr;

DGMGRL> reinstate database ryanpr;
Reinstating database "ryanpr", please wait...
Operation requires shut down of instance "ryan" on database "ryanpr"
Shutting down instance "ryan"...
Connected to "RYANPR"
ORACLE instance shut down.
Operation requires start up of instance "ryan" on database "ryanpr"
Starting instance "ryan"...
ORACLE instance started.
Database mounted.
Connected to "RYANPR"
Continuing to reinstate database "ryanpr" ...
Reinstatement of database "ryanpr" succeeded
DGMGRL> show configuration;

Configuration - ryan_dg

  Protection Mode: MaxAvailability
  Members:
  ryanstd - Primary database
    ryanpr  - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 6 seconds ago)
View Code

如果没有开启flashback怎么办?

那就只能重新build,刚好上一个文档使用了restore的方式,这里我们使用duplicate的方式来恢复:

a) shutdown immediate; --原主库

b) startup nomount pfile='/u01/app/oracle/12.2.0/dbs/initryan.ora'; --必须使用pfile文件启动到nomount,原主库

c) rman target sys/oracle@ryanpr auxiliary sys/oracle@ryanstd; --原主库

d) 原主库执行

duplicate target database 
    for standby 
    from active database 
    dorecover 
    spfile 
    PARAMETER_VALUE_CONVERT = 'ryanstd','ryanpr'
    set DB_UNIQUE_NAME = 'ryanpr'
    set DB_FILE_NAME_CONVERT = 'RYANSTD','RYANPR','RYAN','RYANPR'
    SET LOG_FILE_NAME_CONVERT = 'RYANSTD','RYANPR','RYAN','RYANPR'
    comment 'Duplicate test' nofilenamecheck;

--原主库,rman命令

参数解释:

  • FOR STANDBY: 表示这是用于standby,不会改变DBID
  • FROM ACTIVE DATABASE: 直接从主库进行复制,不做额外的备份操作
  • DORECOVER: 包含recovery步骤,把备库恢复到当前时间点
  • SPFILE: 允许修改spfile, set
  • NOFILENAMECHECK: 不检查目标文件地址
  • PARAMETER_VALUE_CONVERT转换除了db_file_name_convert和log_file_name_convert之外的参数值,需要配置

e) diable configuration;--当前主库,broker操作,如果没有配置broker,其实已经是开始应用的了,检查下状态就好了,配置文档中有

    remove database ryanpr;

 add database ryanpr as connect identifier is ryanpr maintained as PHYSICAL;

    enable configuration;

如果显示protection_mode不一致,改一下刚刚重建的主库的参数为SYNC,等一会就好了

更详细的duplicate过程,可以看下官档:https://docs.oracle.com/cd/B28359_01/backup.111/b28270/rcmdupdb.htm#BRADV89937

三,snapshot standby

snapshot standby可以临时把备库启动到read write状态,然后进行一些测试,等测试完再恢复到原本状态

1,主库操作

convert database ryanpr to snapshot standby;

2,同样的,备库操作完成后,运行

convert database ryanpr to physical standby;

 

posted @ 2019-09-25 23:50  Ryan_Wo  阅读(569)  评论(0编辑  收藏  举报