数据卫士DG
2015-11-02 21:19
471 查看
实验中的问题解决:(ORACLE11g)
SWITCHOVER主库出现LOG SWITCH GAP和RESOLVABLE GAP解决一例
主备库切换时,
主库:
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ WRITE PRIMARY TO STANDBY
备库:
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ ONLY WITH APPLY PHYSICAL STANDBY NOT ALLOWED
主库直接进行swichover:
SQL> alter database commit to switchover to physical standby;
alter database commit to switchover to physical standby
*
ERROR at line 1:
ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ WRITE PRIMARY LOG SWITCH GAP
解决:
提示有日志切换GAP,于是直接重启主库:
SQL> startup force
ORACLE instance started.
Total System Global Area 413372416 bytes
Fixed Size 2228904 bytes
Variable Size 322964824 bytes
Database Buffers 83886080 bytes
Redo Buffers 4292608 bytes
Database mounted.
Database opened.
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ WRITE PRIMARY RESOLVABLE GAP
状态由LOG SWITCH GAP变成了RESOLVABLE GAP,从字面理解是主备库之间存在GAP,于是执行:
SQL> ALTER SYSTEM FLUSH REDO TO ora11dg2;
SQL> select open_mode,database_role,switchover_status from v$database;
4000
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ WRITE PRIMARY TO STANDBY
把主库REDO FLUSH到备库以后,以上状态消失,又重新回到之前的TO STANDBY状态了,可以重新进行SWITCHOVER了。
如果主库状态不是TO STANDBY,而是SESSION ACTIVE,就要加上WITH SESSION SHUTDOWN,否则不能切换成功,除此以外的其他状态,是不能直接进行转换的。备库通常的状态是NOT ALLOWED,当主库做了切换以后,会变成TO PRIMARY,所以通常是现在主库做ROLE TRANSITION,然后再在备库做。
SWITCHOVER 示例:
原主库:
SQL> alter database commit to switchover to physical standby;
SQL> select open_mode,database_role,switchover_status from v$database;
原备库:
SQL> select open_mode,database_role,switchover_status from v$database;
SQL> alter database commit to switchover to primary;
SQL> alter database open;
SQL> select open_mode,database_role,switchover_status from v$database;
原主库(新备库):
SQL> alter database recover managed standby database using current logfile disconnect from session;
SQL> select open_mode,database_role,switchover_status from v$database;
此时刚转换好的新备库SWITCHOVER状态是RECOVERY NEEDED,这是正常的,主库切几次日志以后就会变成NOT ALLOWED状态了,另外这个时候由于是REDO APPLY模式,虽然是11g,但也是无法直接OPEN的,如果要OPEN,必须先停止REDO APPLY:
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-10456: cannot open standby database; media recovery session may be in progress
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database open;
Database altered.
由于11g的ACTIVE DG功能(需要LISENCE,否则属于非法使用),所以即便在OPEN状态下,依然能够REDO APPLY:
SQL> alter database recover managed standby database disconnect;
Database altered.
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ ONLY WITH APPLY PHYSICAL STANDBY NOT ALLOWED
至此,整个SWITCHOVER就做完了,SWITCHOVER是不会丢失数据的(不同于FAILOVER),如果FAILOVER能做到没有GAP,也可以不丢数据,并且正常使用SWITCHOVER切换。
备库出现问题:(备库出现ORA-16139: 需要介质恢复)
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
-------------------------------- ------------------------
testdg OPEN
SQL> select database_role,open_mode,switchover_status from v$database;
DATABASE_ROLE OPEN_MODE
-------------------------------- ----------------------------------------
SWITCHOVER_STATUS
----------------------------------------
PHYSICAL STANDBY READ ONLY
SWITCHOVER PENDING
SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
第 1 行出现错误:
ORA-16139: 需要介质恢复
SQL> recover datafile 1;
ORA-00283: 恢复会话因错误而取消
ORA-10459: cannot start media recovery on standby database; conflicting state
detected
SQL> alter database commit to switchover to primary with session shutdown;
alter database commit to switchover to primary with session shutdown
*
第 1 行出现错误:
ORA-16139: 需要介质恢复
SQL> alter database recover managed standby database finish force;
数据库已更改。
SQL> select database_role,open_mode,switchover_status from v$database;
DATABASE_ROLE OPEN_MODE
-------------------------------- ----------------------------------------
SWITCHOVER_STATUS
----------------------------------------
PHYSICAL STANDBY READ ONLY
TO PRIMARY
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
-------------------------------- ------------------------
testdg OPEN
SQL> alter database commit to switchover to primary ;
数据库已更改。
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
-------------------------------- ------------------------
testdg MOUNTED
SQL> select database_role,open_mode,switchover_status from v$database;
DATABASE_ROLE OPEN_MODE
-------------------------------- ----------------------------------------
SWITCHOVER_STATUS
----------------------------------------
PRIMARY MOUNTED
NOT ALLOWED
遇到的小问题:
SQL> shutdown immediate
ORA-01092: ORACLE instance terminated. Disconnection forced
SQL> select instance_name,status from v$instance;
ERROR:
ORA-03114: 未连接到 ORACLE
SQL> startup
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
SQL> startup force
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
SQL> shutdown abort
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
[oracle@ocp admin]$ . oraenv
ORACLE_SID = [test] ?
The Oracle base remains unchanged with value /u01/app/oracle
[oracle@ocp admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on 星期一 11月 2 23:18:21 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 396668928 bytes
Fixed Size 2228744 bytes
Variable Size 155192824 bytes
Database Buffers 234881024 bytes
Redo Buffers 4366336 bytes
数据库装载完毕。
数据库已经打开。
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
-------------------------------- ------------------------
test OPEN
SQL> select database_role,open_mode,switchover_status from v$database;
DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
---------------- ----------------- ----------------------------------------
PHYSICAL STANDBY READ ONLY TO PRIMARY
SWITCHOVER主库出现LOG SWITCH GAP和RESOLVABLE GAP解决一例
主备库切换时,
主库:
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ WRITE PRIMARY TO STANDBY
备库:
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ ONLY WITH APPLY PHYSICAL STANDBY NOT ALLOWED
主库直接进行swichover:
SQL> alter database commit to switchover to physical standby;
alter database commit to switchover to physical standby
*
ERROR at line 1:
ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ WRITE PRIMARY LOG SWITCH GAP
解决:
提示有日志切换GAP,于是直接重启主库:
SQL> startup force
ORACLE instance started.
Total System Global Area 413372416 bytes
Fixed Size 2228904 bytes
Variable Size 322964824 bytes
Database Buffers 83886080 bytes
Redo Buffers 4292608 bytes
Database mounted.
Database opened.
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ WRITE PRIMARY RESOLVABLE GAP
状态由LOG SWITCH GAP变成了RESOLVABLE GAP,从字面理解是主备库之间存在GAP,于是执行:
SQL> ALTER SYSTEM FLUSH REDO TO ora11dg2;
SQL> select open_mode,database_role,switchover_status from v$database;
4000
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ WRITE PRIMARY TO STANDBY
把主库REDO FLUSH到备库以后,以上状态消失,又重新回到之前的TO STANDBY状态了,可以重新进行SWITCHOVER了。
如果主库状态不是TO STANDBY,而是SESSION ACTIVE,就要加上WITH SESSION SHUTDOWN,否则不能切换成功,除此以外的其他状态,是不能直接进行转换的。备库通常的状态是NOT ALLOWED,当主库做了切换以后,会变成TO PRIMARY,所以通常是现在主库做ROLE TRANSITION,然后再在备库做。
SWITCHOVER 示例:
原主库:
SQL> alter database commit to switchover to physical standby;
SQL> select open_mode,database_role,switchover_status from v$database;
原备库:
SQL> select open_mode,database_role,switchover_status from v$database;
SQL> alter database commit to switchover to primary;
SQL> alter database open;
SQL> select open_mode,database_role,switchover_status from v$database;
原主库(新备库):
SQL> alter database recover managed standby database using current logfile disconnect from session;
SQL> select open_mode,database_role,switchover_status from v$database;
此时刚转换好的新备库SWITCHOVER状态是RECOVERY NEEDED,这是正常的,主库切几次日志以后就会变成NOT ALLOWED状态了,另外这个时候由于是REDO APPLY模式,虽然是11g,但也是无法直接OPEN的,如果要OPEN,必须先停止REDO APPLY:
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-10456: cannot open standby database; media recovery session may be in progress
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database open;
Database altered.
由于11g的ACTIVE DG功能(需要LISENCE,否则属于非法使用),所以即便在OPEN状态下,依然能够REDO APPLY:
SQL> alter database recover managed standby database disconnect;
Database altered.
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ ONLY WITH APPLY PHYSICAL STANDBY NOT ALLOWED
至此,整个SWITCHOVER就做完了,SWITCHOVER是不会丢失数据的(不同于FAILOVER),如果FAILOVER能做到没有GAP,也可以不丢数据,并且正常使用SWITCHOVER切换。
备库出现问题:(备库出现ORA-16139: 需要介质恢复)
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
-------------------------------- ------------------------
testdg OPEN
SQL> select database_role,open_mode,switchover_status from v$database;
DATABASE_ROLE OPEN_MODE
-------------------------------- ----------------------------------------
SWITCHOVER_STATUS
----------------------------------------
PHYSICAL STANDBY READ ONLY
SWITCHOVER PENDING
SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
第 1 行出现错误:
ORA-16139: 需要介质恢复
SQL> recover datafile 1;
ORA-00283: 恢复会话因错误而取消
ORA-10459: cannot start media recovery on standby database; conflicting state
detected
SQL> alter database commit to switchover to primary with session shutdown;
alter database commit to switchover to primary with session shutdown
*
第 1 行出现错误:
ORA-16139: 需要介质恢复
SQL> alter database recover managed standby database finish force;
数据库已更改。
SQL> select database_role,open_mode,switchover_status from v$database;
DATABASE_ROLE OPEN_MODE
-------------------------------- ----------------------------------------
SWITCHOVER_STATUS
----------------------------------------
PHYSICAL STANDBY READ ONLY
TO PRIMARY
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
-------------------------------- ------------------------
testdg OPEN
SQL> alter database commit to switchover to primary ;
数据库已更改。
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
-------------------------------- ------------------------
testdg MOUNTED
SQL> select database_role,open_mode,switchover_status from v$database;
DATABASE_ROLE OPEN_MODE
-------------------------------- ----------------------------------------
SWITCHOVER_STATUS
----------------------------------------
PRIMARY MOUNTED
NOT ALLOWED
遇到的小问题:
SQL> shutdown immediate
ORA-01092: ORACLE instance terminated. Disconnection forced
SQL> select instance_name,status from v$instance;
ERROR:
ORA-03114: 未连接到 ORACLE
SQL> startup
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
SQL> startup force
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
SQL> shutdown abort
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
[oracle@ocp admin]$ . oraenv
ORACLE_SID = [test] ?
The Oracle base remains unchanged with value /u01/app/oracle
[oracle@ocp admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on 星期一 11月 2 23:18:21 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 396668928 bytes
Fixed Size 2228744 bytes
Variable Size 155192824 bytes
Database Buffers 234881024 bytes
Redo Buffers 4366336 bytes
数据库装载完毕。
数据库已经打开。
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
-------------------------------- ------------------------
test OPEN
SQL> select database_role,open_mode,switchover_status from v$database;
DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
---------------- ----------------- ----------------------------------------
PHYSICAL STANDBY READ ONLY TO PRIMARY
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ORACLE LATERAL-SQL-INJECTION 个人见解