登陆primary数据库,查询v$database视图的switchover_status列。
E:\ora10g>set oracle_sid=geo1pri
E:\ora10g>sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on 星期四 12月 13 09:41:29 2007
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
已连接。
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO STANDBY如果该列值为"TO STANDBY"则表示primary数据库支持转换为standby角色,否则的话你就需要重新检查一下Data Guard配置,比如看看LOG_ARCHIVE_DEST_n之类参数值是否正确有效等等。
2、 启动switchover --primary数据库操作
首先将primary转换为standby的角色,通过下列语句:
SQL> alter database commit to switchover to physical standby;
数据库已更改。语句执行完毕后,primary数据库将会转换为standby数据库,并自动备份控制文件到trace。
3、 重启动到mount --原primary数据库操作
SQL> shutdown immediate
ORA-01507: 未装载数据库
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1289484 bytes
Variable Size 104858356 bytes
Database Buffers 54525952 bytes
Redo Buffers 7098368 bytes
数据库装载完毕。4、 检查是否支持switchover操作 --待转换standby数据库操作
待原primary切换为standby角色之后,检查待转换的standby数据库switchover_status列,看看是否支持角色转换。
E:\ora10g>set oracle_sid=ge01standby
E:\ora10g>sqlplus " / as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on 星期四 12月 13 10:08:15 2007
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
已连接。
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
SQL>此时待转换standby数据库switchover_status列值应该是"TO_PRIMARY",如否则检查其初始化参数文件中的设置,提示一下,比着原primary数据库的初始化参数改改。
5、 转换角色到primary --待转换standby数据库操作
通过下列语句转换standby到primary角色:
SQL> alter database commit to switchover to primary;
数据库已更改。注意:待转换的物理standby可以处于mount模式或open read only模式,但不能处于open read write模式。
6、 完成转换,打开新的primary数据库
SQL> alter database open;
数据库已更改。注:如果数据库处于open read-only模式的话,需要先shutdown然后直接startup即可。
7、 验证一下
新的primary数据库
SQL> show parameter db_unique
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string jsspdg
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
67
SQL> alter system switch logfile;
系统已更改。
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
68新的standby数据库
SQL> show parameter db_unique
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string jssweb
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
68
转换成功。
在切换中发生一个错误,通过google查到错误的原因,切换到primary db是需要介质恢复
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
SWITCHOVER LATENT
SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
ERROR at line 1:
ORA-16139: media recovery required
SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
ERROR at line 1:
ORA-16139: media recovery required
SQL> alter database recover managed standby database disconnect from session;
Database altered.
SQL> alter database commit to switchover to primary;
Database altered.
SQL> alter database open;
Database altered.
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
49
SQL> alter system switch logfile;
System altered.
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
50