返回顶部
首页 > 资讯 > 精选 >Oracle数据库提示ORA-19566 LOB怎么处理
  • 612
分享到

Oracle数据库提示ORA-19566 LOB怎么处理

2023-06-04 15:06:45 612人浏览 薄情痞子
摘要

本篇内容介绍了“oracle数据库提示ORA-19566 LOB怎么处理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!故障现象:在晚上的生产

本篇内容介绍了“oracle数据库提示ORA-19566 LOB怎么处理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

故障现象:

在晚上的生产库自动备份时,备份失败,出现以下错误提示:

RMAN-03009: failure of backup command on c1 channel at 06/11/2020 03:31:02

ORA-19566: exceeded limit of 0 corrupt blocks for file +DATA/orcl/datafile/data12.dbf

continuing other job steps, job failed will not be re-run.

  1. 对坏块进行诊断

使用DBV进行坏块检测:

dbv file=+DATA/orcl/datafile/data12.dbf blocksize=8192

DBVERIFY: Release 19.0.0.0.0 - Production on Sun Jun 21 20:49:57 2020

Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.

DBVERIFY - Verification starting : FILE = +DATA/orcl/datafile/data12.dbf

Page 1539240 is marked corrupt

Corrupt block relative dba: 0x05177ca8 (file 20, block 1539240)

Bad header found during dbv:

Data in bad block:

type: 6 fORMat: 2 rdba: 0x0cdceea8

last change scn: 0x0000.057e.07c6ceb9 seq: 0x2 flg: 0x04

spare3: 0x0

consistency value in tail: 0xceb90602

check value in block header: 0x4328

computed block checksum: 0x0

最终显示有96个坏块

使用另外一种方法检测,检查结果相同

rman target /

RMAN> run{

2> allocate channel d1 type disk;

3> backup check logical validate datafile 20;

4> release channel d1;

5> }

诊断结果显示,有96个坏块,坏块的详细编号如下:

[root @hisdb01 ~]# cat /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_ora_266550.trc | grep ‘Corrupt block’

Corrupt block relative dba: 0x05177ca8 (file 20, block 1539240)

sql> select * from V$DATABASE_BLOCK_CORRUPTION;

  FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO     CON_ID

    20    1540136         24                  0 CORRUPT            0    20    1540328         24                  0 CORRUPT            0    20    1539240         24                  0 CORRUPT            0    20    1539432         24                  0 CORRUPT            0

为了保险起见,对整个库进行诊断

RMAN> configure device type disk parallelism 4; 
RMAN> backup validate check logical database;

还好,其他数据文件没有发现坏块。

检查坏块上的数据对象:

select owner,segment_name,segment_type,tablespace_name from dba_extents where file_id=20 and 1540350 between block_id and block_id+blocks-1;

OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME


test SYS_LOB0000098274C00002$$ LOBSEGMENT data

全都是一张表上的LOB 字段。

SQL> select OWNER,TABLE_NAME from dba_lobs where SEGMENT_NAME=’SYS_LOB0000098274C00002$$’;

OWNER TABLE_NAME


test mytable

尝试跳过坏块

SQL> execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS(‘OWNER’,’TABLE_NAME’);

PL/SQL procedure successfully completed.

结果RMAN备份还是报错。

在rman中设置允许出现的坏块最大值

run{

set maxcorrupt for datafile 20 to 97;

allocate channel c1 device type disk;

allocate channel c2 device type disk;

backup database FORMAT ‘/expdp/his %d%T_%U.bak’;

crosscheck backupset;

release channel c1;

release channel c2;

}

结果备份成功。

但expdp导出时,仍然报错

ORA-02354: error in exporting/importing data

ORA-01578: ORACLE data block corrupted (file # 20, block # 1540158)

网上有资料说设置10231事件可以跳过错误

alter system set events=’10231 trace name context forever,level 10’;

设置以后。expdp导出仍然报错。

处理坏块

按照metalink文档上的资料 Doc ID 1900424.1 和 Doc ID 472231.1) 解决方案如下:

(1)用备份恢复坏块

rman> catalog datafilecopy ‘/u01/backup/users01.dbf’;

rman> catalog arcHivelog ‘/u01/backup/archivelog/Arch_ocl_1_30.dbf’

rman> blockrecover datafile 5 block 99,100,101;

但当前没有可用的备份,这条路走不通。

(2)对出现坏块的表记录进行清理

只剩最后一招了, 对出现坏块的表记录进行清理, Doc ID 293515.1操作 说明如下:

