当前位置: 首页 > 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 文…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

C++ 基础特性深度解析

目录 引言 一、命名空间(namespace) C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用(reference)​ C 中的引用​ 与 C 语言的对比​ 四、inline(内联函数…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...