主从切换

分为2种切换:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

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状态,需要先
                               shutdownstartup;
 
 验证数据是否可以同步,按照以前的测试方法进行测试

 

在新的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;

 

  取得当前数据库各线程已归档文件最大序列,如果primarystandby最大序号不相同, 必须将多出的序号对应到归档文件复制到待转换的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;
 
  关于测试大家自己试验下,可以查询、插入、删除等操作应该就说明切换正常了.