drop table bad_rows;

create table bad_rows (row_id ROWID ,oracle_error_code number);

set concat off

set serveroutput on

declare

n number;

error_code number;

bad_rows number := 0;

ora1578 EXCEPTION;

ora600 EXCEPTION;

PRAGMA EXCEPTION_INIT(ora1578, -1578);

PRAGMA EXCEPTION_INIT(ora600, -600);

begin

for cursor_lob in (select rowid rid, &&lob_column from &&table_owner.&&table_with_lob) loop

begin

 n:=dbms_lob.instr(cursor_lob.&&lob_column,hextoraw('889911')) ;

exception

when ora1578 then bad_rows := bad_rows + 1; insert into bad_rows values(cursor_lob.rid,1578); commit;when ora600 then bad_rows := bad_rows + 1; insert into bad_rows values(cursor_lob.rid,600); commit;when others then error_code:=SQLCODE; bad_rows := bad_rows + 1; insert into bad_rows values(cursor_lob.rid,error_code); commit;

end;

end loop;

dbms_output.put_line(‘Total Rows identified with errors in LOB column: ‘||bad_rows);

end;

/

select * from bad_rows;

When prompted by variable values and following our example:

nter value for lob_column: EMPLOYEE_ID_LOB

Enter value for table_owner: SCOTT

Enter value for table_with_lob: EMP

Update the lob column with empty lob to avoid ORA-1578 and ORA-26040:

SQL> set concat off

SQL> update &table_owner.&table_with_lob

    set &lob_column = empty_blob() where rowid in (select row_id from bad_rows);

查出lob字段坏块所在的行,然后把那个LOB字段的列,置为 empty_blob()

SQL> create table corrupted_data (corrupted_rowid rowid);

Table created.

SQL> set concat off

SQL> declare

2 error_1578 exception;

3 pragma exception_init(error_1578,-1578);

4 n number;

5 begin

6 for cursor_lob in (select rowid r, &&lob_column from &table_owner.&table_with_lob) loop

7 begin

8 n:=dbms_lob.instr(cursor_lob.&&lob_column,hextoraw(‘889911’)) ;

9 exception

10 when error_1578 then

11 insert into corrupted_data values (cursor_lob.r);

12 commit;

13 end;

14 end loop;

15 end;

16 /

Enter value for lob_column: DATA

Enter value for table_owner: owner

Enter value for table_with_lob: table_name

old 6: for cursor_lob in (select rowid r, &&lob_column from &table_owner.&table_with_lob) loop

new 6: for cursor_lob in (select rowid r, DATA from owner.table_name) loop

old 8: n:=dbms_lob.instr(cursor_lob.&&lob_column,hextoraw(‘889911’)) ;

new 8: n:=dbms_lob.instr(cursor_lob.DATA,hextoraw(‘889911’)) ;

SQL> set concat off 
SQL> update &table_owner.&table_with_lob 
set &lob_column = empty_blob() 
where rowid in (select corrupted_rowid from corrupted_data);

“Oracle数据库提示ORA-19566 LOB怎么处理”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Oracle数据库提示ORA-19566 LOB怎么处理

