转载一下关于这个问题麦老师的一个实验:http://blog.itpub.net/26736162/viewspace-1780863/
也可以参考上面这个文章
背景:一台长时间没用过的dg,是单机的。 由于以前做过网络变迁,没有及时配置,导致归档缺失很多。
参考方案:https://blog.csdn.net/aini393994948/article/details/80143214
下面是解决方案,记下来,以便遗忘。
1.在备库关闭日志应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
2.确定最小scn号
dg:select file#,checkpoint_change# from v$datafile order by checkpoint_change#;
当时我查出来是 1.0879E+13 这个格式,需要把它写成数字 10879000000000
3.创建增量备份
backup format '/home/oracle/backup/sdb_incre_%U.bkp' incremental from scn 917051 database;
backup format '/home/oracle/backup/sdb_%U.ctl' current controlfile for standby;
这里找一个空闲的目录即可。当然了,要有权限。
4.把以上备份的文件传输至备库。
5.手动注册备份文件
rman target /
catalog start with '/home/oracle/backup';
6.恢复备库控制文件。
rman target /
RMAN> startup force nomount; ----这一步比较关键,我当时没看清楚,第一遍没执行这个,第二遍sqlplus 进去执行的这个,好像也行。
RMAN> restore standby controlfile from '/home/oracle/backup/sdb_09stjtsc_1_1.ctl';
7.恢复数据库
RMAN> alter database mount;
RMAN> recover database noredo; -----recover database noredo 这一步也很关键,noredo。
8.打开数据库,并开启日志实时应用
sqlplu / as sysdba;
alter database open;
alter database recover managed standby database using current logfile disconnect;
9.验证当前scn号是否已经改变。
select file#,checkpoint_change# from v$datafile order by checkpoint_change#;
以上就是处理的全部过程,因为是客户的环境,网络不通,执行记录没有贴出来。
============================================================================================================================
以下为一些扩展:
1.--监控当前归档应用情况
select process,CLIENT_PROCESS,status,thread#,sequence# from v$managed_standby;
处理完成之后查看当前归档应用情况,跟主库对比,主库切换归档,dg会不会应用等。
2.关于确定最小scn号
2.1.select file#,checkpoint_change# from v$datafile order by checkpoint_change#;
2.2.select min(fhscn) from x$kcvfh;
2.3.三个中的最小值
SELECT CURRENT_SCN FROM V$DATABASE;
SELECT MIN(FIRST_NONLOGGED_SCN) FROM V$DATAFILE WHERE FIRST_NONLOGGED_SCN>0;
SELECT FILE#, FIRST_NONLOGGED_SCN FROM V$DATAFILE WHERE FIRST_NONLOGGED_SCN > 0;
2.4.查看当前备库scn
select to_char(current_scn) from v$database;
3.自己处理过程中的失误.
3.1.没有查询数据库的数据量大小.
3.2.没有在做之前备份spfile.
4.改进后的步骤
4.1.备份备库spfile文件
SQL> create pfile='/home/ora/pfileRdg.ora' from spfile;
4.2.查询主库数据量大小.
select sum(bytes)/1024/1024/1024 G from dba_segments;
4.3.查询当前备库scn
select min(fhscn) from x$kcvfh;
4.4.查看一些基本信息
select * from v$archive_gap;
4.5.主库执行增量备份
4.5.1.第一种方式
backup format '/home/oracle/backup/sdb_incre_%U.bkp' incremental from scn 917051 database;
backup format '/home/oracle/backup/sdb_%U.ctl' current controlfile for standby;
4.5.2.第二种方式
RMAN> run
2> {
3> allocate channel d1 type disk;
4> allocate channel d2 type disk;
5> allocate channel d3 type disk;
6> backup as compressed backupset incremental from SCN 19652214434 database format '/home/ora/full_db_%d_%T_%s.bak' include current controlfile for standby
filesperset=5 tag 'FOR STANDBY';
7> release channel d1;
8> release channel d2;
9> release channel d3;
10> }
4.6.传输到备库
4.7.手动注册备库文件记录入备库
catalog start with '/home/oracle/backup';
4.8.恢复备库控制文件
4.8.1.对应上面第一种备份方式
restore standby controlfile from '/home/oracle/backup/sdb_09stjtsc_1_1.ctl';
4.8.2对应上面第二种备份方式
RMAN> run
2> {
3> allocate channel d1 type disk;
4> allocate channel d2 type disk;
5> allocate channel d3 type disk;
6> restore standby controlfile to '/home/ora/control01.ctl';
7> recover database noredo;
8> release channel d1;
9> release channel d2;
10> release channel d3;
11> }
关闭备库,将恢复出来的control01.ctl覆盖备库控制文件
[ora@jzhDG ~]$ cp control01.ctl /oradata/JZH/standby.ctl
4.9.启动数据库到mount状态
alter database mount;
select * from v$archive_gap;
4.10.恢复数据库
recover database noredo; 用run块的话run块里面已经包含了这条语句。(就是4.8.2对应的恢复语句)
4.11.打开数据库并开启日志应用。
alter database open read only;或者不打开也行
recover managed standby database disconnect from session;
4.12.最后验证当前应用情况
select file#,checkpoint_change# from v$datafile order by checkpoint_change#;