您的位置:首页 > 其它

v$archive_gap dg dataguard 断档处理 scn恢复

2012-11-23 17:40 302 查看
一、如果主库还依然有归档文件:

SQL> select * FROM v$archive_gap;

如果有断档,则需要将主库相应得归档日志手动拷贝到备库。

然后在备库注册

ALTER DATABASE REGISTER physical LOGFILE '/home/oracle/flash_recovery_area/R10105/archivelog/2012_06_15/o1_mf_1_1_%u_.arc';

如果归档过多可以使用如下命令生成脚本

$ls -ltr |awk '{print "alter database register logfile \047/oracle/oradata/"$9"\047; "}' >regsql1.sql

二、主库归档文件也丢失了

基于scn在主库作增来备份,然后传到备库恢复。

1,查询备库现在scn

select current_scn from v$database;

2,主库创建基于scn的备份

RMAN> run{
BACKUP DEVICE TYPE DISK INCREMENTAL FROM SCN 1102063 DATABASE
FORMAT '/tmp/stb_bk/%U_for_stb.bk'
include current controlfile for standby ;
}

3,将备份文件传到备库目录,可与源目录不同 /tmp/stb_bk/。

4,扫描备份信息到控制文件

RMAN> CATALOG START WITH '/tmp/stb_bk/';

5,查看备库控制文件的路径

sql>show parameter controlfile;

6,备库关闭日志应用

alter database recover managed standby database cancel ;

7,在备库上执行恢复操作

RMAN> run{
restore standby controlfile to '/tmp/stb_controlfile01.ctl' ;
recover database noredo;
}
8,关闭备库数据库,cp命令将恢复出来的备份控制文件/tmp/stb_controlfile01.ctl覆盖掉原有的控制文件(注意需要覆盖的控制文件个数)。
9,启动备库
startup nomount;
alter database mount standby database;
alter database recover managed standby database using current logfile disconnect from session;

10,检查主备同步状况。

++++++++++++++++++++ http://www.2cto.com/database/201109/103545.html 在redo传输有发生中断的时候,redogap就会产生。

一般情况下,当redo 传输服务恢复后,oracle会自动检测gap并自行解决。修复缺口需要的时间,直接取决于gap的尺寸,和redo源的数据库和redo目的地数据库之间的网络状况。如果经常出现gap,则可以考虑如下的优化办法:

1、用compression方式传送,可以再log_archive_dest_n参数中,加入compression参数(11g新特性)。

2、启用日志传输的并行方式,在log_archive_dest_n参数中,设置max_connections参数,使之大于1。

在主库不可用的情况下,可能需要手工干预,修复redo gap,步骤如下:

对于物理备库:

执行如下的语句,确定备库是否存在redogap:

SQL> SELECT * FROM V$ARCHIVE_GAP;

假设结果如下:

THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#

----------- ------------- --------------

1 7 10

结果表明,线程1的7-10号redo,是一个缺口,在主库上执行如下查询,确定需要的归档日志:

SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND -

> DEST_ID=1 AND SEQUENCE# BETWEEN 7 AND 10;

NAME

--------------------------------------------------------------------------------

/primary/thread1_dest/arcr_1_7.arc

/primary/thread1_dest/arcr_1_8.arc

/primary/thread1_dest/arcr_1_9.arc

这里,假设主库的dest_1是本地归档路径。

将查到的这些文件,拷贝至备库的适当位置,并使之属主为oracle:oinstall,备库执行如下命令,将这些归档日志注册:

SQL> ALTER DATABASE REGISTER LOGFILE -

> '/physical_standby1/thread1_dest/arcr_1_7.arc';

SQL> ALTER DATABASE REGISTER LOGFILE -

> '/physical_standby1/thread1_dest/arcr_1_8.arc';

SQL> ALTER DATABASE REGISTER LOGFILE -

> '/physical_standby1/thread1_dest/arcr_1_9.arc';

执行这些语句后,重新执行语句:

SQL> SELECT * FROM V$ARCHIVE_GAP;

看是否有别地gap存在,如果有,重复上面的步骤,直到没有gap存在。

对于逻辑备库:

备库上做如下查询,确定是否有gap存在:

SQL> COLUMN FILE_NAME FORMAT a55

SQL> SELECT THREAD#, SEQUENCE#, FILE_NAME FROM DBA_LOGSTDBY_LOG L -

> WHERE NEXT_CHANGE# NOT IN -

> (SELECT FIRST_CHANGE# FROM DBA_LOGSTDBY_LOG WHERE L.THREAD# = THREAD#) -

> ORDER BY THREAD#, SEQUENCE#;

THREAD# SEQUENCE# FILE_NAME

---------- ---------- -----------------------------------------------

1 6 /disk1/oracle/dbs/log-1292880008_6.arc

1 10 /disk1/oracle/dbs/log-1292880008_10.arc

对于每个THREAD,如果有多余一条记录返回,则表明有gap存在。确实的归档日志为尾号7-9的文件。从主库上找到这些文件,拷贝至备库,并执行如下命令:

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE -

> '/disk1/oracle/dbs/log-1292880008_7.arc';

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE -

> '/disk1/oracle/dbs/log-1292880008_8.arc';

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE -

> '/disk1/oracle/dbs/log-1292880008_9.arc';

完成以后,重新执行第一步的查询,看是否有新的gap产生,直到没有gap,修复完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: