Oracle DG备库数据文件损坏修复方法(ORA-01578/ORA-01110)
今天负责报表的同事反馈在DG库查询时出现如下报错
ORA-01578:ORACLE数据块损坏(文件号6,块号 2494856)ORA-01110:数据文件6: '/oradata/PMSDG/o1 mf users_molczgmn_.dbfORA-26040:数据块是使用 NOLOGGING 选项加载的
可以看到报错是数据文件损坏,提示了file id和block id

在 Oracle Data Guard 环境中,如果 备库数据文件 出现坏块,而主库正常,如何来修复呢?这里假设备库是 Physical Standby 模式。
如果是逻辑备库则如下的方法1/2不适用。
一. 确认问题
确认坏块信息
在备库执行以下命令查看坏块信息:
SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
检查具体受影响的数据文件
查看坏块对应的数据文件编号和名称:(主备均查询一下,确认主库是否也有损坏)
SELECT FILE_ID, FILE_NAME FROM DBA_DATA_FILES WHERE FILE_ID IN (SELECT FILE# FROM V$DATABASE_BLOCK_CORRUPTION);
二. 修复方法
方法 1:通过主库恢复坏块
在 Data Guard 环境中, 如果确认主库没有损坏 只有备库出现文件损坏,可以直接通过rman来修复
1.1 停止备库的日志应用
在备库停止日志应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
1.2 恢复坏块
通过 RMAN 恢复受影响的数据文件:
登录到备库的 RMAN:
rman target / RMAN> RECOVER DATAFILE 6 BLOCK 2494856; Starting recover at 02-JAN-25 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=200 device type=DISK starting media recovery media recovery complete, elapsed time: 00:00:00 Finished recover at 02-JAN-25 RMAN>
RMAN 会自动从主库提取所需的日志恢复受影响的块。
1.3 启动日志应用
修复完成后,重新启动日志应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
方法 2:从主库复制数据文件
如果坏块数量较多或 RECOVER 无法成功,可以直接从主库复制整个数据文件。
2.1 确认数据文件路径
在主库和备库执行以下查询,确认数据文件路径一致:
SELECT FILE_ID, FILE_NAME FROM DBA_DATA_FILES;
2.2 在主库创建数据文件备份
登录到主库的 RMAN,备份受影响的数据文件:
[oracle@PMS~]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Thu Jan 2 22:46:31 2025 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: PMS (DBID=4262015389) RMAN> BACKUP AS COPY DATAFILE 6 FORMAT '/home/oracle/o1 mf users_molczgmn_.dbf'; Starting backup at 02-JAN-25 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=764 instance=pms2 device type=DISK channel ORA_DISK_1: starting datafile copy input datafile file number=00006 name=+DATA/pms/datafile/o1 mf users_molczgmn_.dbf output file name=/home/oracle/o1 mf users_molczgmn_.dbf tag=TAG20250102T224636 RECID=4 STAMP=1189378160 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:02:45 Finished backup at 02-JAN-25 Starting Control File and SPFILE Autobackup at 02-JAN-25 piece handle=+ARCH/pms/autobackup/2025_01_02/s_1189378162.29728.1189378163 comment=NONE Finished Control File and SPFILE Autobackup at 02-JAN-25
2.3 传输备份到备库
将备份文件传输到备库相同路径:
scp -P 11122 o1 mf users_molczgmn_.dbf oracle@10.xx.xx.xx:/home/oracle
2.4 在备库切换数据文件
在备库停止日志应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
登录到备库的 RMAN,切换到新数据文件:
启动数据库到mount注册数据文件副本CATALOG DATAFILECOPY '/home/oracle/o1 mf users_molczgmn_.dbf';RESTORE DATAFILE 6 ;RECOVER DATAFILE 6;开启数据库alter database open;[oracle@pmsdg ~]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Thu Jan 2 22:14:57 2025 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: PMS(DBID=4262015389) RMAN> catalog start with '/home/oracle/o1 mf users_molczgmn_.dbf'; searching for all files that match the pattern /home/oracle/o1 mf users_molczgmn_.dbf List of Files Unknown to the Database ===================================== File Name: /home/oracle/o1 mf users_molczgmn_.dbf Do you really want to catalog the above files (enter YES or NO)? yes cataloging files... cataloging done List of Cataloged Files ======================= File Name: /home/oracle/o1 mf users_molczgmn_.dbf --将备库启动到mount阶段. [oracle@pmsdg]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 2 22:27:50 2025 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SYS@orcl150> startup mount; ORACLE instance started. Total System Global Area 1586708480 bytes Fixed Size 2253624 bytes Variable Size 989859016 bytes Database Buffers 587202560 bytes Redo Buffers 7393280 bytes Database mounted. [oracle@pmsdg]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Thu Jan 2 22:28:24 2025 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: PMSDG (DBID=4262015389, not open) RMAN> restore datafile 6; Starting restore at 02-JAN-25 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=63 device type=DISK channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00006 to /oradata/PMSDG/o1 mf users_molczgmn_.dbf channel ORA_DISK_1: reading from backup piece /home/oracle/o1 mf users_molczgmn_.dbf channel ORA_DISK_1: piece handle=/home/oracle/o1 mf users_molczgmn_.dbf tag=TAG20230203T204533 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:06:01 Finished restore at 02-JAN-25 RMAN> recover datafile 6; Starting recover at 02-JAN-25 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=63 device type=DISK starting media recovery media recovery complete, elapsed time: 00:05:01 Finished recover at 02-JAN-25 RMAN> alter database open; database opened
2.5 启动日志应用
修复完成后,重新启动日志应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
方法 3:重建备库(简单粗暴)
如果坏块影响严重且以上方法无法修复,可以考虑重新同步备库,如果是数据量比较小的推荐这样操作
如果是数据量很大的话 推荐前面的两种方法:
3.1 RMAN duplicate方式重建备库
创建主库的全量备份(包括数据文件、控制文件、归档日志):
rman target sys/xxxx@pms auxiliary sys/xxxx@PMSDGrun { allocate channel d1 type disk; allocate channel d2 type disk; allocate channel d3 type disk; allocate channel d4 type disk; allocate auxiliary channel c1 type disk; allocate auxiliary channel c2 type disk; allocate auxiliary channel c3 type disk; allocate auxiliary channel c4 type disk; duplicate target database for standby from active database nofilenamecheck; }
3.2 重新开始归档应用
alter database recover managed standby database cancel;
alter database open;
alter database recover managed standby database using current logfile disconnect from session;
在备库使用 RMAN 恢复备份并重新配置 Data Guard 环境。
三. 验证修复
检查坏块是否修复
在备库执行以下命令,确认坏块是否已修复:
SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
确认日志应用正常
查看备库是否同步正常:
--日志传输状态 standby> select 'Last Applied : ' Logs, to_char(next_time, 'DD-MON-YY HH24:MI:SS') Time from v$archived_log where sequence# = (select max(sequence#) from v$archived_log where applied = 'YES') union select 'Last Received : ' Logs, to_char(next_time, 'DD-MON-YY HH24:MI:SS') Time from v$archived_log where sequence# = (select max(sequence#) from v$archived_log); -- 最后应用的sequence序列 Standby> select al.thrd "Thread", almax "Last Seq Received", lhmax "Last Seq Applied" from (select thread# thrd, max(sequence#) almax from v$archived_log where resetlogs_change# = (select resetlogs_change# from v$database) group by thread#) al, (select thread# thrd, max(sequence#) lhmax from v$log_history where first_time = (select max(first_time) from v$log_history) group by thread#) lh where al.thrd = lh.thrd;
四. 注意事项优先通过主库恢复:
-
- 如果坏块较少,推荐使用方法 1 恢复。
- 如果坏块较多,直接使用方法 2 替换数据文件。
- 如果数据库比较小 也推荐重建方式 简单直接,如果数据库太大 重建耗时太久 推荐前两种方式
- 另外如果是主库有文件损坏,备库正常方法2也适用。
相关文章:
Oracle DG备库数据文件损坏修复方法(ORA-01578/ORA-01110)
今天负责报表的同事反馈在DG库查询时出现如下报错 ORA-01578:ORACLE数据块损坏(文件号6,块号 2494856)ORA-01110:数据文件6: /oradata/PMSDG/o1 mf users_molczgmn_.dbfORA-26040:数据块是使用 NOLOGGING 选项加载的 可以看到报错是数据文件损坏,提示了file id和b…...
安装Linux
在Linux系统上安装MySQL数据库,可以根据服务器是否有网络连接选择不同的安装方式。以下分别介绍在线安装(通过yum)和离线安装(手动下载.tar包)的详细步骤: 一、在线安装(通过yum) 检…...
【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(四)
****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 四、提示范式(Explanation for Prompting Paradigm) 随着语言模型规模的扩大,基于提示(prom…...
【OpenCV】使用Python和OpenCV实现火焰检测
1、 项目源码和结构(转) https://github.com/mushfiq1998/fire-detection-python-opencv 2、 运行环境 # 安装playsound:用于播放报警声音 pip install playsound # 安装opencv-python:cv2用于图像和视频处理,特别是…...
SpringCloud(二)--SpringCloud服务注册与发现
一. 引言 前文简单介绍了SpringCloud的基本简介与特征,接下来介绍每个组成部分的功能以及经常使用的中间件。本文仅为学习所用,联系侵删。 二. SpringCloud概述 2.1 定义 Spring Cloud是一系列框架的有序集合,它巧妙地利用了Spring…...
国内Ubuntu环境Docker部署CosyVoice
国内Ubuntu环境Docker部署CosyVoice 本文旨在记录在 国内 CosyVoice项目在 Ubuntu 环境下如何使用 dockermin-conda进行一键部署。 源项目地址: https://github.com/FunAudioLLM/CosyVoice 如果想要使用 dockerpython 进行部署,可以参考我另一篇博客中的…...
嵌入式linux系统中QT信号与槽实现
第一:Qt中信号与槽简介 信号与槽是Qt编程的基础。因为有了信号与槽的编程机制,在Qt中处理界面各个组件的交互操作时变得更加直观和简单。 槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。 案例操作与实现: #ifndef …...
科研绘图系列:R语言单细胞数据常见的可视化图形
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理图1图2图3图4图5图6系统信息参考介绍 单细胞数据常见的可视化图形 因为本教程是单细胞数据,因此运行本画图脚本需要电脑的内存最少32Gb 加载…...
使用 C++ 和函数式编程构建高效的 AI 模型
引言 现代 AI 开发常常使用 Python,但在底层实现中,C 仍是不可或缺的语言,尤其是在性能敏感的场景下。将 C 与函数式编程结合,可以打造高效、模块化的 AI 模型,同时提高代码的可读性和可维护性。本文将深入探讨如何利用…...
guestfish/libguestfs镜像管理工具简介
文章目录 简介guestfishlibguestfs项目 例子原理代码libguestfs架构参考 简介 guestfish Guestfish 是libguestfs项目中的一个工具软件,提供修改虚机镜像内部配置的功能。它不需要把虚机镜像挂接到本地,而是为你提供一个shell接口,你可以查…...
如何在centos中进行有效的网络管理
如何在centos中进行有效的网络管理? 在CentOS中,网络管理是系统管理员日常工作的重要组成部分,本文将详细介绍CentOS中的两种主要网络管理工具:传统的network服务和新一代的NetworkManager,帮助读者更好地配置和管理C…...
Oracle清空表后如何恢复数据
有时候忘记备份数据,把数据清空了,或者删除了,这时候怎么恢复数据呢,使用下面sql即可,替换对应的table和column INSERT INTO table1(column1,column2,column3 ) SELECTcolumn1,column2,column3 FROMtable1 AS OF time…...
ElasticSearch基础-文章目录
ElasticSearch学习总结1(环境安装) ElasticSearch学习总结2(基础查询) ElasticSearch学习总结3(.NetCore操作ES) ElasticSearch学习总结4(sql操作ES) ElasticSearch学习总结5&am…...
SpringMVC(二)原理
目录 一、配置Maven(为了提升速度) 二、流程&&原理 SpringMVC中心控制器 完整流程: 一、配置Maven(为了提升速度) 在SpringMVC(一)配置-CSDN博客的配置中,导入Maven会非…...
Selenium 自动化,如何下载正确的 ChromeDriver
在 Python 的 Selenium 自动化操作中,chromedriver 是不可或缺的驱动程序。没有正确安装对应版本的驱动,运行代码时常常会遇到报错问题,比如 “session not created: This version of ChromeDriver only supports Chrome version XX”。 今天…...
[Linux]redis5.0.x升级至7.x完整操作流程
1. 从官网下载最新版redis: 官网地址:https://redis.io/download 注:下载需要的登录,如果选择使用github账号登录,那么需要提前在github账号中取消勾选“Keep my email addresses private”(隐藏我的邮箱…...
Java字符编码与正则表达式深度解析
Java字符编码与正则表达式深度解析 1. 字符编码发展 1.1 ASCII 码 在计算机最初发明时,主要用于数值计算,但随着计算需求的增加,人们发现计算机可以用来处理文本信息。因此,将字符映射为数字来表示。 字母 ‘A’ 映射为 65&am…...
【C++】B2099 矩阵交换行
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述题目描述输入格式输出格式输入输出样例输入 #1输出 #1 💯题目分析💯不同解法分析我的做法实现步骤:优点:不足&#…...
论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 史丹,天津大学博士生 内容简介 大语言模型(LLM)经过海量数据训练后编码了丰富的世界知识。最近的研究表明,…...
edeg插件/扩展推荐:助力生活工作
WeTab 此插件在我看来有2个作用 1.改变edeg的主页布局和样式,使其更加精简,无广告 2.提供付费webtab Ai(底层是chatGpt) 沉浸式翻译 此插件可翻译网页的内容 假设我们浏览github 翻译前 翻译后 Better Ruler 可以对网页的距离进行测量 适合写前端的小伙伴 用法示例:...
基于深度学习昏暗场景目标检测 极端雾天天气目标检测 YOLO与图像去雾暗通道原理算法结合应用
文章目录YOLO与图像去雾暗通道原理结合的研究综述引言2. 图像去雾与暗通道原理3. YOLO与暗通道去雾结合的动机主要代码4. YOLO与暗通道去雾结合的实现方案5. 应用实例与实验结果6. 结论与未来展望YOLO与图像去雾暗通道原理结合的研究综述 引言 YOLO的工作流程可以概括为以下几…...
有限元仿真自动化:基于Python的Comsol多物理场脚本开发实践
有限元仿真自动化:基于Python的Comsol多物理场脚本开发实践 【免费下载链接】MPh Pythonic scripting interface for Comsol Multiphysics 项目地址: https://gitcode.com/gh_mirrors/mp/MPh 在科学计算与工程仿真领域,有限元分析工具的自动化控制…...
Python零基础到精通教程,函数基础
一、什么是函数?函数是组织好的、可重复使用的代码块,用来实现单一功能。简单说:把一段常用代码打包,起个名字,需要时直接调用,不用重复写代码。比如:打印问候语、计算求和、数据处理࿰…...
雀魂Mod Plus终极指南:如何免费解锁全角色皮肤和装扮
雀魂Mod Plus终极指南:如何免费解锁全角色皮肤和装扮 【免费下载链接】majsoul_mod_plus 雀魂解锁全角色、皮肤、装扮等,支持全部服务器。 项目地址: https://gitcode.com/gh_mirrors/ma/majsoul_mod_plus 还在为雀魂游戏中无法获得心仪角色和皮肤…...
告别电脑噪音烦恼:Fan Control让你的Windows风扇静音又高效
告别电脑噪音烦恼:Fan Control让你的Windows风扇静音又高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendi…...
126. 如何为 Elemental OS Machine 创建网络绑定
Procedure 程序Configuring NIC Teaming for OS Elemental 为操作系统 Elemental 配置 NIC 分组 Overview 概述 This article provides the procedure for configuring NIC Teaming (bonding) in SUSE Elemental OS. It includes an example configuration that can be adjus…...
别急着升Unity 2022!手把手教你为Unity 2021.3项目配置专属的Java 11和Gradle 7.5环境
深度定制Unity 2021.3的Android构建环境:Java 11与Gradle 7.5实战指南 当Google Play强制要求应用适配Android 14(API Level 34)时,许多仍在使用Unity 2021.3 LTS的开发者面临一个棘手问题:如何在不升级Unity版本的前…...
基于STM32的电子钟与万年历设计
一、系统概述与核心功能 1. 系统定位 基于STM32的电子钟与万年历以“精准计时-日期管理-人机交互-低功耗续航”为核心,实现实时时间(时/分/秒)、完整日期(年/月/日/星期)、闰年自动判断、闹钟提醒、温度监测࿰…...
005、大模型基础:AI 应用开发者真正需要懂什么,才不至于只会调接口
很多开发者在接触 AI 应用开发时,最开始都会有一种错觉: 只要我会调用模型接口,会写几句 Prompt,会把结果展示到页面上,我是不是就已经算会做 AI 应用了? 短期看,这样当然能做出一点东西。 你可以很快接一个接口,做一个聊天框,甚至做一个会议总结、文章润色、知识问答…...
SillyTavern角色系统深度解析:构建沉浸式AI交互体验的技术架构与实践
SillyTavern角色系统深度解析:构建沉浸式AI交互体验的技术架构与实践 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern SillyTavern作为面向高级用户的LLM前端工具,其…...
