Oracle 11gR2 坏块修复实例一则

背景

前段时间在 Oracle 11gR2 数据库中发现了坏块问题。环境是 64 位 Linux 平台。本文将详细介绍如何使用 DBMS_REPAIR 进行在线修复,当然也可以基于备份和 RMAN 的修复方法这里暂时不做介绍。

发现坏块

1. 从 alert.log 中发现错误

alert.log 文件中发现了如下错误信息:

DDE: Problem Key 'ORA 1110' was flood controlled (0x1) (no incident)
ORA-01110: data file 8: '/u01/app/oracle/TESTDB/oradata/data/TESTDB_test_data_03.dbf'
Byte offset to file# 8 block# 570051 is 374890496
Incident 1567129 created, dump file:

2. 从 trace 文件中获取详细信息

trace 文件中找到了更详细的错误描述:

/u01/app/oracle/testdb/admin/TESTDB/diag/rdbms/TESTDB/TESTDB/incident/incdir_1567129/TESTDB_ora_5396_i1567129.trc
ORA-01578: ORACLE data block corrupted (file # 8, block # 570051)
ORA-01110: data file 8: '/u01/app/oracle/TESTDB/oradata/data/TESTDB_test_data_03.dbf'Dump continued from file: /u01/app/oracle/testdb/admin/TESTDB/diag/rdbms/TESTDB/TESTDB/trace/TESTDB_ora_5396.trc
ORA-01578: ORACLE data block corrupted (file # 8, block # 570051)
ORA-01110: data file 8: '/u01/app/oracle/TESTDB/oradata/data/TESTDB_test_data_03.dbf'Dump for incident 1567129 (ORA 1578)

3. 查询坏块的段类型

尝试查询坏块的段类型,确认是索引还是表段出问题了。查询结果为空:

SQL> select segment_name, tablespace_name, segment_type, block_id, file_id, bytesfrom dba_extentswhere block_id = 570051 and file_id = 8;no rows selected

4. 运行日志中的 SQL 语句

运行日志中的 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 xxxxxxxERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 8, block # 570051)
ORA-01110: data file 8: '/u01/app/oracle/TESTDB/oradata/data/TESTDB_TEST_DATA_03.dbf'

5. 验证相关表

查询相关表的记录数,没有问题:

SQL> select count(*) from APP_CONTROL;
COUNT(*)
----------
1613SQL> select count(*) from APP_BILL_PROC;
COUNT(*)
----------
103

6. 再次验证 SQL 语句

再次运行日志中的 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 xxxxxxxERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 8, block # 570051)
ORA-01110: data file 8: '/u01/app/oracle/TESTDB/oradata/data/TESTDB_test_data_03.dbf'

使用 DBMS_REPAIR 进行在线修复

1. 创建修复表

通过 DBMS_REPAIR.ADMIN_TABLES 创建修复表 REPAIR_TABLE

SQL> BEGIN2  DBMS_REPAIR.ADMIN_TABLES (3  TABLE_NAME => 'REPAIR_TABLE',4  TABLE_TYPE => dbms_repair.repair_table,5  ACTION => dbms_repair.create_action,6  TABLESPACE => 'test_DATA');7  END;8  /PL/SQL procedure successfully completed.

2. 描述修复表

描述生成的修复表 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

3. 检查坏块

使用 DBMS_REPAIR.CHECK_OBJECT 检查坏块:

SQL> set serveroutput on
SQL> DECLARE2  num_corrupt INT;3  BEGIN4  num_corrupt := 0;5  DBMS_REPAIR.CHECK_OBJECT (6  SCHEMA_NAME => 'TSTAPP',7  OBJECT_NAME => 'APP_CONTROL',8  REPAIR_TABLE_NAME => 'REPAIR_TABLE',9  corrupt_count => num_corrupt);10  DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));11  END;12  /number corrupt: 1
PL/SQL procedure successfully completed.

4. 查询坏块记录

查询生成的坏块表,确认坏块位置:

