ora-600[kcbz_check_objd_typ]错误处理

基本要素

有渠道反馈,HIS软件在对数据进行保存的时候,提示ora-600错误,具体的错误信息如下:

[Microsoft][ODBC driver forOracle][Oracle]ORA-20999: ORA-00600: 内部错误代码, 参数:[kcbz_check_objd_typ], [0], [0], [1], [], [], [], [], [], [], [], []

ORA-06512: 在"ZLHIS.ZL_ERRORCENTER", line 73

ORA-06512: 在 "ZLHIS.ZL_病人XX打印_UPDATE",line 231

ORA-06512: 在 line 1

该错误无法跳过,导致业务无法正常运行。

问题分析

步骤一:按提示分析‘存储过程’

按理这个提示还是比较明确,根据经验判断可能是ZL_病人XX打印_UPDATE可能有问题,结合ORA-06512错误,尝试重建该过程和同义词,执行了以上操作问题依旧。

步骤二:分析ora-600错误

接着分析下ORA-600[kcbz_check_objd_typ]错误,该错误按照百度上的解释是由于Oracle在检查内存中的数据块时,发现数据块上的对象号是错误的,抛出该错误提示,进一步分析问题,发现是在访问【病人XX打印】表的时候抛出的错误,我们单独对该表进行分析,我们对该表进行全表查询的时候,提示ora-08103错误,但是如果只查询部分表,则查询正常。

但是其实该对象是存在的,如下:

我们再对该表的结构进行排查,发现该表的索引都是BIN$类似的名称,证明该表是通过闪回方式进行了恢复操作,这里我们终于定位了问题的所在。

问题产生的根本原因就是因为操作员误操作,对病人护理打印表进行了drop操作,然后用闪回方式进行了恢复,但是因为某些原因,可能导致数据恢复了,但是数据库字典表相关内容出现了错误(或者叫不匹配),这样就导致数据库对该表做任何操作,都会提示错误,如我们对ZLHIS用户进行统计信息收集,同样会得到如下提示:

解决过程

步骤一:对错误表重命名,新建一张同名的表

通过rename操作,对【病人XX打印】表进行重命名,然后重新建一张【病人XX打印】表,通过插入语句,将数据插入新的表中,这里我们要注意,因为旧表访问有问题,因此我们得用循环插入的方式操作,如下:

l  重命名表

rename 病人XX打印 to病人XX打印_原始

l  先创建一张新表

create table病人XX打印 as select * from病人XX打印_原始 where 1=2

/

步骤二:通过过程将原始表的数据插入到新表中

在插入的时候,我们无法通过全表扫描访问访问原始表,但是幸运的时候,可以通过全表访问ROWID,我们就创建一张表保持原始表的ROWID,然后通过匹配ROWID逐条插入到新表中,如下

l  先创建一张保存rowid的表

create table病人XX打印_rowid asselect rowed from病人XX打印_原始

l  过程逐条插入

begin

for cursor_rowid in (select rrowid  from 病人XX打印_rowid)loop

begin

insert into 病人XX打印  select *from 病人XX打印_原始 where rowid=CHARTOROWID(cursir_rowid.rrowid);

commit;

end;

end loop;

end;

/

通过以上操作,最后有接近30条记录无法转移到新表,不过不影响使用。

时间: 2024-10-08 06:12:21

ora-600[kcbz_check_objd_typ]错误处理的相关文章

偶遇问题之ORA 600 [kkpoxgsoh1

alert.log中报错,查看如下: Fri Jul 18 09:25:50 2014 Errors in file /apps/oracle/diag/rdbms/smsrac/smsrac2/trace/smsrac2_ora_15454.trc  (incident=16321): ORA-00600: 内部错误代码, 参数: [kkpoxgsoh1], [0], [], [], [], [], [], [], [], [], [], [] Incident details in: /ap

oracle block corrupt 坏块

整体上来讲,oracle的坏块能够分为两种情景:物理损坏和逻辑损坏.物理损坏是因为存储等原因造成的,致使oracle在处理数据块时发现块的checksum不一致.逻辑损坏多是因为oracle的bug或者内存错误引起,通过检測数据块的checksum并不会发现什么问题,可是在逻辑上这些块已经发生了损坏. oracle通过两个參数来控制对物理损坏和逻辑损坏的检測: SQL> show parameter db_block_check NAME TYPE VALUE -----------------

Oracle 通过ADR工具 收集ORA-600错误信息

 问题描述: 2014-06-10 在点检数据库预警文件时,出现Ora -00600 错误,并且Rman L1 备份失败,查询相关资料,得知是Bug:9835218.于是,提SR寻求Oracle 官方技术支持. Oracle回复如下: Your Service Request has been submitted as anORA-600/ORA-7445 issue based on the problem type you chose when logging the SR. Additio

plsql的错误信息与异常处理

7 错误消息与异常处理 7.1 异常的介绍 (1) 处理异常分为三个步骤:  A 声明异常  B 引发异常  C 处理异常 (2) 异常的特征  A 错误类型: ORA-xxxxx  运行时错误               PLS-xxxxx  编译错误  B 错误代码:xxxxx  C 错误的文本描述 案例1:编译错误的案例PLS SQL> create or replace procedure p1 is  2  begin  3  null;  4  end;  5  / Procedur

【Oracle错误集锦】:ORA-00119 & ORA-00132

有时候老天就是爱和你开玩笑,昨天好不容易配置好Oracle,能够用PL/SQL正常登录使用,今天突然就不行了.并且错误十分诡异,没有提示什么错误代码.输入用户名密码,点击登录后PL/SQL没有反映,直接卡死. 我就郁闷了,都不给提示怎么解决问题呢.突然想到Oracle肯定会有记录日志的地方.去查看一下应该会有惊喜. Oracle日志位置:D:\app\NiuNiu\product\11.2.0\dbhome_1\database\oradim.log 果然发现了两个错误: Tue Jun 23

oracle 12170错误

检查数据库发现数据库连接过一会就会自动断开.需要在 /u01/app/oracle/product/11R2/db_1/network/admin/samples下 listener.ora   sqlnet.ora 下添加信息 1.              listener.ora #修改12170错误 INBOUND_CONNECT_TIMEOUT_LISTENER = 30 2.               sqlnet.ora #修改12170错误 SQLNET.INBOUND_CON

add partition导致ora-4031错误

APPLIES TO: Oracle Database - Enterprise Edition - Version 11.2.0.4 to 11.2.0.4 [Release 11.2]Information in this document applies to any platform. SYMPTOMS In this case, the issue is observed in three different RAC databases, each on 11.2.0.4, that

11G RAC 11.2.0.1.0实例evict故障处理

Aix 7.1 参考文档: https://blogs.oracle.com/database4cn/rac Resolving ORA-481 and "terminating the instance due to error 481" (Doc ID 1950963.1) ORA-00481 After "The instance eviction reason is 0x2" due to Lack of Ticket (Doc ID 1644015.1)

ADRCI

ADRCI工具是Oracle11g才推出的新工具,主要用来管理alert文件.trace文件.dump文件.健康监事报告等. 这一篇简单介绍ADRCI工具. 用过11g的人都会发现,11g中alert文件以及trace文件的存放位置都发生了变化.从原来的ORACLE_BASE/admin/INSTANCE_NAME目录变成了ORACLE_BASE/diag/rdbms/DBNAME/INSTANCE_NAME目录. Oracle之所以修改了这个跨越多个版本都没有修改过的参数设置,就是因为Orac