简单记录一次REDO文件损坏报错 ORA-00333重做日志读取块出错
来源:互联网 发布:石家庄网站排名优化 编辑:程序博客网 时间:2024/04/23 14:19
一.故障描述
首先是实例恢复需要用到的REDO文件损坏
二、解决方法
1.对于非当前REDO或者当前REDO但是无活动事务使用以下CLEAR命令:
用CLEAR命令重建该日志文件SQL>alter database clear logfile group 3;
如果是该日志组还没有归档,则需要用SQL>alter database clear unarchived logfile group 3;
因为是当前实例恢复需要用的REDO,且未归档,使用是CLEAR命令不行的。2.没备份,有备份可以参考以下:
拷贝有效的数据库的全备份,并不完全恢复数据库
可以采用获取最近的SCN的办法用until scn恢复或用until cnacel恢复
recover database until cancel
先选择auto,尽量恢复可以利用的归档日志,然后重新
recover database until cancel
这次输入cancel,完成不完全恢复,也就是说恢复两次。如:
SQL> recover database until cancel;
Auto
……
SQL> recover database until cancel;
Cancel;
、利用alter database open resetlogs打开数据库
说明:
这种办法恢复的数据库是一致的不完全恢复,会丢失当前联机日志中的事务数据
这种方法适合于归档数据库并且有可用的数据库全备份。
恢复成功之后,记得再做一次数据库的全备份。
建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。
3.修改隐含参数_allow_resetlogs_corruption
_allow_resetlogs_corruption=TRUE
重新启动数据库,利用until cancel恢复
SQL>recover database until cancel;
Cancel
如果出错,不再理会,发出
SQL>alter database open resetlogs;
数据库被打开后,马上执行一个full export
shutdown数据库,去掉_all_resetlogs_corrupt参数二、参考EYGLE:ORA-00600 kcratr1_lostwrt之解决与原理分析
ksedmp: internal or fatal error这个错误不难解决,但是其具体成因有点意思。
ORA-00600: internal error code, arguments: [kcratr1_lostwrt], [], [], [], [], [], [], []
Current SQL statement for this session:
alter database open
Metalink对这个错误的解释只有一句关键:
When an instance is restarted following an instance crash, Oracle carries out some checks against the last block that was written to disk prior to the instance crash.这句话是说,当实例崩溃之后启动,Oracle会去检查崩溃前最后一个写出的数据块,通过控制文件校验其是否一致,如果这个块是Old的,则说明最后的写操作丢失了。
If Oracle finds an old block, then this suggests a lost write and the error is raised.
这是一个非常快捷巧妙地判断,如果有写丢失,自然必须引入恢复。
在跟踪文件中记录了详细的信息:
Last BWR afn: 6 rdba: 0x18f9590(blk 1021328) ver: 0x0001.5c21fd6e.01 flg: 0x04提示说,控制文件记录的最后一次写的数据块是file6 block 1021328,SCN版本为:5c21fd6e,而数据文件上记录的SCN则是5c1ec4f0,后者Old,小于前者,这说明丢失了写操作。
Disk version: 0x0001.5c1ec4f0.04 flag: 0x04
那能否恢复呢?跟踪文件里还会记录这样的信息:
Thread checkpoint rba:0x00dfeb.00000002.0010 scn:0x0001.5c1ee5b7线程检查点的SCN为5c1ee5b7,而On-Disk Rba的SCN为5c2266d6,完全可以推演超过5c21fd6e,可以恢复。
On-disk rba:0x00dfeb.0001161f.0000 scn:0x0001.5c2266d6
所以这样的问题:
SQL>startup mount;一般就可以完成恢复了,如果不幸的,你的On-Disk Rba不足以恢复丢失的写操作,则问题将严重了。
SQL>recover database;
SQL>alter database open;
参考:http://blog.itpub.net/25964700/viewspace-709097/ http://www.eygle.com/archives/2010/05/ora-00600_kcratr1_lostwrt.html
- 简单记录一次REDO文件损坏报错 ORA-00333重做日志读取块出错
- 重做日志文件 redo log
- oracle重做日志文件(REDO)损坏或者丢失的恢复操作
- 重做日志文件(redo log file)
- REDO 重做日志文件(redo log files)管理
- 重做日志文件组损坏的解决方案
- redo重做日志管理
- redo联机重做日志
- online redo日志文件损坏恢复
- 丢失当前的联机重做日志文件(redo文件)
- Oracle 联机重做日志文件恢复(redo log)
- oracle 联机重做日志文件(online redo log file)
- Online redo logfiles(在线重做日志文件)
- redo日志损坏总结
- oracle 重做联机日志文件 七步重建redo联机日志 五分钟重建redo日志重建
- 记一次数据库在线current redo损坏故障,2662,ora-600
- 模拟当前redo日志损坏
- redo日志损坏恢复总结:
- SQL 计算两个时间之差
- BIEE Admin Tool建模13条黄金规则
- Makefile经典入门
- 排序算法之基本排序算法:交换、选择、插入
- 全选、反选 不选
- 简单记录一次REDO文件损坏报错 ORA-00333重做日志读取块出错
- libGDX视频教程(七) -- 游戏音效
- Swift中文教程(九) 类与结构
- S3C6410的IROM启动模式
- PB数据窗口对象之显示样式
- Myeclipse连接mysql数据库(给力的写)全程心得)
- 关于SQLite与SQLServer的区别
- Java获取.properties文件
- linux程序编译期加入编译时间和svn版本号