2024年6月12日发(作者:)

Oracle 11G

数据库

DataGuard

灾备切换方案

、检查

1

、确定

MRP

进程在正常运行

备库执行如下

SQL

确定

MRP

进程正常:

SELECT PROCESS FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'MRP%';

主库执行如下

SQL

,确定备库是

“REAL TIME

八「「

1

丫”

状态

SQL> SELECT RECOVERY_MODE FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID=2;

RECOVERYMODE

MANAGED REAL TIME APPLY

如果备库没有启用

real-time apply

,则需要重新将备库启动至

real-time apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

2

、确定有足够的归档进程

在所有的主备库实例上查询参数

LOG_ARCHIVE_MAX_PROCESSES,

确定其值大于等于

4

, 但

不会太大

3

、确定目标备库的

REDO

clear

状态

虽然在发起

SWITCHOVER TO PRIMARY命令时,备库的REDO会自动转换为CLEAR

状态,但依然建议在SWITCHOVER前REDO为CLEAR状态。

确保正确设置了 LOG_FILE_NAME_CONVERT参数。

使用如下SQL在目标备库上查看REDO状态:

SQL> SELECT DISTINCT # FROM V$LOG L, V$LOGFILE LF

WHERE # = #

AND NOT IN (UNUSED’,

CLEARING’,’CLEARING_CURRENT’);

如果如上的查询有结果,

则需要停止备库的

REDOAPPLY

,并通过如下的

SQL

来对其进 行

CLEAR

SQL> ALTER DATABASE CLEAR LOGFILE GROUP ;

4

、确定没有大量的

GAP

主库执行如下

SQL

查看主库当前的

REDO SEQUENCE

SQL

SELECT THREAD#, SEQUENCE# FROM V$THREAD;

在备库上执行如下查询,确定查询出来的结果与上面的结果相比较只差

1-2

个数值

SELECT THREAD#, MAX(SEQUENCE#) FROM V$ARCHIVED_LOG

WHERE APPLIED = 'YES'

AND RESETLOGS_CHANGE# = (SELECT RESETLOGS_CHANGE#

FROM V$DATABASEINCARNATION WHERE STATUS = yCURRENT’)

GROUP BY THREAD#;

5

、确定主库以及目标备库的所有文件都为

ONLINE

主备库分别执行如下

SQL

,查看

tempfile

是否正常,如果备库上缺失文件则需要进行 处

理:

SELECT FILENAME, BYTES, TABLESPACE

FROM V$TEMPFILE TMP, V$TABLESPACE TS WHERE #=#;

在主备库分别执行如下

SQL

,查看数据文件状态,结果应该一致

SELECT NAME FROM V$DATAFILE WHERE STATUS=’OFFLINE’;

如果备库上有比主库多出的

OFFLINE

状态的数据文件,则将其

ONLINE

ALTER DATABASE DATAFILE &FILEID ONLINE;

、切换

1

、检查主库是否可切换至

STANDBY

主库执行如下

SQL

执行检查

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVERSTATUS

TO STANDBY

如上的

SQL

查询结果如果为

TO STANDBY

或者

SESSIONS ACTIVE

表示主库可切

换至

STANDBY

,如果不为这两个值,则说明

REDO

传输存在问题。

2

、停止主库第一个节点以外的所有实例(

RAC

最好使用

shutdown normal

或者

shutdown immediate

方式停止数据库。如果使用了

shutdown

abort

将其他节点进行了关闭,则需等待

RAC reconfig

完成,且第一个节点 将其余

REDO

常前滚或回滚

3

、切换主库至

STANDBY

角色

将主库切换至

STANDBY

ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY WITH SESSION SHUTDOWN;

如果遇到

ORA-16139报错,且V$DATABASE视图中DATABASE_ROLE字段的值 已

为“ PHYSICAL STANDBY”,则可继续(这种问题的出现其中一个可能是 数据

库有大量的数据文件)。

4

、确定

STANDBY

收至

1

EOR

在主库的

ALERT

日志中可以看到类似如下的信息:

Switchover: Primary controlfile converted to standby controlfile

succesfully.

Tue Mar 15 16:12:15 2011