dataguard如何实现切换_dataguard配合flashback实现主备任意切换(failover和switchover)

有客户使用本地和公有云通过vpn搭建数据库容灾,其中有一个需求,当本地环境出现问题云端容灾库接管业务,当本地环境恢复之后,本地继续做为主库,云端作为备库.我这里使用oracle dataguard结合flashback模拟实现客户需求(也可以在failover之后通过重新搭建dg实现类似需求,具体需要看客户的实际场景:数据量,带宽,恢复时间,技术能力等)

正常dg同步的主备环境

这里ora11g主机是主库,ora10g主机是备库

--数据库版本

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE 11.2.0.4.0 Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 - Production

---主库(ora11g)

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

READ WRITE PRIMARY ora11g YES

SQL> create table xff.t_xifenfei as select * from dba_objects;

Table created.

SQL> select count(*) from xff.t_xifenfei;

COUNT(*)

----------

86348

---备库(ora10g)

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

READ ONLY WITH APPLY PHYSICAL STANDBY ora10g YES

SQL> select count(*) from xff.t_xifenfei;

COUNT(*)

----------

86348

模拟主库(ora11g)故障,直接激活备库(ora10g)

模拟dg备库(ora10g)直接failover操作

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Database altered.

SQL> ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;

Database altered.

Sat Mar 24 16:05:40 2017

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL

MRP0: Background Media Recovery cancelled with status 16037

Errors in file /u01/app/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_pr00_13428.trc:

ORA-16037: user requested cancel of managed recovery operation

Managed Standby Recovery not using Real Time Apply

Recovery interrupted!

Recovered data files to a consistent state at change 1470499

Sat Mar 24 16:05:40 2017

MRP0: Background Media Recovery process shutdown (ora11g)

Managed Standby Recovery Canceled (ora11g)

Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL

Sat Mar 24 16:05:50 2017

ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE

ALTER DATABASE ACTIVATE [PHYSICAL] STANDBY DATABASE (ora11g)

All dispatchers and shared servers shutdown

CLOSE: killing server sessions.

CLOSE: all sessions shutdown successfully.

Sat Mar 24 16:05:50 2017

SMON: disabling cache recovery

Killing 3 processes with pids 13372,13393,13388 (all RFS) in order to

disallow current and future RFS connections. Requested by OS process 13350

Begin: Standby Redo Logfile archival

End: Standby Redo Logfile archival

RESETLOGS after incomplete recovery UNTIL CHANGE 1470499

Archived Log entry 9 added for thread 1 sequence 14 ID 0xfd5a5fc1 dest 1:

Resetting resetlogs activation ID 4250558401 (0xfd5a5fc1)

Online log /u01/app/oracle/oradata/ora11g/redo01.log: Thread 1 Group 1 was previously cleared

Online log /u01/app/oracle/oradata/ora11g/redo02.log: Thread 1 Group 2 was previously cleared

Online log /u01/app/oracle/oradata/ora11g/redo03.log: Thread 1 Group 3 was previously cleared

Standby became primary SCN: 1470497

Sat Mar 24 16:05:52 2017

Setting recovery target incarnation to 4

ACTIVATE STANDBY: Complete - Database mounted as primary

Completed: ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE

模拟新主库(ora10g)业务操作

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

MOUNTED PRIMARY ora10g YES

SQL> alter database open;

Database altered.

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

READ WRITE PRIMARY ora10g YES

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

/

System altered.

SQL>

System altered.

SQL>

SQL> archive log list;

Database log mode Archive Mode

Automatic archival Enabled

Archive destination USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence 5

Next log sequence to archive 7

Current log sequence 7

SQL> delete from xff.t_xifenfei;

86348 rows deleted.

SQL> commit;

Commit complete.

SQL> select count(*) from xff.t_xifenfei;

COUNT(*)

----------

0

原主库(ora11g)配置为新备库

---原主库(ora10g)

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area 3056513024 bytes

Fixed Size 2257152 bytes

Variable Size 704646912 bytes

Database Buffers 2332033024 bytes

Redo Buffers 17575936 bytes

Database mounted.

SQL> Flashback database to scn 1470490;

Flashback complete.

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

MOUNTED PRIMARY ora11g YES

