主从切换
分为2种切换:
Switchover:
无损切换,通常是用户手动触发或者有计划的让其自动触发,不会导致数据丢失
Failover:
不可预知的原因导致Primary数据库故障并且短期内不能恢复就需要failover,可能会导
致数据的丢失.
在执行failover之前,尽可能将原Primary数据库的可用redo都复制到standby数据库.
如果要转换角色的standby处于maximum protection模式,需要你首先将其切换到
Maximum Performance
模式,操作如下:
SQL> ALTER DATABASE SET STANDBY DATABASE MAXIMUM
PERFORMANCE;
Switchover
切换步骤
在primary数据库检查是否支持switchover操作
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
-----------------
TO STANDBY
如果该列值为”TO STANDBY”则表示primary数据库支持转换为STANDBY角色
注意:如果是第一次做Switchover的话,这里应该是SESSIONS ACTIVE状态,不用理会他,
继续下面的操作.
在primary数据库启动switchover
先把primary转换为standby的角色
SQL> alter database commit to switchover to physical standby;
在primary数据库重启动到mount
SQL> shutdown immediate;
SQL> startup mount;
在STANDBY数据库上检查是否支持switchover操作
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
-----------------
TO PRIMARY
值为”TO PRIMARY”,说明支持转换.
注意:第一次转换这里可能为 not allow,不用理会,继续下面的操作.
在STANDBY数据库转换角色到Primary
SQL> alter database commit to switchover to primary;
SQL> alter database open;
//
如果处于read-only状态,需要先
shutdown再startup;
验证数据是否可以同步,按照以前的测试方法进行测试
在新的primary数据库上执行
SQL> insert into wiliiwin values(4,’wiliansi’);
然后在新的STANDBY数据库上执行
SQL> select * from wiliiwin;
Failover
切换
检查归档文件是否连续
在STANDBY数据库上查询V$ARCHIVE_GAP视图,看归档文件是否连续
SQL> SELECT THREAD#,LOW_SEQUENCE#,HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
如果返回的有记录,按照列出的记录号复制对应的归档文件到待转换的STANDBY服务器.
必须确保所有已生成的归档文件均已存在于STANDBY服务器,不然可能会数据不一致造成
转换时的报错.文件复制之后,将其加入数据字典
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE ‘filespecl
‘;
检查归档文件是否完整
SQL> select distinct thread#,max(sequence#)over(partition by thread#) a from
v$archived_log;
取得当前数据库各线程已归档文件最大序列,如果primary和standby最大序号不相同,
必须将多出的序号对应到归档文件复制到待转换的STANDBY服务器.要是primary完全不
可用了,此时可能会丢失一些数据.
启动failover
SQL> alter database recover managed standby database finish force;
切换物理STANDBY角色到primary
SQL> alter database commit to switchover to primar;
启动新的primary数据库
SQL> alter database open;
关于测试大家自己试验下,可以查询、插入、删除等操作应该就说明切换正常了.