标签云
asm恢复 bbed bootstrap$ dul In Memory kcbzib_kcrsds_1 kccpb_sanity_check_2 kfed MySQL恢复 ORA-00312 ORA-00607 ORA-00704 ORA-01110 ORA-01555 ORA-01578 ORA-08103 ORA-600 2131 ORA-600 2662 ORA-600 2663 ORA-600 3020 ORA-600 4000 ORA-600 4137 ORA-600 4193 ORA-600 4194 ORA-600 16703 ORA-600 kcbzib_kcrsds_1 ORA-600 KCLCHKBLK_4 ORA-15042 ORA-15196 ORACLE 12C oracle dul ORACLE PATCH Oracle Recovery Tools oracle加密恢复 oracle勒索 oracle勒索恢复 oracle异常恢复 Oracle 恢复 ORACLE恢复 ORACLE数据库恢复 oracle 比特币 OSD-04016 YOUR FILES ARE ENCRYPTED 勒索恢复 比特币加密文章分类
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (102)
- 数据库 (1,682)
- DB2 (22)
- MySQL (73)
- Oracle (1,544)
- Data Guard (52)
- EXADATA (8)
- GoldenGate (24)
- ORA-xxxxx (159)
- ORACLE 12C (72)
- ORACLE 18C (6)
- ORACLE 19C (15)
- ORACLE 21C (3)
- Oracle 23ai (7)
- Oracle ASM (67)
- Oracle Bug (8)
- Oracle RAC (53)
- Oracle 安全 (6)
- Oracle 开发 (28)
- Oracle 监听 (28)
- Oracle备份恢复 (565)
- Oracle安装升级 (92)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (79)
- PostgreSQL (18)
- PostgreSQL恢复 (6)
- SQL Server (27)
- SQL Server恢复 (8)
- TimesTen (7)
- 达梦数据库 (2)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (37)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (20)
-
最近发表
- 断电引起的ORA-08102: 未找到索引关键字, 对象号 39故障处理
- ORA-00227: corrupt block detected in control file
- 手工删除19c rac
- 解决oracle数据文件路径有回车故障
- .wstop扩展名勒索数据库恢复
- Oracle Recovery Tools工具一键解决ORA-00376 ORA-01110故障(文件offline)
- OGG-02771 Input trail file format RELEASE 19.1 is different from previous trail file form at RELEASE 11.2.
- OGG-02246 Source redo compatibility level 19.0.0 requires trail FORMAT 12.2 or higher
- GoldenGate 19安装和打patch
- dd破坏asm磁盘头恢复
- 删除asmlib磁盘导致磁盘组故障恢复
- Kylin Linux 安装19c
- ORA-600 krse_arc_complete.4
- Oracle 19c 202410补丁(RUs+OJVM)
- ntfs MFT损坏(ntfs文件系统故障)导致oracle异常恢复
- .mkp扩展名oracle数据文件加密恢复
- 清空redo,导致ORA-27048: skgfifi: file header information is invalid
- A_H_README_TO_RECOVER勒索恢复
- 通过alert日志分析客户自行对一个数据库恢复的来龙去脉和点评
- ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的SERVICE_NAME
标签归档:ORA-600[kafspa:columnBuffer1]
记录一次存储异常数据库恢复后遗症ORA-600[kafspa:columnBuffer1]错误处理
先说下前提,这个库以前是由于存储异常,找硬件厂商做了raid重组,然后我进行数据恢复的,恢复出来数据之后,应用厂商通过验证和补数据,然后迁移到另外一台机器做生产用的,这个库一直没有怎么看,最近检查数据库发现ORA-600[kafspa:columnBuffer1]错误,通过删除异常记录的方式解决.
数据库alert日志
Mon Aug 10 00:00:21 2015 LNS: Standby redo logfile selected for thread 1 sequence 617 for destination LOG_ARCHIVE_DEST_2 Mon Aug 10 00:00:33 2015 Errors in file D:\APP\ADMINISTRATOR\diag\rdbms\xff\xff\trace\xff_j002_6900.trc (incident=146517): ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [2883], [1], [], [], [], [], [], [], [], [], [] Incident details in: D:\APP\ADMINISTRATOR\diag\rdbms\xff\xff\incident\incdir_146517\xff_j002_6900_i146517.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Errors in file D:\APP\ADMINISTRATOR\diag\rdbms\xff\xff\trace\xff_j002_6900.trc: ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_280" ORA-20011: Approximate NDV failed: ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [2883], [1], [], [], [], [], [], [], [], [], [] ORA-06512: at "SYS.DBMS_STATS", line 31228
分析日志发现
*** 2015-07-19 06:00:30.231 *** SESSION ID:(578.751) 2015-07-19 06:00:30.231 *** CLIENT ID:() 2015-07-19 06:00:30.231 *** SERVICE NAME:(SYS$USERS) 2015-07-19 06:00:30.231 *** MODULE NAME:(DBMS_SCHEDULER) 2015-07-19 06:00:30.231 *** ACTION NAME:(ORA$AT_OS_OPT_SY_220) 2015-07-19 06:00:30.231 Dump continued from file: D:\APP\ADMINISTRATOR\diag\rdbms\xff\xff\trace\xff_j001_4444.trc ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [2883], [1], [], [], [], [], [], [], [], [], [] ========= Dump for incident 146142 (ORA 600 [kafspa:columnBuffer1]) ======== *** 2015-07-19 06:00:30.231 dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0) ----- Current SQL Statement for this session (sql_id=g0q33k8qtbcpd) ----- /* SQL Analyze(1) */ select /*+ full(t) no_parallel(t) no_parallel_index(t) dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring no_substrb_pad ………… to_char(substrb(dump(max("LIST_NO"),16,0,32),1,120)) from "CHF"."T_XIFENFEI" t …………
对表进行收集统计信息
SQL> EXEC DBMS_STATS.gather_table_stats('CHF','T_XIFENFEI',CASCADE=>TRUE) ; BEGIN DBMS_STATS.gather_table_stats('CHF','T_XIFENFEI',CASCADE=>TRUE); EN D; * 第 1 行出现错误: ORA-20011: Approximate NDV failed: ORA-00600: 内部错误代码, 参数: [kafspa:columnBuffer1], [2883], [1], [], [], [], [], [], [], [], [], [] ORA-06512: 在 "SYS.DBMS_STATS", line 24232 ORA-06512: 在 "SYS.DBMS_STATS", line 24332 ORA-06512: 在 line 1 SQL> desc "CHF"."T_XIFENFEI" 名称 是否为空? 类型 ----------------------------------------- -------- ----------------- VISIT_DATE DATE ………… GETDRUG_FLAG VARCHAR2(2) …………
通过上面的alert日志和trace文件以及人工收集统计信息,基本上可以定位是由于数据库自动收集统计信息进程在进行统计信息收集之时,对于”CHF”.”T_XIFENFEI”表进行收集统计信息由于某种错误,从而出现该错误.查询mos,发现此类问题主要是由于varchar2类型存储的数据长度超过了表定义长度.
通过验证官方所说
C:\Users\Administrator>exp "'/ as sysdba'" tables="CHF"."T_XIFENFEI" file =y:/1.dmp log=y:/1.log Export: Release 11.2.0.4.0 - Production on 星期四 8月 13 11:03:22 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Produc tion With the Partitioning, OLAP, Data Mining and Real Application Testing options 已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 即将导出指定的表通过常规路径... 当前的用户已更改为 CHF . . 正在导出表 T_XIFENFEI EXP-00015: 错误出现在行 1339552 (表 T_XIFENFEI, 列 GETDRUG_FLAG), 数据类型 1 EXP-00001: 数据字段截断 - 列长度 =2, 缓冲区大小 =2 实际大小 =17Errors in file : OCI-21500: 内部错误代码, 参数: [kghfrempty:ds], [0x00652FCC8], [], [], [], [], [ ], [] ----- Call Stack Trace ----- calling call entry argument values in hex location type point (? means dubious value) -------------------- -------- -------------------- ---------------------------- kgerinv_internal()+ CALL??? skgudmp() 000000000 006447680 000000000 139 006447680 kgerinv()+49 CALL??? kgerinv_internal() 000000001 000676B4D 0064985B0 000000000 kgerin()+49 CALL??? kgerinv() 000000018 000799612 000072000 000000000 kghnerror()+294 CALL??? kgerin() 006447680 00645092C 006447680 000000001 kghfrempty()+639 CALL??? kghnerror() 0000001F0 000000000 BE019800000000 7E01960000 kghgex()+1433 CALL??? kghfrempty()+368 000000000 00652CAD8 000000000 000000000 kghfnd()+808 CALL??? kghgex() 001004000 000000000 001BEDD10 001A7131C kghalo()+610 CALL??? kghfnd() 00012C450 00012C4A0 000000000 006446FD0 kghgex()+445 CALL??? kghalo() 006494848 000000000 001BEDD10 00190A575 kghfnd()+808 CALL??? kghgex() 000000001 0000001A0 000000000 006493D68 kghalo()+610 CALL??? kghfnd() 000000000 006447680 0FFFFFFFF 006447680 kpuhhalo()+358 CALL??? kghalo() 000000000 000000178 07FFFFFFF 000000001 kpuertb_reallocTemp CALL??? kpuhhalo() 00652C498 000003E84 001C0EA44 Buf()+192 000000000 kpuex_reallocTempBu CALL??? kpuertb_reallocTemp 000004007 0018BA3BF 00012CAB0 f()+67 Buf() 001AB296F kpudefn()+347 CALL??? kpuex_reallocTempBu 00012CC38 001004000 001BEDD44 f() 000000004 kpudfn()+1506 CALL??? kpudefn() 00012F3D0 000000004 006520044 000000000 OCIDefineByPos()+10 CALL??? kpudfn() 004327570 000000000 00012F3D0 2 000000004 00000001400116E5 CALL??? OCIDefineByPos() 1043B9300 0043B92C0 0044002B8 004401394 000000014004AFC7 CALL??? 00000001400113BA 00012F380 00012F0E0 000000068 14004B2B6 000000014001E784 CALL??? 000000014004A37E 000013F30 140095A71 140097520 14009F540 00000001400027A7 CALL??? 000000014001E39F 14009F838 00012FB5C 140097520 14009F540 000000014000102C CALL??? 0000000140001E2C 000000005 004327570 1D0D5749D21764D 000000000 000000014006BEF0 CALL??? 000000014000100E 000130000 1AFBFE2D0D8 000000000 000000000 000000007748652D CALL??? 000000014006BDD0 000000000 000000000 000000000 000000000 00000000775BC521 CALL??? 0000000077486520 000000000 000000000 000000000 000000000 call stack performance statistics: total : 0.778000 sec setup : 0.350000 sec stack unwind : 0.099000 sec symbol translation : 0.021000 sec printing the call stack: 0.304000 sec printing frame data : 0.000000 sec printing argument data : 0.000000 sec ----- End of Call Stack Trace -----
这里通过exp验证到数据在GETDRUG_FLAG列上有异常,本来定义列长度为2,可是实际数据长度为17,明显不符
通过plsql定位具体错误rowid
SQL> set serveroutput on SQL> DECLARE 2 TYPE RowIDTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER; 3 CURSOR c1 IS select /*+index(t PK_T_XIFENFEI_BAK_NEW)*/ rowid from CHF.T_XIFENFEI t; 4 r RowIDTab; 5 rows NATURAL := 20000; 6 bad_rows number := 0 ; 7 errors number; 8 error_code number; 9 myrowid rowid; 10 BEGIN 11 OPEN c1; 12 LOOP 13 FETCH c1 BULK COLLECT INTO r LIMIT rows; 14 EXIT WHEN r.count=0; 15 BEGIN 16 FORALL i IN r.FIRST..r.LAST SAVE EXCEPTIONS 17 insert into CHF.T_XIFENFEI_new 18 select /*+ ROWID(A) */ * 19 from CHF.T_XIFENFEI A where rowid = r(i); 20 EXCEPTION 21 when OTHERS then 22 BEGIN 23 errors := SQL%BULK_EXCEPTIONS.COUNT; 24 FOR err1 IN 1..errors LOOP 25 error_code := SQL%BULK_EXCEPTIONS(err1).ERROR_CODE; 26 myrowid := r(SQL%BULK_EXCEPTIONS(err1).ERROR_INDEX); 27 bad_rows := bad_rows + 1; 28 insert into system.had_rows values('CHF.T_XIFENFEI',myrowid, error_code); 29 END LOOP; 30 END; 31 END; 32 commit; 33 END LOOP; 34 commit; 35 CLOSE c1; 36 dbms_output.put_line('Total Bad Rows: '||bad_rows); 37 END; 38 / Total Bad Rows: 1 PL/SQL 过程已成功完成。 SQL> SELECT row_id FROM system.had_rows ; ROW_ID ------------------ AAAT8wAAEAAAM29AAX SQL> select * from CHF.T_XIFENFEI WHERE ROWID='AAAT8wAAEAAAM29AAX'; select * from CHF.T_XIFENFEI WHERE ROWID='AAAT8wAAEAAAM29AAX' * 第 1 行出现错误: ORA-00600: 内部错误代码, 参数: [kafspa:columnBuffer1], [2883], [1], [], [], [], [], [], [], [], [], []
通过这里基本上可以定位到是该条rowid记录有问题,和业务进行沟通,确定该条记录可以删除(也不能访问,其实不删除也没用)
删除异常记录
SQL> delete from CHF.T_XIFENFEI WHERE ROWID='AAAT8wAAEAAAM29AAX'; 已删除 1 行。 SQL> commit; 提交完成。
收集统计信息
SQL> EXEC DBMS_STATS.gather_table_stats('CHF','T_XIFENFEI',CASCADE=>TRUE) ; PL/SQL 过程已成功完成。
通过清理异常记录,数据库可以正常收集统计信息,未再报ORA-00600[kafspa:columnBuffer1]错误,故障较完美解决
补充几个现象
1. analyze table “CHF”.”T_XIFENFEI” estimate statistics; 分析表统计信息正常,但是dbms_stats收集报错(因为dbms_stats相当对于每个列进行了扫描,而analyze应该不是)
2. 在报ORA-00600[kafspa:columnBuffer1]的情况下,ctas依旧可以成功,但是普通插入不行(因为ctas相当加油append操作),因此在有些情况下,需要慎重append(特别是有逻辑坏块的时候)
处理smon清理临时段导致数据库异常案例
一个朋友的数据库在经过自己的千辛万苦终于open成功,但是几分钟就down掉,使得他想导出数据重建库的目标不能实现.让我帮忙处理
alert日志报ORA-00600[kafspa:columnBuffer1]
Wed Aug 8 10:55:31 2012 Completed: ALTER DATABASE OPEN Wed Aug 8 10:55:41 2012 Errors in file /oracle/ora10/admin/ora10g/udump/ora10g_ora_12160.trc: ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [28], [22], [], [], [], [], [] Wed Aug 8 10:55:47 2012 Non-fatal internal error happenned while SMON was doing temporary segment drop. SMON encountered 2 out of maximum 100 non-fatal internal errors. Wed Aug 8 10:55:47 2012 Errors in file /oracle/ora10/admin/ora10g/bdump/ora10g_smon_8941.trc: ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [28], [22], [], [], [], [], [] Wed Aug 8 10:55:58 2012 Non-fatal internal error happenned while SMON was doing temporary segment drop. SMON encountered 3 out of maximum 100 non-fatal internal errors. Wed Aug 8 10:55:59 2012 Errors in file /oracle/ora10/admin/ora10g/bdump/ora10g_smon_8941.trc: ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [28], [22], [], [], [], [], [] Wed Aug 8 10:56:10 2012 Non-fatal internal error happenned while SMON was doing temporary segment drop. SMON encountered 4 out of maximum 100 non-fatal internal errors. Wed Aug 8 10:56:11 2012 Errors in file /oracle/ora10/admin/ora10g/bdump/ora10g_smon_8941.trc: ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [28], [22], [], [], [], [], [] Wed Aug 8 10:56:22 2012 Non-fatal internal error happenned while SMON was doing temporary segment drop. SMON encountered 5 out of maximum 100 non-fatal internal errors. Wed Aug 8 10:56:32 2012 Errors in file /oracle/ora10/admin/ora10g/bdump/ora10g_smon_8941.trc: ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [28], [22], [], [], [], [], [] Wed Aug 8 10:56:43 2012 Non-fatal internal error happenned while SMON was doing temporary segment drop. SMON encountered 6 out of maximum 100 non-fatal internal errors. Wed Aug 8 10:56:53 2012 Errors in file /oracle/ora10/admin/ora10g/bdump/ora10g_smon_8941.trc: ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [28], [22], [], [], [], [], [] Wed Aug 8 10:57:04 2012 Non-fatal internal error happenned while SMON was doing temporary segment drop. SMON encountered 7 out of maximum 100 non-fatal internal errors. Wed Aug 8 10:57:14 2012 Errors in file /oracle/ora10/admin/ora10g/bdump/ora10g_smon_8941.trc: ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [28], [22], [], [], [], [], [] Wed Aug 8 10:57:25 2012 Non-fatal internal error happenned while SMON was doing temporary segment drop. SMON encountered 8 out of maximum 100 non-fatal internal errors. Wed Aug 8 10:57:35 2012 Errors in file /oracle/ora10/admin/ora10g/bdump/ora10g_smon_8941.trc: ORA-00600: internal error code, arguments: [kafspa:columnBuffer1], [28], [22], [], [], [], [], [] Wed Aug 8 10:57:38 2012 Errors in file /oracle/ora10/admin/ora10g/bdump/ora10g_pmon_8856.trc: ORA-00474: SMON process terminated with error Wed Aug 8 10:57:38 2012 PMON: terminating instance due to error 474 Instance terminated by PMON, pid = 8856
这里出现ORA-00600[kafspa:columnBuffer1],一个未知的错误,但是根据相关的提示,可以大概猜出来是什么原因导致数据库异常
Non-fatal internal error happenned while SMON was doing temporary segment drop.
出现这个错误,使得我们想到一个smon的功能,清理临时段.该数据库down掉很可能和smon清理临时段的过程发生失败有关系
SMON encountered 8 out of maximum 100 non-fatal internal errors.
这个错误提示是因为smon内部最多允许发生100次错误,记录错误发生了8次,当然这次数据库down掉是smon还没有达到100次就直接abort掉
SQL> col name for a32 SQL> col value for a24 SQL> col description for a70 SQL> set linesize 150 SQL> select a.ksppinm name,b.ksppstvl value,a.ksppdesc description 2 from x$ksppi a,x$ksppcv b 3 where a.inst_id = USERENV ('Instance') 4 and b.inst_id = USERENV ('Instance') 5 and a.indx = b.indx 6 and upper(a.ksppinm) LIKE upper('%¶m%') 7 order by name 8 SQL> / Enter value for param: smon_internal_errlimit old 6: and upper(a.ksppinm) LIKE upper('%¶m%') new 6: and upper(a.ksppinm) LIKE upper('%smon_internal_errlimit%') NAME VALUE DESCRIPTION -------------------------------- ------------------------ ----------------------------------- _smon_internal_errlimit 100 limit of SMON internal errors
分析trace文件
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options ORACLE_HOME = /oracle/ora10/product System name: Linux Node name: DBN-HLD-155-2 Release: 2.6.18-92.el5PAE Version: #1 SMP Tue Apr 29 13:31:02 EDT 2008 Machine: i686 Instance name: ora10g Redo thread mounted by this instance: 1 Oracle process number: 8 Unix process pid: 8941, image: oracle@DBN-HLD-155-2 (SMON) *** SERVICE NAME:() 2012-08-08 10:55:20.208 *** SESSION ID:(274.1) 2012-08-08 10:55:20.208 *** 2012-08-08 10:55:20.208 ksedmp: internal or fatal error ORA-00600: internal error code, arguments: [25027], [0], [0], [], [], [], [], [] Current SQL statement for this session: select file#, block#, ts# from seg$ where type# = 3
果然是smon在查询type#=3的时候发现异常,出现ORA-00600[25027]错误.通过对seg$相关视图分析,可以知道type#=3表示临时段,也就是说数据库smon在查询哪些segment是临时段的时候发生意外,而结合alert日志,完整的错误应该就是:数据库启动后,smon进程为了清理临时段,需要通过select file#, block#, ts# from seg$ where type# = 3查询临时段,但是在查询的时候发生错误.而这个错误累积几次导致数据库异常关闭.
解决问题
--修改两个参数 event='10061 trace name context forever, level 10' _smon_internal_errlimit=1000000 --启动数据库 SQL> startup pfile='/tmp/pfile' ORACLE instance started. Total System Global Area 1577058304 bytes Fixed Size 1267716 bytes Variable Size 385878012 bytes Database Buffers 1174405120 bytes Redo Buffers 15507456 bytes Database mounted. Database opened.
因为屏蔽了smon回收临时段,数据库未出现开始时错误,观察数据库几个小时,运行正常,到此基本上解决了此次异常,通过exp可以顺利导出数据然后导入到新库中.
导致该异常sql分析
SQL> select file#, block#, ts# from seg$ where type# = 3; select file#, block#, ts# from seg$ where type# = 3 * ERROR at line 1: ORA-00600: internal error code, arguments: [25027], [0], [0], [], [], [], [], [] SQL> set autot trace exp SQL> select file#, block#, ts# from seg$ where type# = 3; Execution Plan ---------------------------------------------------------- Plan hash value: 1605285479 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 10 | 150 | 389 (1)| 00:00:05 | |* 1 | TABLE ACCESS FULL| SEG$ | 10 | 150 | 389 (1)| 00:00:05 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("TYPE#"=3) SQL> select count(rowid) from seg$; Execution Plan ---------------------------------------------------------- Plan hash value: 763549841 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 12 | 389 (1)| 00:00:05 | | 1 | SORT AGGREGATE | | 1 | 12 | | | | 2 | TABLE ACCESS FULL| SEG$ | 45682 | 535K| 389 (1)| 00:00:05 | --------------------------------------------------------------------------- SQL> select /*+ full(t) */ count(*) from seg$; Execution Plan ---------------------------------------------------------- Plan hash value: 763549841 ------------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | ------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 29 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | | | | 2 | TABLE ACCESS FULL| SEG$ | 3223 | 29 (0)| 00:00:01 | ------------------------------------------------------------------- SQL> select ts# from seg$; Execution Plan ---------------------------------------------------------- Plan hash value: 1605285479 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3223 | 9669 | 29 (0)| 00:00:01 | | 1 | TABLE ACCESS FULL| SEG$ | 3223 | 9669 | 29 (0)| 00:00:01 | -------------------------------------------------------------------------- SQL> set autot off SQL> select count(rowid) from seg$; SQL> / COUNT(ROWID) ------------ 45727 SQL> select /*+ full(t) */ count(*) from seg$; COUNT(*) ---------- 45727 SQL> select ts# from seg$; 0 0 …… 7 7 ORA-00600: internal error code, arguments: [25027], [0], [0], [], [], [], [], [] SQL> !dbv file='/oracle/ora10/oradata/ora10g/system01.dbf' DBVERIFY: Release 10.2.0.4.0 - Production on Thu Aug 9 14:05:09 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. DBVERIFY - Verification starting : FILE = /oracle/ora10/oradata/ora10g/system01.dbf Block Checking: DBA = 4225673, Block Type = KTB-managed data block data header at 0xb6d8225c kdbchk: bad row offset slot 6 offs 3030 fseo 3752 dtl 8168 bhs 72 Page 31369 failed with check code 6135 Block Checking: DBA = 4236289, Block Type = KTB-managed data block data header at 0xb6d7225c kdbchk: tosp bad (-13399) Page 41985 failed with check code 6127 DBVERIFY - Verification complete Total Pages Examined : 192000 Total Pages Processed (Data) : 47588 Total Pages Failing (Data) : 2 Total Pages Processed (Index): 40929 Total Pages Failing (Index): 0 Total Pages Processed (Other): 1784 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 101699 Total Pages Marked Corrupt : 0 Total Pages Influx : 0 Highest block SCN : 1775671440 (0.1775671440) SQL> ANALYZE TABLE sys.SEG$ VALIDATE STRUCTURE CASCADE; ANALYZE TABLE sys.SEG$ VALIDATE STRUCTURE CASCADE * ERROR at line 1: ORA-01498: block check failure - see trace file
通过这里的分析大概可以确定是由于两块KTB-managed data block数据块异常,导致直接对seg$进行TABLE ACCESS FULL操作的时候发生异常.因为这个库已经破坏了数据一致性,先导出来数据,至于出现该错误的原因,后续继续关注分析