Oracle数据库之由于突然断电造成oracle数据库的部分clob字段值变为(损毁)
小标 2019-02-21 来源 : 阅读 723 评论 0

摘要:本文主要向大家介绍了Oracle数据库之由于突然断电造成oracle数据库的部分clob字段值变为(损毁),通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

本文主要向大家介绍了Oracle数据库之由于突然断电造成oracle数据库的部分clob字段值变为(损毁),通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

Oracle数据库之由于突然断电造成oracle数据库的部分clob字段值变为(损毁)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

为了能够分批次执行,所以将所有大字段的表名和列名写入到一个表中,并打标识

create table temp_clob(

table_name varchar2(32),

column_name varchar2(40),

sfcl varchar2(2) 

)

 

insert into temp_clob 

select   table_name,column_name,'否'   from   cols  where data_type='CLOB' order by table_name,column_name

 

--建立记录表,记录找到的损毁字段所在的表,列,行

create table corrupt_lobs (

corrupt_rowid rowid,

table_name varchar2(32),

column_name varchar2(32));

 

遍历所有字段的值,找出损毁的clob字段

-- Created on 2018-07-04 by ADMINISTRATOR

declare 

 v_cur_CKD  sys_refcursor;

 sqltext varchar2(200); 

 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);

  n number;        

  row_id rowid;   

  clobtext clob;    

  begin  

  -- Test statements here   

  for cursor_lob in (select table_name,column_name   from   temp_clob   where sfcl='否' and rownum<100  order by table_name,column_name)  

  loop

  --    dbms_output.put_line(cursor_lob.table_name||','||cursor_lob.column_name);       

  sqltext :='select rowid r, '||cursor_lob.column_name||' from '||cursor_lob.table_name;

   open v_cur_CKD for sqltext;       

   fetch v_cur_CKD into row_id,clobtext; 

   while v_cur_CKD%found            

    loop                 

    begin         

    n:=dbms_lob.instr(clobtext,hextoraw('889911')); 

    exception    

    when error_1578 then insert into corrupt_lobs values (row_id,cursor_lob.column_name,cursor_lob.table_name); commit;

    when error_1555 then insert into corrupt_lobs values (row_id,cursor_lob.column_name,cursor_lob.table_name); commit;

    when error_22922 then insert into corrupt_lobs values (row_id,cursor_lob.column_name,cursor_lob.table_name); commit;

    end;

    fetch v_cur_CKD into row_id,clobtext;

    --    dbms_output.put_line(row_id); 

    end loop;

    close v_cur_CKD;

    update temp_clob set sfcl='是' where table_name=cursor_lob.table_name and column_name=cursor_lob.column_name; 

end loop; 

end;

恢复备份数据至测试库,找到生产环境中损毁的记录进行恢复,如果恢复不了就更新成null,防止业务报错

   

本文由职坐标整理并发布,希望对同学们学习Oracle有所帮助,更多内容请关注职坐标数据库Oracle数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程