ora-600[25027][x][0] 插入大字段问题

一个朋友数据库断电后重启遭遇此问题
ORA-00600: internal error code, arguments: [25027], [22], [0], [], [], [], [], [], [], [], [], []
----- Current SQL Statement for this session (sql_id=8ywdkvd1vbrqm) -----
INSERT INTO VEH_XML_DATA (ID, JYLSH, JKID, HPHM, HPZL, CLSBDH, SCCS, ISSC, STATE, XMLDOC, HCSCCS, HCISSC, JYW) VALUES (:B7 , :B6 , '18C62', :B5 , :B4 , :B3 , 0, 0, 1, :B2 , 0, 0, :B1 )
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
0x1df9aaec0      2716  package body JCLW_DEV.PKG_JCGCSJ
0x1e3b17fb0         1  anonymous block

关于ORA-00600 25027的相关描述

ERROR: 

  Format: ORA-600 [25027] [a] [b]

VERSIONS:
  versions 9.2 and above

ARGUMENTS:
  Arg [a]  Tablespace Number (TSN)
  Arg [b]  Decimal Relative Data Block Address (RDBA)

SUGGESTIONS:

 1. If the Arg [b] (the RDBA) is 0 (zero), then this could be due to fake indexes.

  The following query will list fake indexes:

     select do.owner,do.object_name, do.object_type,sysind.flags
     from dba_objects do, sys.ind$ sysind
     where do.object_id = sysind.obj#
     and bitand(sysind.flags,4096)=4096;

  If the above query returns any rows, check the objects involved and consider dropping them as they can cause this error. 

2. Run analyze table validate structure on the table referenced in the Current SQL statement in
    the related trace file.

另外一个文档说明了如何判断是否是索引有问题还是INDEX有问题

1) SQL> Analyze table validate structure cascade ; 

2) query dba_indexes to get all indexes for failed table 'table_name'

    SQL> select index_name from user_indexes where table_name = 'TABLE_NAME'; 

3) validate table indexes :
    SQL > Analyze index validate structure ; 

If the analyze indicates corruption and that corruption is within an index, drop and recreate the index.

如果是0 文档说应该是索引,但是analyze 所有索引并没有问题。最后发现表中有大字段

可以根据 文档处理
Insert into table with lob fails with ora-600[25027][x][0] where x is ts# for the tablespace that has the lob.
Tracefile shows the stack function similar to:
krtd2abh  kcbgcur  ktspgfblk3  ktsplbfmb  ktsplbrecl  ktspgsp_main  kdlgsp_init  kdl_write1  kdlf_write   koklicbf  koklcre

CAUSE

The cause of this error can be LOST IO which may cause other errors like ORA-600 [kdlpdba:kcbz_objdchk] during INSERT.
The problem described in bug 13869187 is because a Block is marked as Formatted in the ASSM metadata L1 bitmap block but the block is unformatted for the LOB segment.  
The 3rd argument may not be always 0 (zero) as the problem is that if the block is unformatted, Oracle still tries to locate a pdba assuming that the block is formatted and that pdba offset may be zero when the block is empty (affected block has never formatted:block flag contains 1 - KCBHFNEW and type is zero).  If the block is formatted for a former dropped object, then the argument can be different than  zero.
DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY with verify_option=>DBMS_SPACE_ADMIN.SEGMENT_VERIFY_SPECIFIC and 
attrib=>DBMS_SPACE_ADMIN.BITMAPS_CHECK; however it may be canceled when visiting the first problematic block; thus may not identify all affected blocks.
Syntax example of executing the above procedure:
exec DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY('SYS','T_C2_LOB','LOB',null,DBMS_SPACE_ADMIN.SEGMENT_VERIFY_SPECIFIC,DBMS_SPACE_ADMIN.BITMAPS_CHECK)
For more details reference Bug 18607613
SOLUTION
The error is fixed by:
recreating the table using exp-drop-import.
OR
Move the lob in a new tablespace.
Alter table move lob(&lob_column) store as (tablespace &tbsp);

进行处理,但是朋友处理的时候出现ORA-1555错误如下:
ORA-01555: snapshot too old: rollback segment number  with name "" too small
ORA-22924: snapshot too old

需要按照:
ORA-01555: snapshot too old: rollback segment number with name "" too small
 and sometimes followed by ORA-22924 error.  

ORA-01555: snapshot too old: rollback segment number  with name "" too small
ORA-22924: snapshot too old
CAUSE

LOB data doesn't use the Undo segment for retaining the read consistent images. The old versions are stored in the LOB Segments itself, before any DMLs.

The ORA-01555 on a LOB segment is reported generally in two cases:

a) The query is accessing a LOB segment which is corrupted

OR

b) Read consistent images of the LOB data is not available in the LOB Segment. This happens due to the wrong setting of PCTVERSION / RETENTION attributes of the LOB segment.

SOLUTION

1) The first step to resolve ORA-1555 on  LOB column is to check for corruption. This is the most common case.

1.a) Create a dummy table for storing all rowids of the corrupted LOBs. Let's call it "corrupt_lobs"

SQL> create table corrupt_lobs (corrupt_rowid rowid, err_num number);
1.b) Find the column names containing LOB data. You can DESCRIBE the table encountering the error and note down the columns names with datatype CLOB and BLOB.

SQL> DESC LOBDATA

Name Null? Type 
---------- --------- ------------
ID NOT NULL NUMBER 
DOCUMENT BLOB

1.c) Execute the following PL/SQL block to identify the corrupted rows. Ensure to replace and

阅读(5128) | 评论(0) | 转发(0) |

0

上一篇:关于SCN HEADROOM 和_external_scn_rejection_threshold_hours 的说明

