切换前的准备工作。
1.对比standby与primary的data guard的init_(SID)文件的参数设置是否合理,或者是否有不对的地方。
可以先分别在主被两个库上面create pfile from spfile命令dump出来目前dg系统的文件。
例如在primary库上面:
*.fal_server
= dev10g_p *.fal_client
= dev10g_s |
在standby库上面:
*.fal_server
= dev10g_s *.fal_client
= dev10g_p |
还有
log_archive_config= 'DG_CONFIG(dev10g_p,dev10g_s)' |
2.关闭主服务器的对外服务监听端口。
比如本次dwapp切换就是1522(lsnrctl stop LISTENER2)
开始切换。
1.以sys身份连接到主库,切换3次联机日志,做一次完全检查点,保证数据启动恢复时间最短。
alter
system switch
logfile; alter
system switch
logfile; alter
system switch
logfiel; alter
system checkpoint; |
2.关闭主数据库,通过操作系统命令cp备份原来的spfile,然后从配置好的pfile 建立spfile。
cp
spfile<SID>.ora spfile<SID>.ora.bak shutdown
immediate; create
spfile from pfile; startup; SQL>
select name, open_mode, protection_mode, database_role, switchover_status, current_scn, db_unique_name from v$database; NAME
OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS CURRENT_SCN DB_UNIQUE_NAME \--------\-
\---------\- \-------------------\- \---------------\- \-------------------\- \----------\- \-----------------------------\- DWAPP
READ WRITE MAXIMUM AVAILABILITY PRIMARY SESSIONS ACTIVE 60247213254
dwapp_p |
3.执行命令将主库切换成为standby状态。
alter
database commit to switchover to physical standby with session shutdown;(主库) |
4.执行命令将被库切换成为primary状态。
SQL>
select name, open_mode, protection_mode, database_role, switchover_status, current_scn, db_unique_name from v$database; NAME
OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS CURRENT_SCN DB_UNIQUE_NAME \--------\-
\---------\- \-------------------\- \---------------\- \-------------------\- \----------\- \-----------------------------\- DWAPP
MOUNTED MAXIMUM AVAILABILITY PHYSICAL STANDBY SESSIONS ACTIVE 60247213254
dwapp_s |
alter
database commit to switchover to primary with session shutdown;(被库) alter
database open;(被库) alter
database recover managed standby database using current logfile disconnect from session;(主库) |
5.现在新的主库应该是原来的被库(dwapp_s),新的被库应该是原来的主库(dwapp_p)
切换完成,验证切换结果
1.在新的主库上面创建一个表
create
table t1 (id number); insert
into t1 values ( 1 ); commit; |
2.切换日志,让主库的操作应用到被库(如果前面是recover standby using current logfile那么没有必要做这一步,直接跳到第3步)
alter
system switch
logfile; alter
system switch
logfile; alter
system switch
logfile; |
3.将新的被库open然后查看是否有记录。
alter
database recover managed standby database cancel; alter
database open; select
* from t1; |
4.如果有表,有记录,那么证明切换完全成功,再将新被库切换回standby状态即可。
shutdown
immediate; startup
mount; alter
database recover managed standby database using current logfile disconnect with session shutdown; |
5.打开新的主库的对外服务监听。(不要打开被库的对外服务监听,因为以前默认链接的是它,监听通过了,就会尝试连接数据库,但是它现在是备用库,处于mount and recover状态,所以回报database not open错误)
lsnrctl
start LISTENER2 (新的主库上面) |
后续还有部署db级别的监控等等。