`
cancer_sun
  • 浏览: 32076 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

物理Standby Switchover 角色转换

 
阅读更多

无损转换,通常是用户手动触发或者有计划的让其自动触发,比如硬件升级啦,软件升级啦之类的。通常它给你带来的工作量非常小并且都是可预计的。其执行分两个阶段,第一步,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


转换成功





<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics