turbolinux +oralce9201
单机,
非归档模式,
没有任何备份
接到用户那的报错信息,说是联机重做日志损坏了
己经有人处理了相当长的时间,需要我来接手帮着处理一下,先查看alert日志,发现确实如用户所说联机重做日志坏了,本来是可以通过sql来查看的,但现在因为此数据库己经被处理相当长时间了,也看不到有用的信息了。
IXDBA.NET技术社区
首先在初使化参数文件中加隐含参数 _allow_resetlogs_corruption=TRUE
启动后,报错如下:
Sat Apr 16 10:47:58 2005 Errors in file /u01/app/oracle/admin/pp/udump/gdykt_ora_17594.trc:
ORA-00600: internal error code, arguments: [2662], [0], [134454992], [0], [134507108], [8388617], [], []
Sat Apr 16 10:47:58 2005
Error 600 happened during db open, shutting down database
USER: terminating instance due to error 600
Instance terminated by USER, pid = 17594
ORA-1092 signalled during: alter database open resetlogs...
Sat Apr 16 10:52:59 2005
USER: terminating instance due to error 1092
Instance terminated by USER, pid = 17594
检查metalink,发现2662说明当前数据库的数据块的SCN早于当前的SCN,主要是和存储在UGA变量中的dependent SCN进行比较,如果当前的SCN小于它,数据库就会产生这个ORA-600 [2662]的错误了。所引起的原因现在应是和我们设置隐含参数有关,处理如下:
alter session set events 'IMMEDIATE trace name ADJUST_SCN level 1';
再尝试重新启动数据库,出现了新问题,3113,怀疑这是和系统内核参数有关,经检查确认,修改了内核参数,3113错误消失。
再次重启数据库,出现了如下的问题:
Tue Apr 19 12:06:22 2005
Errors in file /u01/app/oracle/admin/ppp/bdump/ppp_smon_1519.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [4193], [6533], [6976], [], [], [], [], []
检查metalink,确认引起此现象的原因是联机重做日志和回滚段不一致,所以下面的问题主要就是解决回滚段的问题了,
设置隐含参数 _corrupted_rollback_segments ,_offline_rollback_segments
后错误依然;突然想起,回滚段是自动管理的,因此先处理一下,把它们改成手工管理,并mount数据库,alter 回滚段表空间 offline drop;打开数据库。成功打开数据库。
再对库进行全库导出备份,稍后删除数据库,并重建之,导入数据。
教训:
生产数据库一定要有备份的,即使没有备份,在做恢复操作之前,也最好有个错误点的备份,我们在实施恢复时,即使不能恢复成功,但也不能把事情变得更坏,这个数据库己经被用户恢复了一周左右的时间了,有时会使得备份变成不可能。在协助同事处理时,自己一直也在想如果这样不能恢复该用哪种办法来恢复数据,还好解决了。