oracle 状态不一致,Oracle standby使用增量备份还原步骤以及文件状态不一致的原因及解决方案...

首先是使用incremental增量备份刷新standby步骤。此方法在archive已经被删除时经常会用到。

1. 获得当前standby的最小scn

SQL> select to_char(CURRENT_SCN) FROM V$DATABASE;

TO_CHAR(CURRENT_SCN)

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

9266396404266

SQL> select to_char(min(checkpoint_change#)) from v$datafile_header ;

TO_CHAR(MIN(CHECKPOINT_CHANGE#))

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

9266396404267

选择使用最小的SCN在主库上做一个增量备份。如果文件头的scn与v$database中的scn差别非常大,有可能是由于部分数据文件出现问题,比如曾出现过如下操作:如果增量备份集不包含某一个数据文件N,但是恢复时使用了restore datafile N,此时N文件将被重写为最开始创建时的SCN。针对此类问题,可以单独备份datafile而不是使用全库的增量备份去解决。

run{

allocate channel prmy1 type disk maxpiecesize=16g;

allocate channel prmy2 type disk maxpiecesize=16g;

allocate channel prmy3 type disk maxpiecesize=16g;

allocate channel prmy4 type disk maxpiecesize=16g;

backup as compressed backupset incremental from scn 9266396404260 database format '/oradump/db_incre%T_%d_%p_%s.dmp';

RELEASE CHANNEL prmy1;

RELEASE CHANNEL prmy2;

RELEASE CHANNEL prmy3;

RELEASE CHANNEL prmy4;

}

2. 将备份集传输到standby并在控制文件中注册备份集

catalog backuppiece '/rman/db_incre20181210_orcl_1_66032.dmp';

catalog backuppiece '/rman/db_incre20181210_orcl_1_66033.dmp';

catalog backuppiece '/rman/db_incre20181210_orcl_1_66034.dmp';

catalog backuppiece '/rman/db_incre20181210_orcl_1_66035.dmp';

3. 使用增量备份restore备库

run{

allocate channel prmy1 type disk;

...

allocate channel prmy8 type disk;

RECOVER DATABASE NOREDO;

RELEASE CHANNEL prmy1;

....

RELEASE CHANNEL prmy8;

}

如果相差时间不大,或者中间不曾添加过数据文件,此时直接

RECOVER MANAGED STANDBY DATABASE DISCONNECT;

就可以启动数据库同步了。否则还需要更新新的控制文件。此时启动standby同步时仍会提示缺少旧的archivelog。可以使用查询查看是否添加过文件。

SELECT FILE#, NAME FROM V$DATAFILE WHERE CREATION_CHANGE# > 9266396404266;

4. 更新控制文件

a. 主库备份控制文件

BACKUP CURRENT CONTROLFILEFOR STANDBYFORMAT '/oradump/control_bak.bck';

b. copy到备库并且restore

spool datafile_names_step6.txt

set lines 200

col name format a60

select file#, name from v$datafile order by file# ;

spool off

shutdown immediate ;

startup nomount;

restorestandby controlfilefrom '/arch/rman/control_bak.bck';

alter database mount;

c. 备库上注册数据文件

CATALOG START WITH '/DB_DATA/DB_DATA/DATAFILE/';

SWITCH DATABASE TO COPY;

正常情况下standby就可以正常恢复了

RECOVER MANAGED STANDBY DATABASE DISCONNECT;

问题:

启动recover后alert出现大量错误:

Errors in file u01/app/oracle/diag/rdbms/DB_DATA/DB_DATA/trace/DB_DATA_dbw0_68939.trc:

ORA-01157: cannot identify/lock data file 50 - see DBWR trace file

ORA-01110: data file 50: '/DB_DATA/DB_DATA/datafile/int_data.528.993504119'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

通过对比发现原controfile中50的路径为:

/DB_DATA/DB_DATA/datafile/DB_DATA/datafile/o1_mf_int_data_g00pd5tk_.dbf

同时所有报错文件都在/DB_DATA/DB_DATA/datafile/DB_DATA/datafile路径下。

原因:

db_create_file_dest=/DB_DATA/DB_DATA/datafile/

db_file_name_convert='+DB_DATA/orcl/datafile/,/DB_DATA/DB_DATA/datafile/,+BUSDB_DATA/orcl/tempfile/,/DB_DATA/DB_DATA/datafile/'

首先ASM不会出现这个问题。此问题只出现在使用文件系统的dataguard中。如果同时设置了db_create_file_dest 和 db_file_name_convert参数,并且主备库文件路径不一致时就会发生。当standby可以正常工作时,经过archivelog的恢复,创建的新文件将使用db_create_file_dest参数值,OMF将在此文件夹下创建SID/datafile/new_file_name文件。而在使用ramn进行restore中,只有db_file_name_convert参数起作用。此时即便单独catalog数据库也是无法识别的。

RMAN> CATALOG START WITH '/DB_DATA/DB_DATA/datafile/DB_DATA/datafile/';

searching for all files that match the pattern DB_DATA/DB_DATA/datafile/DB_DATA/datafile/List of Files Unknown to the Database=====================================

File Name: DB_DATA/DB_DATA/datafile/DB_DATA/datafile/o1_mf_int_data_g00pd5tk_.dbf

解决办法:

mv ./datafile/DB_DATA/datafile/o1_mf_int_data_g00pd5tk_.dbf ./

run{

set newname for datafile 49 to '/DB_DATA/DB_DATA/datafile/app_legal_tbs.845.993503729';

restore datafile 49;

switch datafile 49;

}

然后重启standby recover apply就可以了。为了避免以后出现同样的问题,此时应该将db_create_file_dest置为空。

alter system set db_create_file_dest='' scope=both;

注:

如果standby可以正常运行,而检查发现相同的问题,则不应该使用相同的rman解决方案。原因:

1. 因为rman使用的是restore命令基于备份集,如果控制文件中没有相关的备份信息或者找不到备份集,此时restore datafile不会报错,而是在指定目录下生成一个空DB文件,此文件的scn为主库当时创建文件时的SCN,通过v$datafile_header可以看到相关信息。

2. 因为standby正常运行,所以实际上此数据文件是和主库保持一致的,此时只需要控制文件中rename即可。

解决方法:

RECOVER MANAGED STANDBY DATABASE cancel;

mv ./datafile/DB_DATA/datafile/o1_mf_int_data_g00pd5tk_.dbf ./

alter database datafile 'old_path' rename to 'new_path';

RECOVER MANAGED STANDBY DATABASE DISCONNECT;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值