前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oracle坏块修复实例

oracle坏块修复实例

作者头像
jeanron100
发布2018-03-13 16:57:44
1.3K0
发布2018-03-13 16:57:44
举报

最近几天发现库里有坏块了,环境是11gR2, linux平台的64位的库。以下是我的修复办法,基于dbms_repair做的在线修复,也可以基于备份rman来修复,archivelog,noarchive log可能修复的方式有所不同。 -->首先从alert.log里面发现如下的错误。 DDE: Problem Key 'ORA 1110' was flood controlled (0x1) (no incident) ORA-01110: data file 8: '/dbTS2/oracle/TESTDB2/oradata3/data/TESTDB2_pool_data_03.dbf' Byte offset to file# 8 block# 570051 is 374890496 Incident 1567129 created, dump file: -->从trace文件里有更详细的描述。 /opt/app/oracle/testdb2/admin/TESTDB2/diag/rdbms/TESTDB2/TESTDB2/incident/incdir_1567129/TESTDB2_o ra_5396_i1567129.trc ORA-01578: ORACLE data block corrupted (file # 8, block # 570051) ORA-01110: data file 8: '/dbTS2/oracle/TESTDB2/oradata3/data/TESTDB2_pool_data_03.dbf' Dump continued from file: /opt/app/oracle/testdb2/admin/TESTDB2/diag/rdbms/TESTDB2/TESTDB2/trace/TESTDB2_ora_5396.trc ORA-01578: ORACLE data block corrupted (file # 8, block # 570051) ORA-01110: data file 8: '/dbTS2/oracle/TESTDB2/oradata3/data/TESTDB2_pool_data_03.dbf' ========= Dump for incident 1567129 (ORA 1578) ======== *** 2013-12-11 07:25:21.257 dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0) ----- Current SQL Statement for this session (sql_id=7u9gsk798bvrp) ----- SELECT xxxxx FROM APP_CONTROL AC, APP_BILL_PROC BL WHERE APP.DATA_GROUP IS NOT NULL AND BL.PROCESS_ID = APP.NXT_PGM_NAME AND APP.FILE_STATUS IN ('RD', 'IU', 'CN') GROUP BY xxxxxxx -->尝试查看坏块的segment_type,确认一下是Index还是table segment出问题了。查询没有任何结果。 SQL> select segment_name,tablespace_name,segment_type,block_id,file_id,bytes from dba_extents where block_id=570051 and file_id=8; no rows selected -->运行日志中的sql,果断的报错了。 SELECT xxxxx FROM APP_CONTROL AC, APP_BILL_PROC BL WHERE APP.DATA_GROUP IS NOT NULL AND BL.PROCESS_ID = APP.NXT_PGM_NAME AND APP.FILE_STATUS IN ('RD', 'IU', 'CN') GROUP BY xxxxxxx * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 8, block # 570051) ORA-01110: data file 8: '/dbTS2/oracle/TESTDB2/oradata3/data/TESTDB2_pool_data_03.dbf' -->只是从相关的表里select count没有任何问题。 SQL> select count(*)from APP_CONTROL; COUNT(*) ---------- 1613 SQL> select count(*)from APP_BILL_PROC ; COUNT(*) ---------- 103 -->再次验证,还是报错。 SELECT xxxxx FROM APP_CONTROL AC, APP_BILL_PROC BL WHERE APP.DATA_GROUP IS NOT NULL AND BL.PROCESS_ID = APP.NXT_PGM_NAME AND APP.FILE_STATUS IN ('RD', 'IU', 'CN') GROUP BY xxxxxxx * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 8, block # 570051) ORA-01110: data file 8: '/dbTS2/oracle/TESTDB2/oradata3/data/TESTDB2_pool_data_03.dbf' --通过sys来调用dbms_repair来修复。 SQL> BEGIN 2 DBMS_REPAIR.ADMIN_TABLES ( 3 TABLE_NAME => 'REPAIR_TABLE', 4 TABLE_TYPE => dbms_repair.repair_table, 5 ACTION => dbms_repair.create_action, 6 TABLESPACE => '&tablespace_name'); 7 END; 8 / Enter value for tablespace_name: old 6: TABLESPACE => '&tablespace_name'); new 6: TABLESPACE => 'POOL_DATA'); PL/SQL procedure successfully completed. -->以上的步骤会生成一个表repair_table SQL> desc repair_table Name Null? Type ----------------------------------------- -------- ---------------------------- OBJECT_ID NOT NULL NUMBER TABLESPACE_ID NOT NULL NUMBER RELATIVE_FILE_ID NOT NULL NUMBER BLOCK_ID NOT NULL NUMBER CORRUPT_TYPE NOT NULL NUMBER SCHEMA_NAME NOT NULL VARCHAR2(30) OBJECT_NAME NOT NULL VARCHAR2(30) BASEOBJECT_NAME VARCHAR2(30) PARTITION_NAME VARCHAR2(30) CORRUPT_DESCRIPTION VARCHAR2(2000) REPAIR_DESCRIPTION VARCHAR2(200) MARKED_CORRUPT NOT NULL VARCHAR2(10) CHECK_TIMESTAMP NOT NULL DATE FIX_TIMESTAMP DATE REFORMAT_TIMESTAMP DATE -->来定位schema object中的坏块情况 SQL> set serveroutput on DECLARE num_corrupt INT; SQL> 2 BEGIN 3 num_corrupt := 0; 4 DBMS_REPAIR.CHECK_OBJECT ( 5 SCHEMA_NAME => '&schema_name', 6 OBJECT_NAME => '&object_name', 7 REPAIR_TABLE_NAME => 'REPAIR_TABLE', 8 corrupt_count => num_corrupt); 9 DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt)); 10 END; 11 / Enter value for schema_name: TSTAPPO2 old 5: SCHEMA_NAME => '&schema_name', new 5: SCHEMA_NAME => 'TSTAPPO2', Enter value for object_name: APP_CONTROL old 6: OBJECT_NAME => '&object_name', new 6: OBJECT_NAME => 'APP_CONTROL', number corrupt: 1 PL/SQL procedure successfully completed. -->查询生成的坏块表,里面有相应的记录。指向的坏块确实是日志中指定的。 SQL> select BLOCK_ID, CORRUPT_TYPE, CORRUPT_DESCRIPTION 2 from REPAIR_TABLE; BLOCK_ID CORRUPT_TYPE ---------- ------------ CORRUPT_DESCRIPTION -------------------------------------------------------------------------------- 570051 6148 -->修复坏块 SQL> DECLARE num_fix INT; 2 BEGIN 3 num_fix := 0; 4 DBMS_REPAIR.FIX_CORRUPT_BLOCKS ( 5 SCHEMA_NAME => '&schema_name', 6 OBJECT_NAME=> '&object_name', 7 OBJECT_TYPE => dbms_repair.table_object, 8 REPAIR_TABLE_NAME => 'REPAIR_TABLE', 9 FIX_COUNT=> num_fix); 10 DBMS_OUTPUT.PUT_LINE('num fix: ' || to_char(num_fix)); 11 END; 12 / Enter value for schema_name: TSTAPPO2 old 5: SCHEMA_NAME => '&schema_name', new 5: SCHEMA_NAME => 'TSTAPPO2', Enter value for object_name: APP_CONTROL old 6: OBJECT_NAME=> '&object_name', new 6: OBJECT_NAME=> 'APP_CONTROL', num fix: 0 PL/SQL procedure successfully completed. -->对于坏块的操作都能够skip SQL> BEGIN DBMS_REPAIR.SKIP_CORRUPT_BLOCKS ( 2 3 SCHEMA_NAME => '&schema_name', 4 OBJECT_NAME => '&object_name', 5 OBJECT_TYPE => dbms_repair.table_object, 6 FLAGS => dbms_repair.SKIP_FLAG); 7 END; 8 / Enter value for schema_name: TSTAPPO2 old 3: SCHEMA_NAME => '&schema_name', new 3: SCHEMA_NAME => 'TSTAPPO2', Enter value for object_name: APP_CONTROL old 4: OBJECT_NAME => '&object_name', new 4: OBJECT_NAME => 'APP_CONTROL', PL/SQL procedure successfully completed. -->再次运行以上的sql,尝试。 SQL> l SELECT xxxxx FROM APP_CONTROL AC, APP_BILL_PROC BL WHERE APP.DATA_GROUP IS NOT NULL AND BL.PROCESS_ID = APP.NXT_PGM_NAME AND APP.FILE_STATUS IN ('RD', 'IU', 'CN') GROUP BY xxxxxxx ;

working....

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • working....
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档