共计 1839 个字符,预计需要花费 5 分钟才能阅读完成。
Oracle 数据库版本:7.3.2
背景:
客户那边数据库突然出现一个 current 日志文件坏了,导致数据库 crash 了,然后现场工程师使用_ALLOW_RESETLOGS_CORRUPTION = TRUE 这个隐含参数,做了不完全恢复后强行将数据库打开。可是打开数据库后发现只能用 internal 用户连接进去,别的用户连接都报错,错误信息如下:
ORA-00600: internal error code, arguments: [2662], [0], [431267936], [0], [431273216], [0], [], []
查询不了任何应用的表,应用也没法使用,于是想尝试全库的 exp 出来然后重新 imp 进去建库,结果发现 exp 数据也不成功,也是报同样的 ORA-600 的错误,用户当时数据没有任何的备份过,只能想办法尽量打开数据库,导出数据了。
处理过程:
先检查了 600 错误产生的 trace 文件:
*** SESSION ID:(7.15) 2004.11.23.23.28.16.824
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [2662], [0], [431267754], [0], [431272752], [0], [], []
Current SQL statement for this session:
SELECT * FROM “WHSB”.”SB_BSBF”
得到的信息有限,只能看到是严重内部错误,剩下的都是内存堆栈的一堆信息,于是查找了一下这个错误的具体相关信息。
ORA-600 [2662] “Block SCN is ahead of Current SCN”,说明当前数据库的数据块的 SCN 早于当前的 SCN,主要是和存储在 UGA 变量中的 dependent SCN 进行比较,如果当前的 SCN 小于它,数据库就会产生这个 ORA-600 [2662] 的错误了。这个错误一共有五个参数,分别代表不同的含义,
ORA-600 [2662] [a] [b] [c] [d] [e]
Arg [a] Current SCN WRAP
Arg [b] Current SCN BASE
Arg [c] dependent SCN WRAP
Arg [d] dependent SCN BASE
Arg [e] Where present this is the DBA where the dependent SCN came from.
我们分析错误中的提示,它的参数 b =431267754,d=431272752, 表明当前的 SCN 确实是小于 dependent SCN,所以产生了这个 600 的错误。
通过查阅文档,发现这个错误的产生原因主要有以下几条:
1. 使用隐含参数_ALLOW_RESETLOGS_CORRUPTION 后 resetlogs 打开数据库
2. 硬件错误引起数据库没法写控制文件和重做日志文件
3. 错误的部分恢复数据库
4. 恢复了控制文件但是没有使用 recover database using backup controlfile 进行恢复
5. 数据库 crash 后设置了_DISABLE_LOGGING 隐含参数
6. 在并行服务器环境中 DLM 存在问题
仔细对比了一下,发现问题可能是由于第一条产生的,由于设置了_ALLOW_RESETLOGS_CORRUPTION 这个隐含参数后,虽然强制性的打开数据库,但是数据库本身存在了 corruption,仍然存在严重的问题。
于是想到使用 ADJUST_SCN 事件来调整当前的 SCN,使其大于 dependent SCN,然后保证数据库可以全库的导出,然后重建数据库导入数据。
用 internal 用户登陆数据库后,连接别的用户,还是失败报错,执行:
alter session set events ‘IMMEDIATE trace name ADJUST_SCN level 1’;
然后尝试连接别的用户,连接成功。
最后 exp 整个数据库,重建数据库后导入数据,整个数据库恢复成功!
通过这个实例,我们可以看到,尽量的不要去使用那些隐含参数,这些参数是 oracle 所不推荐使用的,也不是万能的!如果使用了可能会存在一些遗留的问题,如果非要使用,建议使用后一定要 exp/imp 重建建立数据库。
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/141079.htm