昨天去某客户那里做巡检,顺便看一下上次搭建的RAC-DG环境是否正常,上次的DG是8月20日运行的,而DG备库从8月31日之后实例就没有开启过,后来询问后才得知,原来那天断过一次电,后来重启了机器。直到今天我过去了,才把实例启动起来。也就是说,从8月31日到今天快1个月的时间,备库一直处于未用状态。
接着查看备库归档,显然已经缺失了很多了,tnread1 最后一个日志为1661,tnread2 最后一个日志为1324,而此时主库中还保留的最早的日志是9月8日的,thread 1 最早为2055,thread 2 最早为1555。主备之间归档足足差了有好几百个(正常,都快一个月没开实例了)
ASMCMD> ls
2014_09_08/
2014_09_09/
2014_09_10/
2014_09_11/
2014_09_12/
2014_09_13/
2014_09_14/
2014_09_15/
2014_09_16/
2014_09_17/
2014_09_18/
2014_09_19/
2014_09_20/
2014_09_21/
2014_09_22/
2014_09_23/
2014_09_24/
2014_09_25/
ASMCMD> cd 2014_09_08
ASMCMD> ls
thread_1_seq_2055.500.857723297
thread_1_seq_2056.494.857725223
thread_1_seq_2057.493.857728031
thread_1_seq_2058.490.857729849
(略)……
thread_2_seq_1555.502.857723297
thread_2_seq_1556.499.857723301
thread_2_seq_1557.497.857723305
thread_2_seq_1558.496.857725225
(略)……
ASMCMD>
尽管在脚本中配置了备份完归档后用delete input来删除归档,以减小归档占用的磁盘空间,可以在RMAN脚本的备份日志中看到,从8月31日起,陆续有报RMAN-08137,提示由于备库还未获得归档,导致无法删除:
归档日志文件名=+DATA/sis/archivelog/2014_08_31/thread_1_seq_1661.1208.857041081 RECID=3930 STAMP=857041081
RMAN-08137: 警告: 归档日志未删除, 因为备用或上游捕获进程需要它
归档日志文件名=+DATA/sis/archivelog/2014_08_31/thread_1_seq_1662.1212.857042297 线程=1 序列=1662
RMAN-08137: 警告: 归档日志未删除, 因为备用或上游捕获进程需要它
归档日志文件名=+DATA/sis/archivelog/2014_09_01/thread_2_seq_1325.1204.857122335 线程=2 序列=1325
RMAN-08137: 警告: 归档日志未删除, 因为备用或上游捕获进程需要它
但是,由于FRA磁盘空间是有限的,使用到一定的百分比(有参数可调整),Oracle会自动清空其中的内容,以释放空间,因此在FRA中的归档日志大约保留了18天,从9月8日到9月25日,而8月31日的归档肯定是没有的了,最近的备份集只有到9月15日的。
于是决定重新搭建一下DG,关闭备库实例,删除全部数据库文件(数据文件、控制文件、日志文件),只保留密码文件、参数文件、tnsnames.ora、listener.ora即可,重建很方便,用11g的duplicate重新同步一下就可以了,命令如下:
rman target / auxiliary sys/oracle@sisdg
RMAN> run{
allocate channel c1 device type disk;
allocate auxiliary channel c2 device type disk;
set newname for tempfile 1 to 'D:\app\administrator\oradata\sis\temp.269.852648395';
duplicate target database for standby from active database dorecover;
release channel c1;
release channel c2;
}
执行完以上操作后,备库与主库的归档就同步了
主库:
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 2617
下一个存档日志序列 2619
当前日志序列 2619
SQL> select thread#,max(sequence#) from v$archived_log group by thread#;
THREAD# MAX(SEQUENCE#)
---------- --------------
1 2619
2 2556
备库:
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 D:\archivelog
最早的联机日志序列 0
下一个存档日志序列 0
当前日志序列 0
SQL> select thread#,max(sequence#) from v$archived_log group by thread#;
THREAD# MAX(SEQUENCE#)
---------- --------------
1 2619
2 2556
主备库查看了一下v$archive_dest_status,两边都是的status列都是valid的,因此开启备库的redo apply,看到日志也开始已经应用了
SQL> select thread#,sequence#,applied from v$archived_log;
THREAD# SEQUENCE# APPLIED
---------- ---------- ------------------
1 2617 YES
1 2618 YES
2 2556 YES
1 2619 NO
1 2620 NO
由于采用的是LGWR ASYNC模式传递日志,再重新创建一次standby redo logfile,主库每个thread有3组日志,所以备库创建了7组日志
此外,备库的alertlog里还报了个错误,因为是从主库duplicate过来的,RMAN的配置信息还保留着主库的一些参数:
Starting control autobackup
Got error: 19624
******************** WARNING ***************************
The errors during Server autobackup are not fatal, as it
is attempted after sucessful completion of the command.
However, it is recomended to take an RMAN control file
backup as soon as possible because the Autobackup failed
with the following error:
ORA-19624: operation failed, retry possible
ORA-19504: failed to create file "C:\ORABACKUP\BACKUPSETS\SIS1-C-3160648191-20140925-02.CTL"
ORA-27040: file create error, unable to create file
OSD-04002: 无法打开文件
O/S-Error: (OS 3) 系统找不到指定的路径。
******************** END OF WARNING *******************