主库:
192.168.92.175

备库:
192.168.92.176

数据库信息:
DB: primary
service_name:
主:primary
备:standby

首先,看看当前环境的情况:
set linesize 400
col name for a18
select name,to_char(created,’yyyy-mm-dd hh24:mi:ss’) “created”,open_mode,log_mode,force_logging,database_role,protection_mode,protection_level,switchover_status,guard_status from v$database;

P:

S:

主库,做一个日志切换,看看备库是否应用了日志:
P:

Alert日志的状态:
P:

S:

可以看到,当前DG主备库的状态是正常的。

下面开始为DG切换做准备。

检查主备库的各个数据库相关文件的存放位置,以确认是否有设置以下参数的必要:
db_file_name_convert
log_file_name_covnert

P:

S:

可以看到,主备库的相关文件,都是放在相同路径下的,所以,并不需要设置convert相关的参数。

主备库上,关于解决归档日志GAP问题的相关参数:fal_*
P:

S:

关于日志传输参数:log_archive_*
P:

S:

STANDBY LOG的设置:
P:

S:

查询主备库是否同步:
对于高版本的Oracle来说可以直接查询:
SELECT DB_UNIQUE_NAME, PROTECTION_MODE, SYNCHRONIZATION_STATUS,SYNCHRONIZED FROM V$ARCHIVE_DEST_STATUS;

但是当前本环境的Oracle 仅为9i,只能人工比对:

查询当前DG的进程的状态:
P:

S:

日志状态:
P:

S:

日志应用状态:
set linesize 400
col name for a50
select name,thread#,sequence#,to_char(first_time,’yyyy-mm-dd hh24:mi:ss’) “First”,to_char(next_time,’yyyy-mm-dd hh24:mi:ss’) “Next”,applied from v$archived_log,(select max(sequence#) “SEQ#” from v$archived_log where applied=’YES’) b where sequence# between b.seq#-5 and b.seq#+9 order by sequence#;

P:

S:

可以看到,日志确实,主备之间是同步的最新状态。

查看是否有Rman在执行备份:
对于高版本的Oracle来说,可以通过下面的SQL,查询是否有RMAN作业正在执行:
SELECT PROCESS, OPERATION, R.STATUS, MBYTES_PROCESSED PCT, S.STATUS FROM V$RMAN_STATUS R, V$SESSION S WHERE R.SID=S.SID;

设置参数,以观察告警日志(主备都要开启):

上面这些做完后,就可以开始切换了。

先查查是否可以切换:
P:

主要是看【switchover_status】

可以看到当前状态是:Sessions active

查看会话信息:
set linesize 300
set pagesize 100
col program for a30
col username for a5
col osuser for a8
col SCHEMANAME for a5
col TEMPORARY_TABLESPACE for a6
select a.program,a.osuser,a.type,a.sid,a.serial#,a.paddr,a.process,a.username,a.command,a.status,a.schema#,a.schemaname,b.TEMPORARY_TABLESPACE,b.username from v$session a,dba_users b where a.schemaname = b.username;

P:

特别注意:
Session Active:
alter database commit to switchover to physical standby with session shutdown;

否则:
alter database commit to switchover to physical standby;

当switchover_status为Sessions active的时候,执行:
P:

这个过程中的ALERT日志:
P:

S:

至此,主库切换完成。

关闭主库并按照DG方式启起来:

备库:
查看当前状态:

特别注意:

recovery needed:
switchover latent:
恢复数据库:
alter database recover managed standby database disconnect from session;

TO_PRIMARY:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

sessions active:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

可以看到,当前为【sessions active】

执行:

该过程的Alert日志为:

然后,关闭备库,并启动:

这样,原来的备库,就切换成了主库。

修改参数:
log_archive_dest_state_2

将原来的主库改为:defer

将原来的备库改为:enable

然后,在原来的备库,也就是切换后新的主库上做一次日志切换:

Alert日志信息:
原来的主库(新备库)

原来的备库(新主库)

至此,DataGuard的主备切换就完成了。
————————————————
Done。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

隐藏
变装