DG之主库、备库切换 一.开库与关库顺序 开库顺序 先启备库,再启主库(启动监听、打开告警日志) 关库顺序 先关主库,再关备库 二.主备库切换 1、操作过程一览 步骤1:启动备库、监听、告警; 步骤2:启动主库、监听、告警; 步骤3:主库(bj)查询信息 SQ
DG之主库、备库切换
开库顺序 |
先启备库,再启主库(启动监听、打开告警日志) |
关库顺序 |
先关主库,再关备库 |
SQL>selectname,dbid,database_role,protection_mode from v$database;
步骤4:备库(sh)上做recover
SQL>recovermanaged standby database disconnect from session;
SQL>insert into scott.emp1 select * from scott.emp;
报错
虽然备库处于open状态,但它是一个read-only状态。
SQL>selectmax(sequence#) from v$archived_log where name is not null;
或SQL>selectmax(sequence#) from v$archived_log;
举例:
主库:
备库:
上图表明已经归档的最大序列号均为34,说明日志是同步的,可以进行主备库切换。
SQL>selectname,database_role,protection_mode,switchover_status from v$database;
switchover_status显示“TO STANDBY”表示允许做切换。
步骤8:备库(sh)下检查是否可以切换
SQL>selectname,database_role,protection_mode,switchover_status from v$database;
说明:备库是不允许主动去切成主库的,NOT ALLOWED状态说明正常。
SQL>select username,sid from v$session where username is notnull;
查看是否仍有用户使用数据库,若仍有人使用,是不允许切换的,切换前要通知确保无用户使用。
若没有会话,将主库(bj)变为物理备库(sh)
SQL> ALTER DATABASECOMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
若有会话的话,关闭会话,将主库(bj)变为物理备库(sh)
SQL> alter database commit to switchover to physical standby withsession shutdown;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> selectswitchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
注:在这个时候,两个数据库都应该处于备库状态。
SQL> SELECTSWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO_PRIMARY ——可以转换为主库,说明是备库状态
SQL> ALTER DATABASECOMMIT TO SWITCHOVER TO PRIMARY(WITHSESSION SHUTDOWN);
若物理备库(bj)在最近一次启动时不是处于只读模式 opened in read-only mode,直接将数据库打开,然后下一步。
SQL> select status fromv$instance;
STATUS
------------
MOUNTED
SQL> ALTER DATABASE OPEN;
SQL> select switchover_statusfrom v$database;
SWITCHOVER_STATUS
--------------------
TO STANDBY
若物理备库(bj)在最近一次启动时是只读模式,则先将数据库正常关闭再起库。
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
SQL> ALTER DATABASERECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
SQL> ALTER SYSTEM SWITCHLOGFILE;
SQL> /
SQL> select max(sequence#)from v$archived_log;
MAX(SEQUENCE#)
--------------
56
SQL> col name for a50;
SQL> select NAME ,SEQUENCE# from v$archived_log; 查看归档日志
SQL> select max(sequence#)from v$archived_log;
MAX(SEQUENCE#)
--------------
56
SQL> col name for a50;
SQL> select NAME ,SEQUENCE# from v$archived_log; 查看归档日志
时 间 轴 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
|
主库 |
备库 |
查询能否切换(应该显示允许) |
|
|
|
备库查询能否切换(应该显示不允许) |
|
切换为物理备库 |
|
|
切换到mount状态 |
|
|
|
查看备库转换状态 |
|
|
转换为主库 |
|
|
切换到mount状态 |
|
启动到open |
|
|
|
|
|
|
启动到open状态 |
|
开启日志应用 |
|
|
|
切换日志 |
|
|
查看归档序列号 |
|
查看归档序列号 |
|
|
查询状态:备库 |
查询状态:主库 |
***********************************************声明************************************************
原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/huangyanlong)。
表述有错误之处,请您留言,不胜感激。
提醒:点击目录,更有助于您的查看。
*****************************************************************************************************