问题描述
最近遇到的一则案例,由于一个失败的操作,导致了数据库崩溃和不可启动,最后的处理过程非常复杂。
专家解答
但是我想说的是,对于一个DBA需要学习去避免问题而不是陷入问题之中,以下一个简单的测试就可以重现类似的问题。
DBA应当存在一种基本的常识,那就是:每一个异常中断的操作都可能极为危险,我们应当尽量避免,思虑周全是对于DBA的基本要求。
以下对于LOB对象的一个操作,从前台就导致了一个600的内部错误,这实际上是因为空间不足触发了一个BUG:
SQL> connect eygle/eygle Connected. SQL> CREATE TABLE FLOBS 2 ( 3 FILE_ID NUMBER NOT NULL, 4 FILE_NAME VARCHAR2(256 BYTE), 5 FILE_CONTENT_TYPE VARCHAR2(256 BYTE) NOT NULL, 6 FILE_DATA BLOB, 7 UPLOAD_DATE DATE, 8 EXPIRATION_DATE DATE 9 ); Table created. SQL> SQL> ALTER TABLE flobs MODIFY LOB (file_data) (allocate extent (size 8000m)); ALTER TABLE flobs MODIFY LOB (file_data) (allocate extent (size 8000m)) * ERROR at line 1: ORA-00607: Internal error occurred while making a change to a data block ORA-00600: internal error code, arguments: [kddummy_blkchk], [4], [395], [18038], [], [], [], []
在告警日志中可以看到进一步的信息:
Sat Mar 3 14:41:14 2012 Errors in file /home/xxx/db/admin/ora1020410/udump/ora1020410_ora_12803.trc: ORA-00600: internal error code, arguments: [kddummy_blkchk], [4], [395], [18038], [], [], [], [] Sat Mar 3 14:41:16 2012 Doing block recovery for file 2 block 1096 Block recovery from logseq 12, block 39723 to scn 927026 Sat Mar 3 14:41:16 2012 Recovery of Online Redo Log: Thread 1 Group 3 Seq 12 Reading mem 0 Mem# 0: /home/xxx/db/oradata/ORA1020410/onlinelog/o1_mf_3_7noo6xgy_.log Mem# 1: /home/xxx/db/flash_recovery_area/ORA1020410/onlinelog/o1_mf_3_7noo6y7y_.log Block recovery completed at rba 12.39829.16, scn 0.927027 Doing block recovery for file 4 block 395 Block recovery from logseq 12, block 39498 to scn 927026 Sat Mar 3 14:41:16 2012 Recovery of Online Redo Log: Thread 1 Group 3 Seq 12 Reading mem 0 Mem# 0: /home/xxx/db/oradata/ORA1020410/onlinelog/o1_mf_3_7noo6xgy_.log Mem# 1: /home/xxx/db/flash_recovery_area/ORA1020410/onlinelog/o1_mf_3_7noo6y7y_.log Block recovery completed at rba 12.39829.16, scn 0.927027 Sat Mar 3 14:41:16 2012 Corrupt Block Found TSN = 4, TSNAME = USERS RFN = 4, BLK = 395, RDBA = 16777611 OBJN = 53671, OBJD = 53671, OBJECT = SYS_LOB0000053670C00004$$, SUBOBJECT = SEGMENT OWNER = EYGLE, SEGMENT TYPE = Lob Segment
这个数据库的版本是:
SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi PL/SQL Release 10.2.0.4.0 - Production CORE 10.2.0.4.0 Production TNS for Linux: Version 10.2.0.4.0 - Production NLSRTL Version 10.2.0.4.0 - Production
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。