--现在主库(ora10g)

SQL> alter database create standby controlfile as '/tmp/ctl.3';

Database altered.

[oracle@ora10g ~]$ scp /tmp/ctl.3 192.168.222.11:/u01/app/oracle/oradata/ora11g/control01.ctl

oracle@192.168.222.11's password:

ctl.3

---也可以直接在老主库上执行ALTER DATABASE CONVERT TO PHYSICAL STANDBY; 转换为standby 角色,然后直接启动同步

--现在备库(ora11g)

SQL> shutdown abort

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area 3056513024 bytes

Fixed Size 2257152 bytes

Variable Size 704646912 bytes

Database Buffers 2332033024 bytes

Redo Buffers 17575936 bytes

Database mounted.

SQL> col open_mode for a30

SQL> col database_role for a30

SQL> col HOST_NAME for a30

SQL> col flashback_on for a10

SQL> set lines 150

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

MOUNTED PHYSICAL STANDBY ora11g NO

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Database altered.

Sat Mar 24 16:10:09 2017

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION

Attempt to start background Managed Standby Recovery process (ora11g)

Sat Mar 24 16:10:09 2017

MRP0 started with pid=27, OS id=27086

MRP0: Background Managed Standby Recovery process started (ora11g)

started logmerger process

Sat Mar 24 16:10:14 2017

Managed Standby Recovery starting Real Time Apply

Parallel Media Recovery started with 4 slaves

Media Recovery start incarnation depth : 1, target inc# : 4, irscn : 1470499

Waiting for all non-current ORLs to be archived...

All non-current ORLs have been archived.

Clearing online redo logfile 1 /u01/app/oracle/oradata/ora11g/redo01.log

Clearing online log 1 of thread 1 sequence number 7

Clearing online redo logfile 1 complete

Clearing online redo logfile 2 /u01/app/oracle/oradata/ora11g/redo02.log

Clearing online log 2 of thread 1 sequence number 8

Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION

Clearing online redo logfile 2 complete

Clearing online redo logfile 3 /u01/app/oracle/oradata/ora11g/redo03.log

Clearing online log 3 of thread 1 sequence number 9

Clearing online redo logfile 3 complete

Media Recovery Waiting for thread 1 sequence 13 branch(resetlogs_id) 854379205

Sat Mar 24 16:10:16 2017

RFS[3]: Assigned to RFS process 27098

RFS[3]: Opened log for thread 1 sequence 13 dbid 48871109 branch 854379205

Archived Log entry 2 added for thread 1 sequence 13 rlc 854379205 ID 0xfd5a5fc1 dest 2:

Sat Mar 24 16:10:16 2017

RFS[4]: Assigned to RFS process 27100

RFS[4]: Opened log for thread 1 sequence 14 dbid 48871109 branch 854379205

Archived Log entry 3 added for thread 1 sequence 14 rlc 854379205 ID 0xfd5a5fc1 dest 2:

RFS[3]: Opened log for thread 1 sequence 1 dbid 48871109 branch 947798452

RFS[4]: Opened log for thread 1 sequence 3 dbid 48871109 branch 947798452

Sat Mar 24 16:10:16 2017

RFS[5]: Assigned to RFS process 27070

RFS[5]: Opened log for thread 1 sequence 2 dbid 48871109 branch 947798452

Archived Log entry 4 added for thread 1 sequence 1 rlc 947798452 ID 0x2ec1ed0 dest 2:

Archived Log entry 5 added for thread 1 sequence 3 rlc 947798452 ID 0x2ec1ed0 dest 2:

RFS[3]: Opened log for thread 1 sequence 4 dbid 48871109 branch 947798452

RFS[4]: Opened log for thread 1 sequence 5 dbid 48871109 branch 947798452

Archived Log entry 6 added for thread 1 sequence 5 rlc 947798452 ID 0x2ec1ed0 dest 2:

Archived Log entry 7 added for thread 1 sequence 4 rlc 947798452 ID 0x2ec1ed0 dest 2:

Archived Log entry 8 added for thread 1 sequence 2 rlc 947798452 ID 0x2ec1ed0 dest 2:

RFS[4]: Opened log for thread 1 sequence 6 dbid 48871109 branch 947798452

