您的位置:首页 > 数据库 > Oracle

switchover切换步骤及遇到问题

2015-04-21 15:16 441 查看
在打开数据库时出现ora-12541错误,检查后发现原因为没有启动监听!

SQL>LSNRCTL START  

启动后就恢复正常



在主备库连接之后,我发现其中主库中的临时表空间路径在使用rman恢复时没有更改,是个错误路径,所以我使用http://blog.chinaunix.net/uid-25557346-id-2998578.html
http://blog.chinaunix.net/uid-25492475-id-3438089.html
提供的方法进行更改,然后再使用

SQL>drop tablespace tempspacename including contents and datafiles;

删除错误路径。注意这里的tempspacename不是数据文件名,而是临时表空间名称。

随后使用SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;

但是状态显示为:resovable gap,如下图。意思是主库还有redo日志没有传输完!是因为对主库有结构更改需要手动传输更改至备库才可以。具体可以参考:
http://blog.csdn.net/aaron8219/article/details/10035547 http://blog.csdn.net/tianlesoftware/article/details/6256542


主要是需要执行命令:
SQL> ALTER SYSTEM FLUSH REDO TO db_unique_name;

注意按照上面命令执行会出现ora-00922错误,原来是在db_unique_name上需要加上单引号'',例如:
SQL>ALTER SYSTEM FLUSH REDO TO 'ORCL1234DG';



完成后在主备库上输入查询命令变可以显示可以转换,如下图: 





因为我的局域网不稳定,所以总是出现掉线现象,在备库切换主库时时出现了下图述问题:ora-16139。



上述问题可以解释如下:如果switchover_status为recovery needed或switchover
latent或not allowed,需要apply完所有归档日志才能切换。即:
SQl>alter database recover managed standby database disconnect from session;
当出现 'ORA-01153: 激活了不兼容的介质恢复 '时说明才全部apply完成。如下图:



如果是sessions active则带上with session shutdown选项。apply完所有日志后,即可切换为primary,然后打开数据库。
但是我是用如下方案解决的,可以理解为强制结束apply应用:
SQl>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
这样容易出现ORA-16171错误,如下图ora-16171。表示仍然有35-37序列standby日志没有apply,可执行执行apply语句,还是那句话出现ORA-01153: 激活了不兼容的介质恢复 '时说才说明全部apply完成。



可以看到上图还有另外错误(ORA-00604,ORA-06553,ORA-16139),这个错误在rman恢复过程中遇到过,即是32位与64位之间转换的错误,这里注意要将standby切换为主数据库后再重新编译,因为standby库是不支持修改的,编译完就不会报错了。

接着分别在主备库执行
SQL> alter database commit to switchover to primary;
SQL> alter database commit to switchover to standby;
顺利执行切换!

接着我们再执行主备切换 切换回来时又出现了问题,其中原主库切换没问题,原备库切换出现问题:
ORA-16416: 没有可行的 Physical Standby 切换目标

产看日志提示:
Heartbeat failed to connect to standby 'orcl1234pre_service_name'. Error is 16143.

经过查询(http://blog.csdn.net/tianlesoftware/article/details/8738882)
发现是这一语句:SQl>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
执行错误,中断了DG主备库的通信环境,这个finish是用来做Failover时用的。 在主库重新生成了一份standby controlfiles,然后copy到备库覆盖原来控制文件,在按正常模式启动就可以了。

启动时还有其他问题出现,例如:

ORA-10458: standby database requires recovery

ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件

ORA-01110: 数据文件 6: '/u01/app/ora11g/oradata/PRIDB2/datafile/tbs_test01.dbf'

提示找不到路径中的文件,可以看出其文件路径是错误的,可能是控制文件更新后出现问题,于是重新修改文件路径,但是又出现如下问题,ORA-01275。(http://blog.csdn.net/shenghuiping2001/article/details/7168551,http://blog.csdn.net/seulk_q/article/details/42092357)

解决方法只要关闭数据库,在开启状态下。将auto修改成manual:

SQL>alter system set standby_file_management=manual;  之后就可以修改了,但是出现这个问题的原因还不是很清楚。



其他问题一览:
下面ora-10456表示目前正在执行redo应用:



其他常用命令:
SQL> select database_role , open_mode from v$database;

SQL> select sequence#,applied fromv$archived_log order by sequence# desc;
SQL> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#)

 AS LAST from V$ARCHIVED_LOG;

alert日志路径如下(根据自己安装的路径自行调整):

E:\app\Administrator\diag\rdbms\orcl\orcl\alert

其他教程:http://blog.csdn.net/lichangzai/article/details/7979066
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle