- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Oracle 数据坏块的 N 种修复方式由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Oracle 数据库的运行不可避免的会遇到各种各样的错误,就比如数据表出现坏块,此时,你这张表的数据就无法访问了,有什么好的办法可以恢复呢?
什么,你没有遇到过?
�那就祝你不久的将来遇到,哈哈开个玩笑~ 玩归玩,闹归闹,经验必须要老到.
今天就给大家讲讲怎么处理数据表的坏块情况.
对于 Oracle 数据块物理损坏 的情形,通常可以分为两种情况:
有备份,通过 RMAN 恢复 。
无备份,通过 DBMS_REPAIR 修复 。
有备份的情况下,这是很理想的情形,我们可以直接通过 RMAN 块介质恢复(BLOCK MEDIA RECOVERY)功能来完成受损块的恢复.
这里我是不建议恢复整个数据库或者数据库文件来修复这些少量受损的数据块,有点浪费时间.
可参考官方文档:Block Media Recovery with RMAN 。
那如果没有任何备份怎么办? (PS:备份大于一切!) 。
我们可以使用 Oracle 自带的 DBMS_REPAIR 包来实现修复.
注意: 使用 DBMS_REPAIR 包来修复,并非完全恢复,而是标记坏块,然后不对其进行访问,这部分被标记的数据也就丢失了,这是无法避免的.
可参考MOS文档:DBMS_REPAIR SCRIPT (Doc ID 556733.1) 。
1、环境安装可参考我的一键安装脚本:Oracle 数据库一键安装,从未如此简单 。
创建表空间:
创建用户:
创建测试表:
创建表索引:
查看表段上的相关信息:
查出包含行记录的数据块:
注意: 这里看到 HEADER_BLOCK 和 BLOCK_ID 不一致,其实一个 segment 的第一个区的第一个块是 FIRST LEVEL BITMAP BLOCK,第二个块是 SECOND LEVEL BITMAP BLOCK,这两个块是用来管理 free block 的,第三个块是 PAGETABLE SEGMENT HEADER,这个块才是 segment 里的 HEADER_BLOCK.
首先,我们先做一个全备份,用来演示 RMAN 修复坏块.
破坏 1468、1688、2468 数据块的内容:
清除 buffer cache 的内容:
再次查询表 hyj,此时查询已经报错,发现有坏块:
当然,也可以使用 bbed 进行坏块模拟.
下面再介绍几种发现坏块的方式:
(1)使用 DBV 检查当前文件的坏块:
使用 DBV检查,同样发现了坏块.
(2)使用 rman 检查数据库坏块:
结合 V$DATABASE_BLOCK_CORRUPTION 视图查看,更加方便:
使用 RMAN 检查后,同样发现了坏块.
(3)通过数据库的告警日志也可以发现报错:
(4)通过报错信息快速查找对应的坏表,依次填写数据文件 ID 5 和 坏块 ID 1468:
实验环境准备完毕,下面开始实战.
今天,我打算使用上述介绍的 2 种方式来演示.
由于我们之前已经备份了,因此直接使用备份来恢复坏块:
使用同样的方式,依次修复坏块 1688,2468,修复成功后,查询已恢复正常.
再次检查坏块情况:
坏块已经都被恢复,并且数据没有丢失.
首先,依然使用 dd 先模拟坏块:
在没有备份的前提下,我们就无法做到无损修复坏块了,需要损失对应坏块的数据.
(1)创建 repair 表,用于记录需要被修复的表:
(2)创建 Orphan Key 表,用于记录在表块损坏后那些孤立索引,也就是指向坏块的那些索引 :
(3)检查坏块,检测对象上受损的情形,并返回受损块数为 3:
(4)查看受损的块信息:
注意: 这里 marked_corrupt 被标记为 TRUE,应该是系统在执行 CHECK_OBJECT 过程中自动完成了FIX_CORRUPT_BLOCKS。如果被标记为 FALSE,需要再运行 FIX_CORRUPT_BLOCKS 来完成坏块的标记工作.
(5)修复被损坏的数据块,这些被损坏的数据块是在执行了 check_object 之后生成的:
标记了 0 个坏块,说明 CHECK_OBJECT 完成了标记工作.
(6)使用 DUMP_ORPHAN_KEYS 过程将那些指向坏块的索引键值填充到 ORPHAN_KEY_TABLE:
表明 202 条记录被损坏丢失.
注意: 此处一定要注意 object_name 是索引名,而不是 table_name,这里 dump 的是损坏的索引信息.如果表有多个索引,需要为每个索引执行 DUMP_ORPHAN_KEYS 操作.
(7)验证对象是否可以查询,下面的结果显示依旧无法查询:
(8)跳过坏块:
注意: 丢失 202 条记录,丢失记录的 rowid 可以在 ORPHAN_KEY_TABLE 表中找到.
(9)重建索引:
(10)验证结果 。
至此,表中数据可以顺利被访问.
由于坏块并没有消失,而是被标记跳过,因此还是可以查看坏块:
用这种方法可以找回部分数据,也可以找回建了索引的值,但是使用dbv再检查表空间的数据文件时,仍然会显示有损坏的数据块.
这时需要把表的数据全部导出,再重建表或者表空间,然后再把找回的数据导入数据库,推荐用 expdp/impdp 命令做,可以彻底消除 dbv 检查到的坏块.
备份大于一切,也是最后的防线,所以请大家一定要做好备份!886 。
【编辑推荐】https://mp.weixin.qq.com/s/0w66O5Ugx-TX7e_trE5ZBQ 。
最后此篇关于Oracle 数据坏块的 N 种修复方式的文章就讲到这里了,如果你想了解更多关于Oracle 数据坏块的 N 种修复方式的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我将一个 div 设置为 100% 宽度,当以 1024 分辨率查看页面时,宽度应从 100% 变为 1000px,我让它与@media 查询一起正常工作,并且在 FF、safari chrome 上
希望有人能帮助我,我已经被困了几天了。 将我的 Domino 服务器更新到 9.01 Fix 3 后,我在 javascript 控制台上不断收到错误消息: TypeError: this.edito
我们正在使用一个基于RMI的java应用程序。当我们运行应用程序时,即使应用程序处于理想阶段,内存使用量仍然不断增加。我们主要使用Vector和散列图数据结构。如何最大限度地减少java内存使用/修复
概述 Internet Download Manager (IDM)是最流行的 Windows 下载管理器。如果你平时工作中使用过IDM,您会惊叹 IDM 下载文件的速度有多快。IDM
当我打开 brave 浏览器时,会打开一个窗口(如下所示)。它并没有真正干扰浏览器的处理。但令人担忧的是为什么这种情况一直发生...... Error On Opening Brave Browser
这是我今天在求职面试中被问到的一个问题: 看下面的代码: int n=20; for (int i =0; i
我不小心删除了/opt/local/bin/perl5.8.9 ,这似乎是 macports 编译的 perl 的主要二进制文件。 现在我有很多取决于 perl5 的端口,但不想卸载并重新安装所有端口
>>>flip fix (0 :: Int) (\a b -> putStrLn "abc") Output: "abc" 这是使用翻转修复的简化版本。 我在一些 YouTube 视频中看到了这种使用
这个问题已经有答案了: How can I fix 'android.os.NetworkOnMainThreadException'? (64 个回答) 已关闭 3 年前。 我在 Android 应
def main(): cash = float(input("How much money: ")) coins = 0 def changeCounter(n): whil
前一周我遇到了类似的问题,查询需要永远运行。在编写此查询时,我尝试应用从其他查询中学到的一些知识,但执行起来需要很长时间。 运行查询的两个单独部分时,每个部分需要 2 分钟才能完成,这是可以接受的,但
下午,我的 CSS 有问题。第三个下拉菜单放错了,我没有解决办法。 这是我想要的: 之前: http://i53.tinypic.com/2qu85z8.png 之后: http://i51.tiny
更新方法: override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingS
我知道这是一个很多人都遇到过的问题,但我不熟悉 Less 并且是 Bootstrap 的新手,我正在寻找一种全 CSS 解决方案来防止我的导航栏折叠到 768 像素以下:
在我的布局中,我创建了以下 jsfiddle 托管的可调整大小的粘性页脚。但是,在调整大小时它与内容重叠。有没有办法让它在所有浏览器上都能响应? http://jsfiddle.net/9aLc0mg
我想要实现的目标 racer-offset 是为了让用户可以设置图像可以以 px 为单位移动多远。偏移量管理偏移量。 Speed-racer 告诉我们图像在滚动过程中移动的速度。我的问题是它不会停止。
我有一个简单的自动换行函数,它接受一个长字符串作为输入,然后将该字符串分成更小的字符串,并将它们添加到一个数组中,以便稍后输出。现在最后一两个字没有输出。这是主要问题。但是,我还想改进功能。我知道这有
我试图在使用每个 slider 之前禁用“下一步”按钮,我不确定为什么在单击不再是 class="not-clicked"的同一个 slider 时取消禁用该按钮. JSFiddle: (这里看起来有
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 8 年前。 如何让程序输出所有信息? IT
On this page ,在“生活”下有一个带有自动生成的子菜单的菜单。子菜单存在一些问题(它会闪烁并改变大小——如果你滚动它就会看到)。我需要以某种方式覆盖它当前正在读取的 css 并使其统一。
我是一名优秀的程序员,十分优秀!