Archived Log entry 9 added for thread 1 sequence 6 rlc 947798452 ID 0x2ec1ed0 dest 2:

RFS[3]: Opened log for thread 1 sequence 7 dbid 48871109 branch 947798452

Archived Log entry 10 added for thread 1 sequence 7 rlc 947798452 ID 0x2ec1ed0 dest 2:

Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11GDG/archivelog/2017_03_24/o1_mf_1_13_9xmyh8cs_.arc

Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11GDG/archivelog/2017_03_24/o1_mf_1_14_9xmyh8dr_.arc

Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11GDG/archivelog/2017_03_24/o1_mf_1_1_9xmyh8fk_.arc

Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11GDG/archivelog/2017_03_24/o1_mf_1_2_9xmyh8fo_.arc

Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11GDG/archivelog/2017_03_24/o1_mf_1_3_9xmyh8fm_.arc

Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11GDG/archivelog/2017_03_24/o1_mf_1_4_9xmyh8g3_.arc

Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11GDG/archivelog/2017_03_24/o1_mf_1_5_9xmyh8g4_.arc

Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11GDG/archivelog/2017_03_24/o1_mf_1_6_9xmyh8gs_.arc

Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11GDG/archivelog/2017_03_24/o1_mf_1_7_9xmyh8hl_.arc

Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11GDG/archivelog/2017_03_24/o1_mf_1_8_9xmy5d3f_.arc

Media Recovery Waiting for thread 1 sequence 9 (in transit)

Recovery of Online Redo Log: Thread 1 Group 4 Seq 9 Reading mem 0

Mem# 0: /u01/app/oracle/oradata/ora11g/std_redo10.log

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel;

Database altered.

SQL> alter database open;

Database altered.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Database altered.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel;

Database altered.

SQL> alter database flashback on;

Database altered.

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

READ ONLY PHYSICAL STANDBY ora11g YES

SQL> select count(*) from xff.t_xifenfei;

COUNT(*)

----------

0

--现在主库

SQL> drop table xff.t_xifenfei ;

Table dropped.

SQL> select count(*) from xff.t_xifenfei;

select count(*) from xff.t_xifenfei

*

ERROR at line 1:

ORA-00942: table or view does not exist

--现在备库

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Database altered.

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

READ ONLY WITH APPLY PHYSICAL STANDBY ora11g YES

SQL> select count(*) from xff.t_xifenfei;

select count(*) from xff.t_xifenfei

*

ERROR at line 1:

ORA-00942: table or view does not exist

通过上述一系列操作,以前假设故障的主库,现在变成了被failover激活的主库的备库,也就是说数据库主备关系由ora11g主库—>ora10g备库变成了ora10g主库—>ora11g备库

switchover实现主备库互换

---现在主库(ora10g)

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY WITH SESSION SHUTDOWN;

Database altered.

--现在备库(ora11g)

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

Database altered.

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

MOUNTED PRIMARY ora11g YES

SQL> alter database open;

Database altered.

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

READ WRITE PRIMARY ora11g YES

--最新备库(ora10g)

SQL> startup

ORACLE instance started.

Total System Global Area 3056513024 bytes

Fixed Size 2257152 bytes

Variable Size 687869696 bytes

Database Buffers 2348810240 bytes

Redo Buffers 17575936 bytes

Database mounted.

Database opened.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Database altered.

SQL> select open_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;

OPEN_MODE DATABASE_ROLE HOST_NAME FLASHBACK_

------------------------------ ------------------------------ ------------------------------ ----------

READ ONLY WITH APPLY PHYSICAL STANDBY ora10g YES

--最新主库(ora11g)

SQL> alter system switch logfile;

System altered.

SQL> create table t_xifenfei as select * from dba_objects;

Table created.

SQL> select count(*) from t_xifenfei;

COUNT(*)

----------

86347

--最新备库(ora10g)

SQL> select count(*) from t_xifenfei;

COUNT(*)

----------

86347

通过switchover主备库再次互换由ora10g主库—>ora11g备库变成了ora11g主库—>ora10g备库,再次恢复到最初的状态.这个不是唯一的方法,可以通过重建dg,也能够实现类似需求.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值