无损转换,通常是用户手动触发或者有计划的让其自动触发,比如硬件升级啦,软件升级啦之类的。通常它给你带来的工作量非常小并且都是可预计的。其执行分两个阶段,第一步,primary数据库转换为standby角色,第二步,standby数据库(之一)转换为primary角色,primary和standby只是简单的角色互换,这也印证了我们前面关于角色转换是primary/standby互动的猜测。
--primary数据库操作
1.检查是否支持switchover操作
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO STANDBY
2.启动switchover,将primary转换为standby的角色
SQL> alter database commit to switchover to physical standby;
Database altered.
语句执行完毕后,primary数据库将会转换为standby数据库,并自动备份控制文件到trace。
--standby数据库操作
1.如果备库启动先关闭数据库,并重启到mount阶段
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
2.检查备库是否支持switchover操作
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
3.执行转换standby到primary角色语句
SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
ERROR at line 1:
ORA-00344: unable to re-create online log '/u01/oracle/oradata/orcl/redo01.log'
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 1
--这里报了一个错,是因为备库中在/u01/oracle/oradata下没有orcl的执行目录和权限,创建orcl目录并赋予对应权限后:
SQL> alter database commit to switchover to primary;
Database altered.
4.打开数据库
SQL> alter database open;
Database altered.
5.打开原primary数据库
SQL> alter database open;
Database altered.
6.将原primary数据库打开恢复模式
SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered.
--验证结果
新primary数据库
SQL> show parameter db_unique
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string dg
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
30
SQL> alter system switch logfile;
System altered.
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
31
新的standby数据库
SQL> show parameter db_unique
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string orcl
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
30
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
31
转换成功
```
```
2.备库在转换为主库时状态为:NOT ALLOWED--可能需要恢复或者退出恢复模式。
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
NOT ALLOWED
SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
ERROR at line 1:
ORA-16139: media recovery required
或者如下:--RECOVERY NEEDED
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
RECOVERY NEEDED
###############
SQL> alter database recover managed standby database disconnect from session;
Database altered.
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
SQL> alter database commit to switchover to primary;
Database altered.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29812844/viewspace-1988751/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29812844/viewspace-1988751/