物理dataguard 正常切换 脚色转换,switchover_status 状态改变:
切换前: SQL> select DATABASE_ROLE from v$database;
DATABASE_ROLE SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
SQL> SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL;
COUNT(*)
备用库 : SQL> select DATABASE_ROLE from v$database;
DATABASE_ROLE SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
主库需要注意事项
在备库中操作,查看备库
A 如果switchover_status为TO_PRIMARY 说明标记恢复可以直接转换为primary库
B 如果switchover_status为SESSION ACTIVE 就应该断开活动会话
C 如果switchover_status为NOT ALLOWED 说明切换标记还没收到,此时不能
切换中 :
备用库
DATABASE_ROLE SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
切换后备用的状态,模式:
DATABASE_ROLE SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
确认主库和从库间网络连接通畅; 确认没有活动的会话连接在数据库中; PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态; 确保STANDBY数据库处于ARCHIVELOG模式; 如果设置了REDO应用的延迟,那么将这个设置去掉;
确保配置了主库和从库的初始化参数,使得切换完成后,DA 如果是最大保护模式,先变成最大性能模式:
SQL> select DATABASE_ROLE from v$database;
DATABASE_ROLE SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
SQL> Database altered.
SQL> shutdown immediate;
Total System Global Area 3242987696 bytes Database altered. SQL> alter database recover managed standby database disconnect from session; Database altered. SQL> select DATABASE_ROLE from v$database;
DATABASE_ROLE SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
备切主
DATABASE_ROLE SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS SQL> alter database commit to switchover to primary;
Database altered.
SQL> SQL> SQL>
Total System Global Area 3242987696 bytes
DataGuard:Physical Standby Failover
接physical standby switchover
primary db :db2 standby db :db1
一般情况下failover都是表示primary数据库瘫痪,最起码也是起不来了,因此这种类型的切换基本上不需要primary数据库做什么操作。所以下列步骤中如果有提到primary和standby执行的,只是建议你如果primary还可以用,那就执行一下,即使不去执行,对failover来说也没有关系
1.检查归档文件是否连续,是否有gap 在standby库执行 SQL> select THREAD#,LOW_SEQUENCE#,HIGH_SEQUENCE# from v$archive_gap; 2.如果步骤1查询出来纪录,则在primary库上执行,否则跳过此步骤 在主库上执行语句,按步骤1查询出来的纪录找出归档文件 SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN XX AND XX; --如果primary存在,拷贝相应的归档到STANDBY数据库,并注册. SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'xxx'; 3.检查归档文件是否完整 分别在primary/standby执行下列语句: SQL> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log; 把相差的归档复制到待转换的standby服务器,并手工register
4.开始做failover 察看standby进程状态 SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS CLIENT_P SEQUENCE# STATUS --------- -------- ---------- ------------ ARCH ARCH 30 CLOSING ARCH ARCH 0 CONNECTED RFS LGWR 31 IDLE RFS ARCH 0 IDLE RFS N/A 0 IDLE MRP0 N/A 31 APPLYING_LOG
SQL> alter database recover managed standby database finish force ; FORCE关键字将会停止当前活动的RFS进程,以便立刻执行failover。 或 SQL> alter database recover managed standby database finish skip standby logfile;
SQL> alter database commit to switchover to primary; SQL> shutdown immediate SQL> startup
SQL> select database_role,protection_mode,protection_level,open_mode from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE ---------------- -------------------- -------------------- ---------- PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE
Failover切换成功 |
|
来自: 浸心阁 > 《dataguard》