控制文件的结构

简介: 控制文件的结构(1)  控制文件分为文件头和内容两部分。文件头包含:控制文件块大小控制文件包含的块的数量     在MOUNT数据库的时候,会读取控制文件的头块,并进行校验。

控制文件的结构(1) 
控制文件分为文件头和内容两部分。文件头包含:
控制文件块大小
控制文件包含的块的数量

    在MOUNT数据库的时候,会读取控制文件的头块,并进行校验。如果校验失败,数据库会报错。初始化参数DB_BLOCK_SIZE确定了数据库的缺省块大小。数据库缺省块大小就是控制文件的块大小。

    要操作控制文件,首先要获得排他性的CF ENQUEUE。在控制文件的最开头的记录使数据库信息。这部分信息占210字节,占用一个控制文件块。控制文件的所有信息都有备份。在同一个控制文件中,每个控制文件记录都有备份记录,每个逻辑块都有两个物理块来存储数据,一个物理块存储当前的信息,另外一个物理块存储的是早期版本的信息,或者一个仍然没有被确定,等待提交的信息。为了知道每个逻辑块对应的物理块中存储的是最新的数据,Oracle维护了一个关于块版本的位图信息,这个位图存储在控制文件的第一条记录中。
   要从控制文件中读取数据,会话需要首先读取块版本位图,以确定去读取哪些物理块,然后如果要对某个逻辑块进行更改,首先写入保存非当前版本的物理块,然后通过原子操作,重写块版本位图。如果要对某个控制文件块的多条记录进行修改,比如说修改每个在线文件的CHECKPOINT SCN,这些信息首先被存储在缓冲中,达到一定数量的时候一次性写入。要注意的是,每个控制文件事务需要至少4次对控制文件的串行的IO操作,如果一次修改了多个逻辑块,那么可能需要更多次IO。如果有备份的控制文件并系统不支持异步IO,也会造成多次IO。因此来说,控制文件事务是一种开销十分大的操作。
  当控制文件事务完成后,控制文件序列号会增长。这个序列号和块版本位图以及数据库信息项一起存储在控制文件的第一条记录中。这个序号被存放在每个控制块的缓冲头中。如果多个控制文件中的序列号不同,数据库会提示一个ORA-235错误。
 

目录
相关文章
|
4月前
|
Oracle 关系型数据库
|
SQL Oracle 关系型数据库
Oracle 修改表空间数据文件存储位置
一、方法一 1、以表空间ZZH为例,offline 表空间ZZH SQL> alter tablespace ZZH offline; 2、复制数据文件到新的目录 cp /old_path/ZZH01.
3009 0
|
存储 Oracle 前端开发
利用BBED恢复数据文件头
利用BBED模拟损坏5文件1号块(文件头),如下测试步骤:
|
SQL Oracle 关系型数据库
|
Oracle 关系型数据库 数据库