当前位置: 首页 > news >正文

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)后面有机会再总结。

相关文章:

Oracle 11gR2 坏块修复实例一则

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

解决FinalShell 连接virtual box安装的Linux centos/7系统 一直让输入密码,输入什么密码都没用

问题描述: virtual box安装的Linux centos/7系统默认只允许ssh登录方式,需要配置允许账号密码登录 先登录root账号(一定要是root):初始密码为vagrant su 修改ssh配置文件: vi /etc/ssh/sshd_config 修改…...

华为E9000刀箱(HWE9000V2)服务器硬件监控指标解读

随着数据中心规模的不断扩大,服务器的稳定性和可靠性变得尤为重要。华为E9000刀箱(HWE9000V2)作为一款高性能的服务器设备,其硬件状态的实时监控对于保障业务的连续性和系统的稳定运行至关重要。 监控易作为一款专业的IT基础设施监…...

Python基础学习-12匿名函数lambda和map、filter

目录 1、匿名函数: lambda 2、Lambda的参数类型 3、map、 filter 4、本节总结 1、匿名函数: lambda 1)语法: lambda arg1, arg2, …, argN : expression using arg 2) lambda是一个表达式,而不是一个语…...

民安:助力提升城市安全水平

随着城市化进程的加速,平安城市的创建成为了社会治理的重要议题。为了解公众对平安城市创建的看法和评价,为提升城市安全水平提供参考,近期某市委托民安智库专业市场调查公司开展了一次安全感满意度调查。 本次调查围绕公共安全、个人安全、…...

Apache Zeppelin:一个基于Web的大数据可视化分析平台

今天给大家推荐一下 Apache Zeppelin,它是一个基于 Web 的交互式数据接入、数据分析、数据可视化以及协作文档 Notebook,类似于 Jupyter Notebook。 Apache Zeppelin 支持使用 SQL、Java、Scala、Python、R 等编程语言进行数据处理和分析,同时…...

「Qt Widget中文示例指南」如何为窗口实现流程布局?(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文将展示如何为不…...

【C语言篇】探索 C 语言结构体:从基础语法到数据组织的初体验

我的个人主页 我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 什么是结构体结构体的定义与使用结构体内存布局嵌套结构体与指针结构体数组的操作结构体与函数结构体内存对齐机制位域与结构体的结合动态内存分…...

linux下USB设备状态查询

linux下USB设备状态查询 linux下USB设备状态查询 在buildroot RK3568平台上调试USB视频采集时发现,USB设备经常性断开,为发现其断开的规律,编写脚本记录其断开的时间 linux下USB设备状态查询 #周期性查询 USB设备 cat > /usr/bin/usbenq…...

鼠标前进后退键改双击,键盘映射(AutoHotkey)

初衷: 1.大部分鼠标为不可自定义按键,可以自定义的又很贵。 鼠标左键是双击是很频类很高的操作,鼠标前进/后退按键个人感觉使用频率很低,因此把鼠标前进/后退改为双击还是很合适的。 2.有些短款的键盘没有Home或End键,…...

ubuntu服务器睡眠命令

在 Ubuntu 服务器中,通常不会启用系统睡眠(即 suspend)模式,因为服务器通常需要保持持续运行以提供服务。但如果你希望让 Ubuntu 服务器进入睡眠状态,你可以使用以下命令: 1. 让系统进入休眠(S…...

尚硅谷学习笔记——Java设计模式(一)设计模式七大原则

一、介绍 在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,提出的解决方案。我们希望我们的软件能够实现复用性、高稳定性、扩展性、维护性、代码重用性,所以…...

Flink——进行数据转换时,报:Recovery is suppressed by NoRestartBackoffTimeStrategy

热词统计案例: 用flink中的窗口函数(apply)读取kafka中数据,并对热词进行统计。 apply:全量聚合函数,指在窗口触发的时候才会对窗口内的所有数据进行一次计算(等窗口的数据到齐,才开始进行聚合…...

技能之发布自己的依赖到npm上

目录 开始 解决 步骤一: 步骤二: 步骤三: 运用 一直以为自己的项目在github上有了(之传了github)就可以进行npm install下载,有没有和我一样萌萌的同学。没事,萌萌乎乎的不犯罪。 偶然的机…...

COMSOL工作站:配置指南与性能优化

COMSOL Multiphysics 求解的问题类型相当广泛,提供了仿真单一物理场以及灵活耦合多个物理场的功能,供工程师和科研人员来精确分析各个工程领域的设备、工艺和流程。 软件内置的#模型开发器#包含完整的建模工作流程,可实现从几何建模、材料参数…...

Qt导出Excel图表

目的 就是利用Qt导出Excel图表,如果直接画Excel 图表,比较麻烦些,代码写得也复杂了;而直接利用Excel模块就简单了,图表在模块当中已经是现成的了,Qt程序只更改数据就可以了,这篇文章就是记录一下利用模块上…...

分布式协同 - 分布式系统的特性与互斥问题

文章目录 导图概述分布式系统的特性与挑战分布式互斥算法的目标分布式互斥算法集中互斥算法集中互斥算法示意图集中互斥算法流程 基于许可的互斥算法Lamport 算法示意图Lamport 流程 令牌环互斥算法令牌环互斥算法示意图 1. 集中互斥算法(Centralized Mutual Exclus…...

windows安装itop

本文介绍 win10 安装 itop 安装WAMP集成环境前 先安装visual c 安装itop前需要安装WAMP集成环境(windowsApacheMysqlPHP) 所需文件百度云盘 通过网盘分享的文件:itop.zip 链接: https://pan.baidu.com/s/1D5HrKdbyEaYBZ8_IebDQxQ 提取码: m9fh 步骤一&#xff1…...

LAMP环境的部署

一、软件安装介绍 在Linux系统中安装软件有rpm安装、yum安装、源码安装等方法,在这里主要给大家介绍 yum 安装,这是一种最简单方便的一种安装方法。 YUM(Yellow dog Upadate Modifie)是改进版的 RPM 管理器,很好地解…...

Go语言压缩文件处理

目录 Go 语言压缩文件处理1. 压缩文件:Zip函数2. 解压文件:UnZip 函数3. 小结 Go 语言压缩文件处理 在现代的应用开发中,处理压缩文件(如 .zip 格式)是常见的需求。Go 语言提供了内置的 archive/zip 包来处理 .zip 文…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...