某省有个数据库的备份坏了,同事采取的策略是每天定期的用脚本删除归档。于是,当备份恢复的时候,需要做一次crosscheck,以便验证那些归档是validate的,于是可怕的事情发生了:crosscheck运行了1小时,还是没动静——需要crosscheck的日志太多了!!
查了一下文档,原来crosscheck archivelog all,除了all参数,还是有很多选项可以添加的:
like参数:
1 2 3 4 5 6 7 8 |
RMAN> crosscheck archivelog like '%22%'; 释放的通道: ORA_DISK_1 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=16 devtype=DISK 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00022.001 记录 ID=8 时间戳 =654901749 已交叉检验的 1 对象 |
范围参数-until time:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
RMAN> crosscheck archivelog until time="to_date('2008-5-20','yyyy-mm-dd')"; 释放的通道: ORA_DISK_1 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=16 devtype=DISK 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00020.001 记录 ID=6 时间戳 =654686206 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00021.001 记录 ID=7 时间戳 =654827494 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00022.001 记录 ID=8 时间戳 =654901749 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00023.001 记录 ID=9 时间戳 =654916924 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00024.001 记录 ID=10 时间戳 =654980270 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00025.001 记录 ID=11 时间戳 =654985482 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00026.001 记录 ID=12 时间戳 =654986264 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00027.001 记录 ID=13 时间戳 =655157701 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00028.001 记录 ID=14 时间戳 =655406579 已交叉检验的 9 对象 |
范围参数-from time:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
RMAN> crosscheck archivelog from time="to_date('2008-5-20','yyyy-mm-dd')"; 释放的通道: ORA_DISK_1 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=16 devtype=DISK 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00028.001 记录 ID=14 时间戳 =655406579 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00029.001 记录 ID=15 时间戳 =655472860 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00030.001 记录 ID=16 时间戳 =655478738 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00031.001 记录 ID=17 时间戳 =655479620 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00032.001 记录 ID=18 时间戳 =655479984 已交叉检验的 5 对象 |
范围参数-from time until time:
1 2 3 4 5 6 7 8 9 10 |
RMAN> crosscheck archivelog from time="to_date('2008-5-20','yyyy-mm-dd')" until time="to_date('2008-5-23','yyyy-mm-dd')"; 释放的通道: ORA_DISK_1 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=16 devtype=DISK 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00028.001 记录 ID=14 时间戳 =655406579 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00029.001 记录 ID=15 时间戳 =655472860 已交叉检验的 2 对象 |
范围参数-time between and:
1 2 3 4 5 6 7 8 9 10 |
RMAN> crosscheck archivelog time between "to_date('2008-5-20','yyyy-mm-dd')" and "to_date('2008-5-23','yyyy-mm-dd')"; 释放的通道: ORA_DISK_1 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=16 devtype=DISK 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00028.001 记录 ID=14 时间戳 =655406579 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00029.001 记录 ID=15 时间戳 =655472860 已交叉检验的 2 对象 |
范围参数-time between and:
1 2 3 4 5 6 7 8 9 10 |
RMAN> crosscheck archivelog time between "to_date('2008-5-20','yyyy-mm-dd')" and "to_date('2008-5-23','yyyy-mm-dd')"; 释放的通道: ORA_DISK_1 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=16 devtype=DISK 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00028.001 记录 ID=14 时间戳 =655406579 对归档日志的验证失败 存档日志文件名 =D:\ORACLE\ARCH\ARC00029.001 记录 ID=15 时间戳 =655472860 已交叉检验的 2 对象 |
以上的例子把time换成scn或者sequence也行。
最后,用time between and 的方法慢慢删除,终于把8万多个归档日志删除了……看来手册还是要多看,不然一下子就忘记了语法-_-!!