SQL> select BLOCK_ID, CORRUPT_TYPE, CORRUPT_DESCRIPTION2  from REPAIR_TABLE;BLOCK_ID CORRUPT_TYPE
---------- ------------
CORRUPT_DESCRIPTION
--------------------------------------------------------------------------------
570051           6148

5. 修复坏块

使用 DBMS_REPAIR.FIX_CORRUPT_BLOCKS 修复坏块:

SQL> DECLARE2  num_fix INT;3  BEGIN4  num_fix := 0;5  DBMS_REPAIR.FIX_CORRUPT_BLOCKS (6  SCHEMA_NAME => 'TSTAPP',7  OBJECT_NAME => 'APP_CONTROL',8  OBJECT_TYPE => dbms_repair.table_object,9  REPAIR_TABLE_NAME => 'REPAIR_TABLE',10  FIX_COUNT => num_fix);11  DBMS_OUTPUT.PUT_LINE('num fix: ' || to_char(num_fix));12  END;13  /num fix: 0
PL/SQL procedure successfully completed.

6. 跳过坏块

使用 DBMS_REPAIR.SKIP_CORRUPT_BLOCKS 跳过坏块:

SQL> BEGIN2  DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (3  SCHEMA_NAME => 'TSTAPP',4  OBJECT_NAME => 'APP_CONTROL',5  OBJECT_TYPE => dbms_repair.table_object,6  FLAGS => dbms_repair.SKIP_FLAG);7  END;8  /PL/SQL procedure successfully completed.

7. 再次运行 SQL 语句

再次运行之前的 SQL 语句,验证修复效果:

SQL> SELECT xxxxx FROM APP_CONTROL AC, APP_BILL_PROC BL2  WHERE APP.DATA_GROUP IS NOT NULL3  AND BL.PROCESS_ID = APP.NXT_PGM_NAME4  AND APP.FILE_STATUS IN ('RD', 'IU', 'CN')5  GROUP BY xxxxxxx;-- 成功执行,不再报错

结论

通过使用 DBMS_REPAIR,我们成功地在线修复了 Oracle 11gR2 数据库中的坏块问题。这种方法适用于需要快速恢复业务的情况。此外,还可以通过备份和 RMAN 进行更彻底的修复,具体方法取决于数据库的归档模式(ARCHIVELOG 或 NOARCHIVELOG)后面有机会再总结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/478335.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能显示屏插座:能否成为家庭用电安全的守护天使?

关键词:显示屏插座、LCD显示屏插座、LCD插座、智能计量插座、计量监测插座 最近,一则令人揪心的新闻在网络上疯传 在一个老旧小区里,由于电线老化和插座过载问题,引发了一场小型火灾。火势迅速蔓延,虽然幸运的是没有…

SAP_MM/CO模块-超详细的CK11N/CK40N取值逻辑梳理(十几种业务场景,1.76W字)

一、业务背景 财务月结完成后,对次月物料进行成本发布时,经常会提物料成本不准的问题,譬如说同一个物料,CK40N发布的成本与CK11N发布的成本对不上;再有就是因为物料有多个生产版本,多个采购价格,多个货源清单等主数据,导致CK11N发布成本的时候,跟用户理解的取数逻辑对…

