(FAQ)EAS Cloud单据提交异常,无法正常保存提交--BLOB坏块导致
(FAQ)EAS Cloud单据提交异常,无法正常保存提交--BLOB坏块导致
原因分析: 1.出现问题前,数据库服务器异常重启过。 2.单据提交的时候,通过EM查看,会产生锁等待。 3.通过后台日志查看,只要产生了锁等待,就会对应的抛出一个ORA-00600错误。 4.通过后台报错 ORA-00600 错误跟踪,发现是一个INSERT 语句插入导致(可能是坏块造成) 5.通过 select count(*) from t_wfr_procinstdata 会抛出错误,说明此数据文件下的某个块存在问题: select count(*) from t_wfr_procinstdata * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 39, block # 24961) ORA-01110: data file 7: '/oracle/oradata/t_wfr_procinstdata.dbf' 解决方法: 1.查询出坏块点: 方法一:通过表空间 object_id,file_ID,block#,row# 构造ROWID 1)通过FILE_ID,BLOCK 查询出 segment_name: SQL> SELECT SEGMENT_TYPE, OWNER, SEGMENT_NAME FROM DBA_EXTENTS WHERE FILE_ID = 39 AND 24961 BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS -1 ; SEGMENT_TYPE OWNER SEGMENT_NAME ------------------ ------------------------------ ------------------------------ TABLE DATA CAT_ZONE_PRODUCT 2)下面构造坏块的ROWID: SQL> CONN DATA Enter password: Connected. SQL> SELECT DATA_OBJECT_ID FROM USER_OBJECTS WHERE OBJECT_NAME = 'CAT_ZONE_PRODUCT'; DATA_OBJECT_ID -------------- 54649 SQL> SELECT DBMS_ROWID.ROWID_CREATE(1, 54649, 39, 24961, 0) FROM DUAL; DBMS_ROWID.ROWID_C ------------------ AAANV5AAnAAAGGBAAA 3)通过ROWID 查询对应的列数据 SELECT ROWID,XXX FROM TABLE_NAME 方法二: SQL> create table corrupted_lob_data (corrupted_rowid rowid); SQL> set concat off SQL>declare error_1555 exception; pragma exception_init(error_1555,-1555); num number; begin for cursor_lob in (select rowid r, &&lob_column from &table_owner.&table_with_lob) loop begin num:=dbms_lob.instr(cursor_lob.&&lob_column,hextoraw('889911')) ; exception when error_1555 then insert into corrupted_lob_data values (cursor_lob.r); commit; end; end loop; end; select * from corrupted_lob_data select * from t_wfr_procinstdata where rowid='AAEtzZAAOAACBpiAAP' (BLOB坏的字段会出现ERROR字样) 2.找到对应坏块的ROWID,删除后重新插入,问题解决。 相关日志:
原因分析: 1.出现问题前,数据库服务器异常重启过。 2.单据提交的时候,通过EM查看,会产生锁等待。 3.通过后台日志查看,只要产生了锁等待,就会对应的抛出一个ORA-00600错误。 4.通过后台报错 ORA-00600 错误跟踪,发现是一个INSERT 语句插入导致(可能是坏块造成) 5.通过 select count(*) from t_wfr_procinstdata 会抛出错误,说明此数据文件下的某个块存在问题: select count(*) from t_wfr_procinstdata * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 39, block # 24961) ORA-01110: data file 7: '/oracle/oradata/t_wfr_procinstdata.dbf' 解决方法: 1.查询出坏块点: 方法一:通过表空间 object_id,file_ID,block#,row# 构造ROWID 1)通过FILE_ID,BLOCK 查询出 segment_name: SQL> SELECT SEGMENT_TYPE, OWNER, SEGMENT_NAME FROM DBA_EXTENTS WHERE FILE_ID = 39 AND 24961 BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS -1 ; SEGMENT_TYPE OWNER SEGMENT_NAME ------------------ ------------------------------ ------------------------------ TABLE DATA CAT_ZONE_PRODUCT 2)下面构造坏块的ROWID: SQL> CONN DATA Enter password: Connected. SQL> SELECT DATA_OBJECT_ID FROM USER_OBJECTS WHERE OBJECT_NAME = 'CAT_ZONE_PRODUCT'; DATA_OBJECT_ID -------------- 54649 SQL> SELECT DBMS_ROWID.ROWID_CREATE(1, 54649, 39, 24961, 0) FROM DUAL; DBMS_ROWID.ROWID_C ------------------ AAANV5AAnAAAGGBAAA 3)通过ROWID 查询对应的列数据 SELECT ROWID,XXX FROM TABLE_NAME 方法二: SQL> create table corrupted_lob_data (corrupted_rowid rowid); SQL> set concat off SQL>declare error_1555 exception; pragma exception_init(error_1555,-1555); num number; begin for cursor_lob in (select rowid r, &&lob_column from &table_owner.&table_with_lob) loop begin num:=dbms_lob.instr(cursor_lob.&&lob_column,hextoraw('889911')) ; exception when error_1555 then insert into corrupted_lob_data values (cursor_lob.r); commit; end; end loop; end; select * from corrupted_lob_data select * from t_wfr_procinstdata where rowid='AAEtzZAAOAACBpiAAP' (BLOB坏的字段会出现ERROR字样) 2.找到对应坏块的ROWID,删除后重新插入,问题解决。 相关日志:
(FAQ)EAS Cloud单据提交异常,无法正常保存提交--BLOB坏块导致
(FAQ)EAS Cloud单据提交异常,无法正常保存提交--BLOB坏块导致原因分析:1.出现问题前,数据库服务器异常重启过。2.单据提交的时候,通过E...
点击下载文档
本文2024-09-16 22:49:13发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-50579.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章