原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。http://linuxtro.blog.51cto.com/1239505/289381
在Oracle中可以从两个角度来理解这个数据文件。一是物理结构,二是逻辑结构。
-------声明:本文参考了Oracle官方文档和互联网的海量信息,并归纳总结而来。如有错误之处,还请各位不吝赐教。
Oracle数据库的体系结构如图所示:
任何一个数据库都是由数据文件组成的,数据文件中保存着数据库里的所有信息。
在Oracle中可以从两个角度来理解这个数据文件。一是物理结构,二是逻辑结构。
Oracle物理存储结构
构成 Oracle 数据库物理结构的文件有:
控制文件:包含有关数据库本身的数据(即物理数据库的结构信息)。这些文件对数据库而言至关重要。没有这些文件,就无法打开用于访问数据库数据的数据文件。
控制文件包括如下主要信息数据库的名字,检查点信息,数据库创建的时间戳、所有的数据文件,联机日志文件,归档日志文件信息备份信息等。有了这些信息,Oracle就知道那些文件是数据文件,现在的重做日志文件是哪些,这些都是系统启动和运行的基本条件,所以他是Oracle运行的根本。如果没有控制文件系统是不可能启动的。控制文件是非常重要的,一般采用多个镜相复制来保护控制文件,或采用RAID来保护控制文件。控制文件的丢失,将使数据库的恢复变的很复杂。
数据文件:包含数据库中的用户数据或应用程序数据。其详细信息记载在控制文件中。
可以通过如下方式查看数据文件
SQL> select name from v$datafile;
数据文件大致可以分为以下几类:
i系统数据文件(system_01.dbf)
存放系统表和数据字典,一般不放用户的数据,但是用户脚本,如过程,函数,包等却是保存在数据字典中的。
数据字典:数据字典是一些系统表或视图,他存放系统的信息,他包括数据库版本,数据文件信息,表与索引等段信息,系统的运行状态等各种和系统有关的信息和用户脚本信息。数据库管理员可以通过对数据字典的查询,就可以了解到Oracle的运行状态。
ii 回滚段文件(rbs_01.dbf)
如果数据库进行对数据的修改,那么就必须使用回滚段,回滚段是用来临时存放修改前的数据(Before Image)。回滚段通常都放在一个单独的表空间上(回滚表空间),避免表空间碎片化,这个表空间包含的数据文件就是回滚数据文件。
ii临时数据文件(temp_01.dbf)
主要存放用户的排序等临时数据,与回滚段相似,临时段也容易引起表空间碎片化,而且没有办法在一个永久表空间上开辟临时段,所以就必须有一个临时表空间,它所包含的数据文件就是临时数据文件,主要用于不能在内存上进行的排序操作。我们必须为用户指定一个临时表空间。
iv用户数据文件(/applsys_data_01.dbf ,applsys_indx_01.dbf)
存放用户数据,这里列举了两类常见的用户型数据,一般数据和索引数据,一般来说,如果条件许可的话,可以考虑放在不同的磁盘上。
联机重做日志文件:可用来实现数据库实例恢复。如果数据库已崩溃但未丢失任何数据文件,那么使用这些文件中的信息可以通过实例恢复数据库。 用户对数据库进行的任何操作都会记录在重做日志文件。在了解重做日志之前必须了解重做日志的两个概念,重做日志组和重做日志组成员(Member),一个数据库中至少要有两个日志组文件,一组写完后再写另一组,即轮流写。每个日志组中至少有一个日志成员,一个日志组中的多个日志成员是镜相关系,有利于日志文件的保护,因为日志文件的损坏,特别是当前联机日志的损坏,对数据库的影响是巨大的。
联机日志组的交换过程叫做切换,需要特别注意的是,日志切换在一个优化效果不好的数据库中会引起临时的“挂起”。挂起大致有两种情况:
在归档情况下,需要归档的日志来不及归档,而联机日志又需要被重新利用。
检查点事件还没有完成(日志切换引起检查点),而联机日志需要被重新利用。
解决这种问题的常用手段是:
i.增加日志组
ii.增大日志文件成员大小
通过v$log可以查看日志组,v$logfile可以查看具体的成员文件。
内部文件包括:参数文件、口令文件、归档日志文件(运行数据库必须的)。
参数文件:用于定义启动实例时如何配置实例。在10g中,通常位于$ORACLE_HOME/admin//Pfile下,初始化文件记载了许多数据库的启动参数,如内存,控制文件,进程数等,在数据库启动的时候加载(Nomount时加载),初始化文件记录了很多重要参数,对数据库的性能影响很大。
口令文件:允许用户远程连接到数据库并执行管理任务。用于Oracle 的具有sysdba权限用户的认证.
归档日志文件:包含实例生成的数据更改(重做)的实时历史记录。使用这些文件和数据库备份可以恢复丢失的数据文件。也就是说,使用归档日志可以恢复还原的数据文件。
Oracle可以运行在两种模式之中,归档模式和不归档模式。如果不用归档模式,当然,你就不会有归档日志,但是,你的系统将不会是一个实用系统,特别是不能用于生产系统,因为你可能会丢失数据。但是在归档模式中,为了保存用户的所有修改,在重做日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文件系列就是归档日志文件。
备份文件:用于恢复数据库。当因介质故障或用户错误而损坏或删除了原始文件时,通常需要还原备份文件。
跟踪文件:每个服务器和后台进程都可以对关联的跟踪文件执行写操作。如果在进程中检测到内部错误,进程就会将关于错误的信息转储到进程的跟踪文件中。写入到跟踪文件中的某些信息专门供数据库管理员使用,另一些信息则供 Oracle 支持服务部门使用。
预警日志文件:是特殊的跟踪文件,又称为预警日志。数据库预警日志是按时间顺序列出的消息日志和错误日志。Oracle 建议您查看这些文件。
Oracle逻辑存储结构
一个表空间中包括一个或多个数据文件。
一个数据文件仅属于一个表空间。
表空间和数据文件
一个数据库可划分为多个逻辑存储单元,这些单元称为表空间,表空间可用于对相关逻辑
结构进行分组。每个数据库按逻辑都分为一个或多个表空间。可以为每个表空间显式创建
一个或多个数据文件,这样可在表空间中按物理方式存储所有逻辑结构的数据。
1、 表空间(tablespace)
表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。安装完Oracle10g后,会自动创建一些基本表空间。
EXAMPLE 实例表空间,存放例子数据库的方案对象信息及其培训资料。
AYAAUX 辅助表空间,用于减少系统表空间的负荷,提高系统的作业效率,是Oracle
10g新增加的表空间。
SYSTEM 系统表空间,存放关于表空间的名称、控制文件、数据文件等管理信息,是Oracle数据库中最重要的表空间。它属于SYS、SYSTEM方案,仅被SYS和SYSTEM或其他具有足够权限的用户使用。即使是SYS和SYSTEM用户也不能删除或者重命名SYSTEM表空间。
TEMP 临时表空间,存放临时表和临时数据,用于排序。每个数据都应该有一个临时表空间,以便在创建用户时将其分配给用户,例如排序操作的临时空间,他的空间会在下次系统启动的时候全部被释放。
UNDOTBS1 重做表空间,存放数据库的有关重做的相关信息和数据。
USERS 用户表空间,存放永久性用户对象和私有信息,因此也被称为数据表空间。
在上述的表空间中,比较重要的是SYSTEM和SYSAUX表空间。
每个 Oracle 数据库都包含 SYSTEM表空间和SYSAUX 表空间。这两个表空间是在创建数据库时创建的。系统默认设置是创建小文件表空间。也可以创建大文件表空间,这样可通过 Oracle 数据库管理超大文件(数据库最大为8 EB)。表空间的状态可以是联机的(可访问)也可以是脱机的(不可访问)。打开数据库时SYSTEM表空间始终处于联机状态。这个表空间可存储支持数据库核心功能的表,如数据字典表。
查看数据数据字典的SQL
select * from dict
查看内部系统表的SQL
select * from v$fixed_view_definition
SYSAUX表空间是 SYSTEM 表空间的辅助表空间。SYSAUX表空间可存储许多数据库组件,要使所有数据库组件正常运行,该表空间必须处于联机状态。
2、 段(Segment)
段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。
表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段可以指定扩展到哪个数据文件上面。
段基本可以分为以下四种
数据段(Data Segment) :每个非集群、非索引的组织表都有一个数据段。该表的所有数据都存储在表数据段的区中。对于分区表,每个分区都有一个 数据段。每个集群都有一个数据段。集群中每个表的数据都存储在集群的数据段中。
索引段(Index Segment) :每个索引都有一个索引段,用于存储索引的所有数据。对于已分区索引,每个分区都有一个索引段。
回滚段(Rollback Segment) :数据库管理员会创建一个 UNDO 表空间,用于临时存储还原信息。还原段中的信息用于生成一致读取信息,在数据库恢复过程中,还可用于回退用户的未提交事务。
临时段(Temporary Segment) :当SQL 语句需要一个临时工作区来完成执行时,Oracle 数据库会创建临时段。执行完语句后,临时段的区会返回到实例,以供将来使用。请为每个用户指定一个默认临时表空间,或指定一个在数据库级别使用的默认临时表空间。
3、区间(Extent)
关于Extent的翻译有多种解释,有的译作扩展,有的译作盘区,我这里通常译为区间。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。 在ORACLE8i以上版本,理论上一个段可以无穷个区间,但是多个区间对ORACLE却是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动。
4、Oracle数据块(Block)
ORACLE最基本的存储单位,他是OS数据块的整数倍。ORACLE的操作都是以块为基本单位,一个区间可以包含多个块(如果区间大小不是块大小的整数倍,ORACLE实际也扩展到块的整数倍)。
本文出自 “linux on the way” 博客,请务必保留此出处http://linuxtro.blog.51cto.com/1239505/289381