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

数据卫士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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle