暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

恩墨学院学生作品展播 - SYSTEM 文件损坏的恢复案例

原创 eygle 2013-04-14
613

本系列是对 恩墨学院 学生作品的转播,供读者借鉴,同时提供编译好的文档链接。


以下文章《SYSTEM 1号文件损坏的恢复》来自 恩墨学院 洪日华 同学作品。


System 表空间为 Oracle Database 中最重要的文件之一,缺少 System 表空间中的任何一个数据文件,都 会导致数据库无法正常启动,并且有可能会导致不同程度的数据丢失。
System 表空间可以拥有多个数据文件,其中最重要的文件则是 1 号文件,即在创建数据库语句时创建的 SYSTEM 文件,该文件中记录着数据库启动的引导程序,负责将数据库从 mount 状态一步一步引导到 open 状态,以供用户连接与操作。
本文从实验的角度,模拟 SYSTEM 表空间中 1 号文件各种不同类型数据块损坏之后的恢复工作。
本文模拟主要分为以下几个方面:
1、 mount、open 操作过程中,数据库的物理 IO 2、 file 1 File Header 损坏情况的恢复
3、 bootstrap$对象恢复
以下为主要实验过程:

恩墨学院
System 1 号文件各种损坏情况的修复 洪日华
摘要: 本文纯属个人研究,仅供传阅参考。
System 表空间为 Oracle Database 中最重要的文件之一,缺少 System 表空间中的任何一个数据文件,都 会导致数据库无法正常启动,并且有可能会导致不同程度的数据丢失。
System 表空间可以拥有多个数据文件,其中最重要的文件则是 1 号文件,即在创建数据库语句时创建的 SYSTEM 文件,该文件中记录着数据库启动的引导程序,负责将数据库从 mount 状态一步一步引导到 open 状态,以供用户连接与操作。
本文从实验的角度,模拟 SYSTEM 表空间中 1 号文件各种不同类型数据块损坏之后的恢复工作。
本文模拟主要分为以下几个方面:
1、 mount、open 操作过程中,数据库的物理 IO


2、 file 1 File Header 损坏情况的恢复


3、 bootstrap$对象恢复


以下为主要实验过程:
1. mount、open操作中的物理IO流程
为了跟踪在 mount 和 open 阶段中的后台物理 IO 流程,可以在 sqlplus 中启动 10046 语句跟踪进程操作。
1.1 数据库 Mount 过程的 IO: 跟踪数据库 mount 中的物理 IO 流程:



12:59:28 IDLE > alter session set events '10046 trace name context forever,level 8';
Session altered.
Elapsed: 00:00:00.32
13:00:00 IDLE > alter database mount;
Database altered.
Elapsed: 00:00:05.22
13:00:15 IDLE > alter session set events '10046 trace name context off';
Session altered.



此时产生的跟踪文件 db_mount_10046_level8.log,我们查看文件中所有的等待事件,显示如下:


[oracle@db10205 D]$ grep "WAIT " db_mount_10046_level8.log | grep file
WAIT #1: nam='control file sequential read' ela= 41 file#=0 block#=1 blocks=1 obj#=-1
WAIT #1: nam='control file sequential read' ela= 34978 file#=0 block#=3 blocks=8 obj#=-1 WAIT #1: nam='control file heartbeat' ela= 3907783 p1=0 p2=0 p3=0 obj#=-1
......
WAIT #1: nam='control file parallel write' ela= 626 files=1 block#=17 requests=1 obj#=-1 WAIT #1: nam='control file parallel write' ela= 646 files=1 block#=15 requests=1 obj#=-1 WAIT #1: nam='control file parallel write' ela= 1043 files=1 block#=1 requests=1 obj#=-1
从等待事件的分布来看,在 mount 状态中,和文件相关的等待有如下两项:
1、 control file sequential read
2、 control file parallel write
从每个等待事件后续的参数可以知道,在 mount 过程中,持续在读取和写入控制文件,读取的 file 为 0,
也就是说 controlfile 的 file#=0,从不同的 block#可以看出,mount 过程中,读取了控制文件中不同的 block, 所以如果这些 block 出现损坏,那么数据库就无法从 nomount 到 mount 状态了。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论