Oracle数据库ORA-01555解决含clob和blob字段表报错快照过旧问题

 一、创建临时表

创建临时表corrupt_lobs_wfcaserun用于存放检查结果
create table corrupt_lobs_wfcaserun (corrupt_rowid rowid);

二、执行检查 

执行检查,并将检查出blob字段存在问题的数据的rowid放到临时表中
其中RISENET_NEW是数据库用户名,
OFFICE_WORKFLOWDOCUMENT是需要检查的表名,
DOCUMENTCONTENT是blob字段名,
该表有多个blob字段需逐一检查

DECLARE error_1578 EXCEPTION ; error_1555 EXCEPTION ; error_22922 EXCEPTION ; pragma exception_init (error_1578, - 1578) ; pragma exception_init (error_1555, - 1555) ; pragma exception_init (error_22922, - 22922) ; num NUMBER ;
BEGIN
	FOR cursor_lob IN (
		SELECT
			ROWID r,
			DOCUMENTCONTENT
		FROM
			RISENET_NEW.OFFICE_WORKFLOWDOCUMENT
	) loop
BEGIN
	num := dbms_lob. INSTR (
		cursor_lob.DOCUMENTCONTENT,
		HEXTORAW ('889911')
	) ; EXCEPTION
WHEN error_1578 THEN
	INSERT INTO corrupt_lobs_wfcaserun
VALUES
	(cursor_lob.r) ; COMMIT ;
WHEN error_1555 THEN
	INSERT INTO corrupt_lobs_wfcaserun
VALUES
	(cursor_lob.r) ; COMMIT ;
WHEN error_22922 THEN
	INSERT INTO corrupt_lobs_wfcaserun
VALUES
	(cursor_lob.r) ; COMMIT ;
END ;
END loop ;
END ;

 三、删除原表有问题的数据

DELETE
FROM
	RISENET_NEW.OFFICE_WORKFLOWDOCUMENT
WHERE
	ROWID IN (
		SELECT
			corrupt_rowid
		FROM
			corrupt_lobs_wfcaserun
	);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值