本文链接: https://lsjlt.com/news/238394.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle数据库提示ORA-19566 LOB怎么处理
    本篇内容介绍了“Oracle数据库提示ORA-19566 LOB怎么处理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!故障现象:在晚上的生产...
    99+
    2023-06-04
  • ORA-19566 exceeded limit of 0 corrupt blocks数据坏块处理
    问题描述RMAN备份失败,报错如下:  一般坏块处理过程首先确定是什么段、哪个段坏了,是索引还是表? 执行以下语句看哪个段坏了SQL>Select b.segment_name,b.s...
    99+
    2023-06-06
  • Oracle数据库中怎么处理NVARCHAR2数据类型
    在Oracle数据库中,NVARCHAR2数据类型用于存储Unicode字符数据,其中每个字符占据两个字节的存储空间。要处理NVAR...
    99+
    2024-04-02
  • Oracle数据库重复数据处理方法:只提取一条
    在实际数据库管理的过程中,经常会遇到重复数据的情况,这些重复数据不仅会占用数据库空间,还会影响查询和分析的效率。针对Oracle数据库中重复数据的处理,本文将介绍一种方法:只提取一条重...
    99+
    2024-03-08
    oracle 处理 数据重复 sql语句
  • oracle数据库怎么样显示
    oracle 数据库提供多种显示数据的方法:select 语句:检索特定数据,如从 customers 表中检索以 "smith" 结尾的姓氏。sqlplus:命令行界面查询,...
    99+
    2024-04-18
    oracle 移动应用程序
  • oracle 12c数据库报ORA-01654错的问题处理
    现象:用的致远的OA,今天用户在提交数据的时候报这个这个错   处理过程: 查看表空间的使用情况 SELECT T.TABLESPACE_NAME,D.FILE_NAME,D.AUTOEXTENSIBLE,D.BYTES,D.MA...
    99+
    2017-08-04
    oracle 12c数据库报ORA-01654错的问题处理 数据库入门 数据库基础教程 数据库 mysql
  • oracle数据库卸载不干净怎么处理
    如果您的Oracle数据库卸载后不干净,您可以尝试以下方法来彻底清除数据库残留的文件和配置信息: 手动删除数据库文件:在数据库安...
    99+
    2024-04-09
    oracle
  • 如何处理PHP连接PostgreSQL数据库的错误提示
    如何处理PHP连接PostgreSQL数据库的错误提示 在PHP开发中,连接数据库是常见的操作,在连接PostgreSQL数据库时,有时候会遇到一些错误提示。本文将介绍如何处理PHP连...
    99+
    2024-02-27
    数据库错误处理 错误提示处理
  • 还原数据库数据库提示正在还原中怎么办
    小编给大家分享一下还原数据库数据库提示正在还原中怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!还原数据库时,提示还原成功,可是数据库列表中该数据库显示正在还原中:执行此命令即可:RE...
    99+
    2024-04-02
  • Oracle数据库失效对象处理
    近期对数据库进行巡检,发现数据库业务用户(非 SYS/Public)下存在失效对象。对失效对象进行分析,主要包括失效的视图、物化视图、函数、包、触发器等。思考:基于以下原因,建议对失效对象进行处理:1、通过失效的对象,可能能够反推发现业务...
    99+
    2015-09-11
    Oracle数据库失效对象处理
  • 怎么理解数据库ORA-24247问题
    这篇文章主要讲解了“怎么理解数据库ORA-24247问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解数据库ORA-24247问题”吧! ORA-...
    99+
    2024-04-02
  • 怎么解决数据库执行alter database open resetlogs时提示ORA-00392错误
    这篇文章主要介绍“怎么解决数据库执行alter database open resetlogs时提示ORA-00392错误”,在日常操作中,相信很多人在怎么解决数据库执行alter database ope...
    99+
    2024-04-02
  • mysql数据库中怎么处理重复数据
    这篇文章给大家介绍mysql数据库中怎么处理重复数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。方法一:防止出现重复数据也就是说我们再设计表的时候,就应该对这些数据设置一个UNIQUE 索引,在插入的时候就可以保证其...
    99+
    2023-06-19
  • Oracle数据库中的并行处理是什么
    在Oracle数据库中,并行处理是指将一个查询或操作分成多个部分,并同时在多个处理器或服务器上执行这些部分,以加快查询或操作的执行速...
    99+
    2024-03-02
    Oracle
  • 数据库1045错误怎么处理
    数据库1045错误是因为用户没有足够的权限访问数据库导致的。处理方法如下: 检查用户名和密码是否正确:确保你正在使用正确的用户名...
    99+
    2023-10-28
    数据库
  • 怎么解决Oracle数据库shutdown报错ORA-01031
    这篇文章主要介绍“怎么解决Oracle数据库shutdown报错ORA-01031”,在日常操作中,相信很多人在怎么解决Oracle数据库shutdown报错ORA-01031问题上存在疑惑,小编查阅了各式...
    99+
    2024-04-02
  • 怎么处理Oracle ORA-03113 ORA-600故障
    本篇内容介绍了“怎么处理Oracle ORA-03113 ORA-600故障”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读...
    99+
    2024-04-02
  • oracle数据库怎么建库
    在Oracle数据库中,可以使用`CREATE DATABASE`语句来创建数据库。首先,确保你有适当的权限来创建数据库。然后,打开...
    99+
    2023-08-29
    Oracle
  • Oracle 数据库归档满处理办法
    一、 问题影响如果数据库归档不设置归档删除策略或归档暴增导致归档空间满,数据库将无法提供服务,甚至无法关闭数据库。 因为关闭数据库会出发写日志,此时空间满了是不能写入日志进而导致数据库无法启动。 业务系统将...
    99+
    2024-04-02
  • 数据库加速魔法:让数据库处理速度提升一倍
    ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作