下一篇:ursor_sharing=SIMILAR 引发大量的 cursor: mutex S

相关热门文章

  • ORACLE 变异表解决方法
  • ORA-00600错误分析
  • 初识ORACLE的审计功能
  • Oracle的OLEDB
  • 学ORACLE随笔

给主人留下些什么吧!~~

评论热议

请登录后评论。

登录 注册

盛拓传媒简介 | 关于IT168 | 合作伙伴 | 广告服务 | 使用条款 | 投稿指南 | 诚聘精英 | 联系我们 | 苹果论坛 | 网站导航 | 往日回顾

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员 测绘资质证书(乙测资字11005067) 网络文化经营许可证

感谢所有关心和支持过ITPUB的朋友们

时间: 2024-10-09 12:15:02

ora-600[25027][x][0] 插入大字段问题的相关文章

MySQL实战系列:大字段如何优化

背景 线上发现一张表,1亿的数据量,物理大小尽然惊人的大,1.2T 最终发现,原来有很多字段,10个varchar,1个text 这么大的表,会给运维带来很大的痛苦:DDL咋办?恢复咋办?备份咋办? 基本知识:InnoDB Storage Architecture for InnoDB On Disk Format 蓝图: database --> tablespaces --> pages --> rows --> columns InnoDB 物理结构存储结构 InnoDB 逻

java-关于用jdbc向数据库插入date字段为空值的 为什么 会报错

问题描述 关于用jdbc向数据库插入date字段为空值的 为什么 会报错 这是抛出来的异常 求大神救命..! java.sql.SQLException: 无效的列类型 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBErr

Sql语句,当在页面插入一个字段的时候,和数据库中的表字段进行对比,有这个名字就数量相加

问题描述 Sql语句,当在页面插入一个字段的时候,和数据库中的表字段进行对比,有这个名字就数量相加 Sql语句,当在页面插入一个字段的时候,和数据库中的表字段进行对比,有这个名字就数量相加,没有的话重新加入一条新的记录,Sql语句怎么实现? 当我页面添加的是"利群"时,添加一盒,那么数据库中利群这条记录中的num字段中的4变成5,如果是页面添加的是"黄鹤楼"同理,如果添加的不是name字段中的这两个,就新插入一条数据.Sql语句怎么写??急急急. 是Mysql的数据

Oracle技术:异构数据库初始化大字段处理

一.source端 SOURCEISTABLE SOURCEDB oracle RMTHOST 127.0.0.1, MGRPORT 7820 RMTFILE D:\ogg\oracle\dirdat\i1 table dbo.t_v; table dbo.t_t; 二.target端 SPECIALRUN END RUNTIME SETENV (NLS_LANG =AMERICAN_AMERICA.ZHS16GBK) userid ogg,password xifenfei EXTFILE D

JDBC读写MySQL的大字段数据

不管你是新手还是老手,大字段数据的操作常常令你感到很头痛.因为大字段有些特 殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的.而非一般 的字段,一次即可读出数据.本人以前用到Spring+iBatis架构来操作大字段,结果以惨 烈失败而告终,在网上寻求解决方案,也没找到答案.最终以JDBC来实现了大字段操作部 分. 本文以MySQL为例,通过最基本的JDBC技术来处理大字段的插入.读取操作. 环境: MySQL5.1 JDK1.5 一.认识MySQL的大字段类型 BLOB是一

RDS最佳实践(五)—Mysql大字段的频繁更新导致binlog暴增

背景:RDS Mysql采用的binlog 格式默认为ROW,在Mysql 5.6的版本之前,Mysql每次列的修改(update)都需要记录表中所有列的值.这样就存在一个问题,如果表中包含很多的大字段,表的单行长度就会非常长,这样每次update就会导致大量的 binlog空间生成.针对这个问题,在mysql 5.6中进行了改进,复制支持"row image control" ,只记录修改的列而不是行中所有的列,这对一些包含 BLOGs 字段的数据来说可以节省很大的处理能力,因此此项

sql 存取ntext大字段操作?

问题描述 sql 存取ntext大字段操作?小弟现在要做个文章,新闻的发布,用ntext字段,但是发现如果内容很多的话用insert语句 是差不进去的,现在不知道怎么搞,请教高手,好像字段改成clob,又说跟struts定义的不匹配,咋整啊?如果有很多内容要一次插入呢? 问题补充:飞雪无情 写道 解决方案 建议使用PreparedStatement的setClob和getClob函数试试!解决方案二:你用的是SqlServer吧!好像clob是oracle的吧解决方案三:不是我说的使你这个意思引

javaeye无人???sql 存取ntext大字段操作?没人会解决?

问题描述 sql 存取ntext大字段操作?现在要做个文章,新闻的发布,用ntext字段,但是发现如果内容很多的话用insert语句 是差不进去的,现在不知道怎么搞,请教高手,如果有很多内容要一次插入呢?查了sql api SQLServerClob 这个是存text ntext的 但是好像存不进去?用 word 网络上复制个200k的东西 一下子复制进去 然后插进去看看,行不行? 问题补充:7454103 写道 解决方案 还有昨天和你说的其他方法都不行?解决方案二:昨天给qq说的Reader不

数据库迁移大字段问题

问题描述 现在我们的项目让我做这样一个功能:把SqlServer,DB2,Oracle的数据迁移到新的Oracle数据库中,其他字段都好说,就是大字段我不知道怎么解决,请各位大虾给个思路,尽量详细些,先谢谢了! 解决方案 解决方案二:各位帮帮我啊解决方案三:为什么不直接迁移库导出库再导进新库,还要做功能?有什么特别的理由么