一、环境介绍:
参数规划:
数据库 db_name sid instance_name service_names db_unique_name fal_server fal_client
主 库 dg1 dg1 dg1 dg1 dg1 bdg2 dg1
备库 dg1 dg1 dg1 bdg2 bdg2 dg1 bdg2
操作系统:centos linux release 6.0 (final)
数据库:oracle database 11g enterprise edition release 11.2.0.1.0 - production
dg模式:物理dg
sql> select protection_mode, protection_level from v$database;
protection_mode protection_level
-------------------- --------------------
maximum performance maximum performance
二、正常主备切换(switchover)
主库:
在primary数据库检查是否支持switchover操作
1、 sql>select open_mode,switchover_status,database_role from v$database;
switchover_status
--------------------
to standby
如果该列值为”to standby”则表示primary数据库支持转换为standby角色
注意:1、如果是第一次做switchover的话,这里应该是sessions active状态,不用理会他,继续下面的操作.
2、在primary数据库启动switchover,先把primary转换为standby的角色
当switchover_status为sessions active时,(说明有会话连接)
alter database commit to switchover to physical standby with session shutdown;
否则执行
sql> alter database commit to switchover to physical standby;
database altered.
执行完上个语句,primary会变成standby数据库,并备份控制文件到trace
此时查看dg2状态,备库dg2状态会由not allowed变成to primary
sql> select open_mode,switchover_status,database_role from v$database;
open_mode switchover_status database_role
-------------------- -------------------- ----------------
mounted to primary physical standby
3、在primary数据库重启动到mount
sql> shutdown immediate;
ora-01507: database not mounted
oracle instance shut down.
sql> startup mount;
此时查看dg1,成功切换成备库了,同dg2状态一样,见上图。
sql> select open_mode,switchover_status,database_role from v$database;
open_mode switchover_status database_role
-------------------- -------------------- ----------------
mounted to primary physical standby
4、(开启standby应用恢复模式)
sql> alter database recover managed standby database disconnect;--接收日志
database altered.
5、再次查看状态
sql> select open_mode,switchover_status,database_role from v$database;
open_mode switchover_status database_role
-------------------- -------------------- ----------------
mounted to primary physical standby
备库:
在standby数据库上检查是否支持switchover操作
[oracle@dg2 ~]$ sqlplus / as sysdba
sql> select open_mode,switchover_status,database_role from v$database;
open_mode switchover_status database_role
-------------------- -------------------- ----------------
mounted to primary physical standby
值为”to primary”,说明支持转换.
2、 在standby数据库转换角色到primary
[oracle@dg2 ~]$ sqlplus / as sysdba
sql> alter database commit to switchover to primary;
database altered.
sql> select open_mode,switchover_status,database_role from v$database;
open_mode switchover_status database_role
-------------------- -------------------- ----------------
mounted not allowed primary
sql> alter database open; //如果处于read-only状态,需要先shutdown再startup;
database altered.
查看下dg2状态:
sql> select open_mode,switchover_status,database_role from v$database;
open_mode switchover_status database_role
-------------------- -------------------- ----------------
read write not allowed primary
最后验证一下:
验证数据是否可以同步,按照以前的测试方法进行测试
在新的primary数据库上执行
sql> show parameter db_unique
name type value
------------------------------------ ----------- ------------------------------
db_unique_name string bdg2
sql> select max(sequence#) from v$archived_log;
max(sequence#)
--------------
143
sql> alter system switch logfile;
system altered.
切换成功
dg1:
sql> select open_mode,switchover_status,database_role from v$database;
open_mode switchover_status database_role
-------------------- -------------------- ----------------
read only with apply not allowed physical standby
sql> select max(sequence#) from v$archived_log;
max(sequence#)
--------------
153
dg2:
sql> select open_mode,switchover_status,database_role from v$database;
open_mode switchover_status database_role
-------------------- -------------------- ----------------
read write to standby primary
