首页 > 数据库 > Oracle > 逻辑Data Guard主备库的转换
逻辑DG主备库的转换
SQL> show parameter FAL;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fal_client string orcl_p.1_tns
fal_server string orcl_s.2_tns
SQL> show parameter log_archive_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest string
log_archive_dest_1 string location=/u01/arch
log_archive_dest_10 string
log_archive_dest_2 string service=orcl_s.2_tns arch vali
d_for=(online_logfiles, primar
y_role) db_unique_name=orcl2
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_8 string
log_archive_dest_9 string
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string ENABLE
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
log_archive_dest_state_8 string enable
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_9 string enable
SQL> alter system set log_archive_dest_3='location=/u01/arch1 valid_for=(online_logfiles, all_roles) db_unique_name=orcl1' ;
System altered.
SQL> alter system set log_archive_dest_3='location=/u01/arch2 valid_for=(standby_logfiles, standby_role) db_unique_name=orcl1' ;
System altered.
SQL> show parameter log_archive_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest string
log_archive_dest_1 string location=/u01/arch
log_archive_dest_10 string
log_archive_dest_2 string service=orcl_s.2_tns arch vali
d_for=(online_logfiles, primar
y_role) db_unique_name=orcl2
log_archive_dest_3 string location=/u01/arch2 valid_for=
(standby_logfiles, standby_rol
e) db_unique_name=orcl1
log_archive_dest_4 string
log_archive_dest_5 string
。。。。。。
创建三组standby 的 redolog (至少也要两组)
SQL> alter database add standby logfile group 4 '/u01/app/oracle/oradata/orcl/stdredo01.log' size 50m;
Database altered.
SQL> alter database add standby logfile group 5 '/u01/app/oracle/oradata/orcl/stdredo02.log' size 50m;
Database altered.
SQL> alter database add standby logfile group 6 '/u01/app/oracle/oradata/orcl/stdredo03.log' size 50m;
Database altered.
查看一下primary是switchover状态,结果为TO STANDBY或者SESSIONS ACTIVE视为正常
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
将primary数据库置为将要装换的状态
SQL> alter database prepare to switchover to logical standby;
Database altered.
查看当前数据库状态
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
PREPARING SWITCHOVER
将逻辑standby数据库转换为primary
STANDBY > alter database prepare to switchover to primary;
Database altered.
查看备份数据库的状态
STANDBY > select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
PREPARING SWITCHOVER
此时查看primary数据库的转换状态
PRIMARY >select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO LOGICAL STANDBY
将primary数据库转换为逻辑的standby
PRIMARY >alter database commit to switchover to logical standby;
Database altered.
返回再去看看原standby数据库的状态,很神奇
STANDBY > select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
将该standby数据库转换为primary
STANDBY > alter database commit to switchover to primary;
Database altered.
逻辑standby转换完成,注意将新转换来的standby启动SQL应用
PRIMARY >set sqlprompt 'NEW_STANDBY > '
NEW_STANDBY > alter database start logical standby apply immediate;
Database altered.
在心的primary端添加数据进行检测:
STANDBY > set sqlprompt 'NEW_PRIMARY > '
NEW_PRIMARY > select * from scott.dg_test;
ID
----------
DG_TEST_1
DG_TEST_2
DG_TEST_3
DG_TEST_4
NEW_PRIMARY > insert into scott.DG_TEST
2 values('DG_TEST_5')
3 /
1 row created.
NEW_PRIMARY > select * from scott.DG_TEST;
ID
----------
DG_TEST_1
DG_TEST_2
DG_TEST_3
DG_TEST_4
DG_TEST_5
NEW_PRIMARY > commit;
Commit complete.
NEW_PRIMARY > alter system switch logfile;
System altered.
在新的standby端查看数据是否接收
NEW_STANDBY > select * from scott.dg_test;
ID
----------
DG_TEST_1
DG_TEST_2
DG_TEST_3
DG_TEST_4
DG_TEST_5
小结:
1、在进行转换前,要确定备库的设置健全,比如几个不同日志存放目录的设置
2、在将数据库置为开始转换状态时,由于,或因某些原因另一数据库无法自动到’TO STANDBY’或’TO PRIMAYR’状态,可用下列语句取消转换状态:
alter database prepare to switchover cancel;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29320885/viewspace-1101687/ ,如需转载,请注明出处,否则将追究法律责任。