关于Oracle Data Guard的角色切换(三)
;
createtable t1 as select * from all_objects
*
ERROR atline 1:
ORA-00604:error occurred at recursive SQL level 1
ORA-16000:database open for read-only access
检查操作结果,确认主库的数据库角色变成了PHYSICAL STANDBY,SWITCHOVER_STATUS是TO PRIMARY。
这点很重要,表示主库可以再次恢复成主库。
SQL>select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
------------------------------------
PHYSICALSTANDBY TO PRIMARY
使用SQL:alter database commit to switchover to primary;将主库二次切换为主库。
SQL>alter database commit to switchover to primary;
Databasealtered.
结果检查如下:
SQL>conn / as sysdba
Connected.
SQL>startup open force;
ORACLEinstance started.
Databasemounted.
Databaseopened.
SQL>select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
------------------------------------
PRIMARY TO STANDBY
这样,虽然等于什么都没做,但也说明主库的角色可以再次还原成PRIMARY的。
在整个二次切换过程中,备库的SWITCHOVER_STATUS从TO PRIMARY转换为RECOVERY NEEDED,最后转换为SESSIONS ACTIVE。
SQL> r
1* select database_role,switchover_status from v$database
DATABASE_ROLE SWITCHOVER_STATUS
------------------------------------
PHYSICALSTANDBY TO PRIMARY
SQL> r
1* select database_role,switchover_status from v$database
DATABASE_ROLE SWITCHOVER_STATUS
------------------------------------
PHYSICALSTANDBY RECOVERY NEEDED
SQL>alter database recover managed standby database using current logfiledisconnect from session;
Databasealtered.
SQL> select database_role,switchover_status fromv$database;
DATABASE_ROLE SWITCHOVER_STATUS
------------------------------------
PHYSICALSTANDBY SESSIONS ACTIVE
4.备库灾难切换
我们先模拟主库宕机。在主库上log_archive_dest_state_2设置为derfer,再将备库的tnsnames.ora的tesdb_primary中的ip设置为其他IP地址。否则,在执行alterdatabase recover managed standby database finish;时,会说主库还活着。
SQL>alter database recover managed standby database finish;
alterdatabase recover managed standby database finish
*
ERROR atline 1:
ORA-00283:recovery session canceled due to errors
ORA-16173:incompatible archival network connections active
接着执行备库切换操作,步骤如下:
第一步,在备库上执行select database_role,switchover_status from v$database;检查切换状态。
SQL>select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
------------------------------------
PHYSICALSTANDBY TO PRIMARY
第二步,在备库上执行alter database recover managed standby database finish;恢复所有的日志文件。具体恢复到哪一SCN,我现在不清楚。
SQL>alter database recover managed standby database finish;
Databasealtered.
第三步,在备库再检查切换状态
SQL>select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
------------------------------------
PHYSICALSTANDBY TO PRIMARY
第四步,执行切换
SQL>alter database commit to switchover to primary with session shutdown;
Databasealtered.
SQL>select database_role,switchover_status from v$database;
DATA