今天你学C++了吗?——C++中的类与对象(第二集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

部署实战(二)--修改jar中的文件并重新打包成jar文件

一.jar文件 JAR 文件就是 Java Archive ( Java 档案文件),它是 Java 的一种文档格式JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,多出了一个META-INF/MANIFEST.MF 文件META-INF/MANIFEST.MF 文件在生成 JAR 文件的时候…

微信小程序+Vant-自定义选择器组件(多选

实现效果 无筛选,如有需要可参照单选组件中的方法.json文件配置"component": true,columns需要处理成含dictLabel和dictValue字段,我是这样处理的: let list arr.map(r > {return {...r,dictValue: r.xxxId,dictLabel: r.xxx…

.NET Core发布网站报错 HTTP Error 500.31

报错如图: 解决办法: 打开任务管理器》》服务》》找到这仨服务,右键启动即可,如果已经启动了就重启:

Canvas 前端艺术家

目前各种数据来看,前端未来在 数据可视化 和 AI 这两个领域会比较香,而 Canvas 是 数据可视化 在前端方面的基础技术。所以给大家唠唠Canvas这个魔幻工具。 Canvas 介绍 Canvas 中文名叫 “画布”,是 HTML5 新增的一个标签。Canvas 允许开发…

Leetcode142. 环形链表 II(HOT100)

链接 我的错误代码: class Solution { public:ListNode *detectCycle(ListNode *head) {if(!head||!head->next)return nullptr;ListNode* f head->next,*s head;while(f){f f->next,s s->next;if(!f)return nullptr;f f->next;if(fs){ListNo…

centos安装小火车

平时没事闲着 装个小火车玩-------->>>>> yum install sl.x86_64 启动命令 sl 就会出现以下场景

JavaScript的let、var、const

这张图片主要介绍了JavaScript中的三种变量声明方式:let、var和const。 1. let 含义:let是现在实际开发中常用的变量声明方式。特点: 块级作用域:let声明的变量只在其所在的块级作用域内有效。例如:{let x 10; } co…

替换Nacos的MySQL驱动

前言:替换Nacos的MySQL驱动能实现使Nacos支持MySQL8.0及以上版本的MySQL数据库 注:下述教程会使用命令先解压Nacos的jar包然后重新用命令把Nacos压缩成jar包,不然直接用压缩工具替换MySQL驱动后的Nacos是会启动不起来的(因为没有替…

蓝桥杯每日真题 - 第21天

题目:(空间) 题目描述(12届 C&C B组A题) 解题思路: 转换单位: 内存总大小为 256MB,换算为字节: 25610241024268,435,456字节 计算每个整数占用空间: 每个 32 位整数占用…

AI赋能电商:构建高效、智能化的新零售生态

随着人工智能(AI)技术的不断进步,其在电商领域的应用日益广泛,从购物推荐到供应链管理,再到商品定价,AI正在全面改变传统电商的运营模式,并推动行业向智能化和精细化方向发展。本文将探讨如何利…

Python酷库之旅-第三方库Pandas(237)

目录 一、用法精讲 1116、pandas.tseries.offsets.BusinessHour.is_year_end方法 1116-1、语法 1116-2、参数 1116-3、功能 1116-4、返回值 1116-5、说明 1116-6、用法 1116-6-1、数据准备 1116-6-2、代码示例 1116-6-3、结果输出 1117、pandas.tseries.offsets.Cu…

不一样的css(三)

目录 一、前言 二、五角星 1.五角星,叠盖法: 2.五角星,拼凑法: 3.五角星,svg画法: 4.五角星,利用clip-path属性进行裁剪 三、结束语 一、前言 通过上两节的内容我们对css画小图标有了新…

autogen框架中使用chatglm4模型实现react

本文将介绍如何使用使用chatglm4实现react,利用环境变量、Tavily API和ReAct代理模式来回答用户提出的问题。 环境变量 首先,我们需要加载环境变量。这可以通过使用dotenv库来实现。 from dotenv import load_dotenv_ load_dotenv()注意.env文件处于…

Neural Magic 发布 LLM Compressor:提升大模型推理效率的新工具

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

LabVIEW实现TCP/IP通信

目录 1、TCP通信原理 2、硬件环境部署 3、云端环境部署 4、TCP通信函数 5、程序架构 6、前面板设计 7、程序框图设计 8、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合…

Linux系统Docker部署开源在线协作笔记Trilium Notes与远程访问详细教程

目录 ⛳️推荐 前言 1. 安装docker与docker-compose 2. 启动容器运行镜像 3. 本地访问测试 4.安装内网穿透 5. 创建公网地址 6. 创建固定公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

Linux关于vim的笔记

Linux关于vim的笔记:(vimtutor打开vim 教程) --------------------------------------------------------------------------------------------------------------------------------- 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键…