[terry笔记]11gR2_dataguard_主备库切换

主备库切换 

Switchover 

一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUARD环境中的所有物理和逻辑STANDBY都可以继续工作。

 

在进行DATA GUARD的物理STANDBY切换前需要注意: 

1)确认主库和从库间网络连接通畅; 

2)确认没有活动的会话连接在数据库中; 

3)PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;

4)确保STANDBY数据库处于ARCHIVELOG模式; 

5)如果设置了REDO应用的延迟,那么将这个设置去掉; 

6)确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。 ­

 

主库:

1. 查看switchover 状态 

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

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

TO STANDBY

 

附:

A:switchover_status出现session active/not allowed 

当出现session active的时候表示还有活动的session,则运行 

Alter database commit to switchover to physical standby with session shutdown;

当出现not allowed时,在官方文档说转换会不成功,但是我测试的时候成功了。 

B.ora-01153: an incompatible media recovery is active 

运行下面语句

Alter database recover managed standby database finish; 

或者Alter database recover managed standby database finish force; 

Alter database recover managed standby database disconnect from session; 

 

2 切换成备库 

SQL>Alter database commit to switchover to physical standby with session shutdown; 

或者

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; 

     Database altered. 

 

3 启动到mount和应用日志状态 

SQL> SHUTDOWN IMMEDIATE 

SQL> startup nomount; 

SQL> alter database mount standby database; 

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; 

 

4. 查看数据库模式 

SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status;

SQL>select status,database_mode from v$archive_dest_status; 

 

备库: 

1.查看switchover状态 

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; 

    TO PRIMARY 

附:若不是用此语句切换:ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY with session shutdown  

补充:若出现:ORA-16139: media recovery required

是因为没有执行:alter database recover managed standby database disconnect from session; 

 

2. 切换成主库 

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 

Database altered. 

SQL> shutdown immediate; 

SQL> startup; 

SQL> alter system switch logfile; 

 

3. 查看数据库模式 

SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status; 

SQL>select status,database_mode from v$archive_dest_status; 

 

验证同步:

SQL> select sequence# from v$archived_log;

 


 

Failovers: 

FAILOVER切换一般是PRIMARY数据库发生故障后的切换,这种情况是STANDBY数据库发挥其作用的情况。这种切换发生后,可能会造成数据的丢失。而且这个过程不是可逆的,DATA GUARD环境会被破坏。 

由于PRIMARY数据库已经无法启动,所以FAILOVER切换所需的条件并不多,只要检查STANDBY是否运行在最大保护模式下,如果是的话,需要将其置为最大性能模式,否则切换到PRIMARY角色也无法启动。 

 

1. 查看是否有日志GAP,没有应用的日志: 

SQL> SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG; 

SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; 

如果有,则拷贝过来并且注册 

SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE '路径'; 

重复查看直到没有应用的日志。

 

2. 然后停止应用归档: 

 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

  Database altered. 

 

3. 下面将STANDBY数据库切换为PRIMARY数据库: ­

  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; 

  或 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; 

  Database altered. 

 

  SQL> SELECT DATABASE_ROLE FROM V$DATABASE; 

  DATABASE_ROLE 

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

  PHYSICAL STANDBY 

 

  SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 

  Database altered. 

 

    SQL> ALTER DATABASE OPEN; 或者 shutdown immediate+startup 

  Database altered. 

 

  检查数据库是否已经切换成功: 

 

  SQL> SELECT DATABASE_ROLE FROM V$DATABASE; 

  DATABASE_ROLE 

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

  PRIMARY 

 

至此,FAILOVER切换完成。这个时候应该马上对新的PRIMARY数据库进行备份。

原文地址:https://www.cnblogs.com/kkterry/p/3823410.html