天天看点

oracle 控制文件 数据文件 日志文件

1、控制文件 (control files)

参数文件init.ora 记录了控制文件的位置,控制文件是一个非常小的二进制文件,最大可以增长到64mb,控制文件包括如下主要信息:

·数据库的名字,检查点信息,数据库创建的时间戳

·所有的数据文件,联机日志文件,归档日志文件信息

·备份信息等

有了这些信息,oracle 就知道那些文件是数据文件,现在的重做日志文件是哪些,这些都是系统启动和运行的基本条件,所以他是oracle 运行的根本。如果没有控制文件系统是不可能启动的。控制文件是非常重要的,一般采用多个镜相复制来保护控制文件,或采用raid 来保护控制文件。控制文件的丢失,将使数据库的恢复变的很复杂。控制文件信息可以从v$controlfile 中查询获得

2、数据文件(data files)

数据文件的详细信息记载在控制文件中

可以通过如下方式查看数据文件

sql> select name from v$datafile;

数据文件是oracle 中最重要的物理文件,直接记录了用户数据。按照使用上的不同,可以把数据文件分成如下几类:

·系统数据文件

·回滚数据文件

·临时数据文件

·用户数据文件

以上各类文件分别属于不同性质的表空间。

3、重做日志文件(redo files)

用户对数据库进行的任何操作都会记录在重做日志文件。在了解重做日志之前必须了解重做日志的两个概念,重做日志组和重做日志组成员(member),一个 数据库中至少要有两个日志组文件,一组写完后再写另一组,即轮流写。每个日志组中至少有一个日志成员,一个日志组中的多个日志成员是镜相关系,有利于日志 文件的保护,因为日志文件的损坏,特别是当前联机日志的损坏,对数据库的影响是巨大的。

联机日志组的交换过程叫做切换,需要特别注意的是,日志切换在一个优化效果不好的数据库中会引起临时的“挂起”。挂起大致有两种情况:

·在归档情况下,需要归档的日志来不及归档,而联机日志又需要被重新利用

·检查点事件还没有完成(日志切换引起检查点),而联机日志需要被重新利用

4、归档日志文件(archived files)

oracle 可以运行在两种模式之中,归档模式和不归档模式。如果不用归档模式,当然你就不会有归档日志,但是,你的系统将不会是一个实用系统,特别是不能用于生产系 统,因为你可能会丢失数据。但是在归档模式中,为了保存用户的所有修改,在重做日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文 件系列就是归档日志文件。

有人或许会说,归档日志文件占领我大量的硬盘空间,其实,具体想一想,你是愿意浪费一点磁盘空间来保护你的数据,还是愿意丢失你的数据呢?显而义见,我们 需要保证我们的数据的安全性。其实,归档并不是一直占领你的磁盘空间,你可以把她备份到磁带上,或删除上一次完整备份前的所有日志文件。通过 v$archived_log 和v$log_history 可以查看归档日志文件的信息。

1、表空间(tablespace)

表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。

在8i 以前,表空间的管理类型只有一种,被称为字典管理表空间(dmt),即在数据字典中管理表空间中的空间的分配。在8i

以后的版本,为了减少在字典上的开销,引入了本地管理的表空间(lmt),在该类型的表空间中,在每个数据文件中存储的位图来管理空间的分配,不再要求使

用数据字典。本地管理的表空间有速度快,无碎片等众多优点,建议用户表空间都实现本地管理。

通过v$tablespace 可以查询表空间,dba_tablespace 可以查询详细表空间信息。

2、段(segment)

段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个

段。

表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段

可以指定扩展到哪个数据文件上面。段基本可以分为以下四种

·数据段(data segment)

·索引段(index segment)

·回滚段(rollback segment)

·临时段(temporary segment)

通过dba/all/user_segments 可以查询详细的段信息。

3、区间(extent)

关于extent

的翻译有多种解释,有的译作扩展,有的译作盘区,我这里通常译为区间。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那

个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(max extent)或没有可用的磁盘空间可以申请。

在oracle8i 以上版本,理论上一个段可以无穷个区间,但是多个区间对oracle 却是有性能影响的,oracle

建议把数据分布在尽量少的区间上,以减少oracle 的管理与磁头的移

动,但是在某些特殊情况下,需要把一个段分布在多个数据文件或多个设备上,适当的加多区间数也是有很大好处的。

通过dba/all/user_extents 可以查询详细的区间信息。

4、 oracle 数据块(block)

oracle 最基本的存储单位,在建立数据库的时候指定,虽然在初始化文件中可见,但是不能修改。为了保证存取的速度,它是os

数据块的整数倍。oracle 的操作都是以块为基本单位,一个区间可以包含多个块,如果区间大小不是块大小的整数倍,oracle

实际也扩展到块的整数倍。

块的内部结构与数据的存取方法都是比较复杂的,以表段的块为例,从简单的结构上划分,可以把块的内部划分成如下几个部分:公用头,表目录,行目录,可存取

空间等。