目录
一、数据字典
数据字典是Oracle数据库的重要组成部分。它由一系列拥有数据库元数据(metadata)信息的数据字典表和用户可以读取的数据字典视图组成,存放有Oracle数据库所用的有关信息,其中主要内容包括如下:
- 系统的空间信息,即分配了多少空间,当前使用了多少空间等。
- 数据库中所有模式对象的信息,如表、视图、簇、同义词及索引等。
- 例程运行的性能和统计信息。
- Oracle用户的名字。
- 用户访问或使用的审计信息。
- 用户及角色被授予的权限信息。
- 列的约束信息的完整性。
- 列的缺省值。
在Oracle数据库中,数据字典可以看作是一组表和视图结构。它们存放在SYSTEM表空间中。在数据库系统中,数据字典不仅是每个数据库的核心,而且对每个用户也是非常重要的信息。用户可以用SQL语句访问数据库数据字典。通过数据字典可实现如下功能:
- 当执行DDL语句修改方案、对象后,Oracle都会将本次修改的信息记录在数据字典中。
- 用户可以通过数据字典视图获得各种方案对象和对象的相关信息。
- Oracle通过查询数据字典表或数据字典视图来获取有关用户、方案、对象的定义信息以及其他存储结构的信息。
- DBA可以通过数据字典的动态性能视图监视例程的状态,作为性能调整的依据。
二、数据文件
一个Oracle数据库可以拥有一个或多个物理的数据文件。数据文件包含了全部数据库数据。逻辑数据库结构的数据也物理地存储在数据库的数据文件中。
数据文件具有如下特征:
- 一个数据库可拥有多个数据文件,但一个数据文件只对应一个数据库。
- 可以对数据文件进行设置,使其在数据库空间用完的情况下进行自动扩展。
- 一个表空间(数据库存储的逻辑单位)可以由一个或多个数据文件组成。
数据文件中的数据在需要时可以读取并存储在Oracle的内存存储区中。例如:用户要存取数据库一个表的某些数据,如果请求的数据不在数据库的内存存储区中,则从相应的数据文件中读取并存储在内存存储区。当数据被修改或是插入新数据时,不必立刻写入数据文件,而是把数据暂时存储在内存,由Oracle的后台进程DBWR来决定何时将其写入数据文件中,这是为了减少磁盘/O的次数,提高系统的效率。
数据文件是用于存储数据库数据的文件,如表、索引数据等都物理地存储在数据文件中。这就把数据文件和表空间联系在一起。表空间是一个或多个数据文件在逻辑上的统一组织,而数据文件是表空间在物理上的存在形式。没有数据文件的存在,表空间就失去了存在的物理基础:而离开了表空间,Oracle就无法获得数据文件的信息,无法访问到对应的数据文件,这样的数据文件就成了垃圾文件。
数据文件的大小可以用两种方式表示,即字节和数据块。数据块是Oracle数据库中最小的数据组织单位,它的大小由参数“DB_BLOCK_SIZE”来确定。
三、控制文件
数据库控制文件是一个很小的二进制文件,它维护着数据库的全局物理结构,用以支持数据库成功地启动和运行。创建数据库时,同时就提供了与之对应的控制文件。在数据库使用过程中,Oracle不断地更新控制文件,所以只要数据库是打开的,控制文件就必须处于可写状态。若由于某些原因控制文件不能被访问,则数据库也就不能正常工作了。
每一个Oracle数据库有一个控制文件,它记录着数据库的物理结构,其中主要包含下列信息类型:
- 数据库名称。
- 数据库数据文件和日志文件的名字和位置。
- 数据库建立日期。
- 日志历史。
- 归档日志信息。
- 表空间信息。
- 数据文件脱机范围。
- 数据文件拷贝信息。
- 备份组和备份块信息。
- 备份数据文件和重做日志信息。
- 当前日志序列数。
- 检查点信息(CHECKPOINT)。
Oracle数据库的控制文件是在数据库创建的同时创建的。默认情况下,在数据库创建期间至少有一个控制文件副本,如在Windows平台下,将创建3个控制文件的副本。
每一次Oracle数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时它们必须被打开。当数据库的物理组成更改时,Oracle自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。如果数据库的物理结构发生了变化,用户应该立即备份控制文件。一旦控制文件不幸被毁损,数据库便无法顺利启动。也因为如此,控制文件的管理与维护工作显得格外重要。
四、日志文件
日志文件也称为重做日志文件(Redo Log File)。重做日志文件用于记录对数据库的所有修改信息,修改信息包括用户对数据的修改,以及管理员对数据库结构的修改。重做日志文件是保证数据库安全和数据库备份与恢复的文件。
重做日志文件主要在数据库出现故障时使用。在每一个Oracle数据库中,至少有两个重做日志文件组,每组有一个或多个重做日志成员,一个重做日志成员物理地对应一个重做日志文件。在现实作业系统中为确保日志的安全,基本上对日志文件采用镜像的方法。在同一个日志文件组中,其日志成员的镜像个数最多可以达到5个。有关日志的模式包括归档模式(ARCHIVELOG)和非归档模式(NOARCHIVELOG)两种。
Oracle在重做日志文件中以重做记录的形式记录用户对数据库进行的操作。当需要进行数据库恢复时,Oracle将根据重做日志文件中的记录,恢复丢失的数据。重做日志文件是由重做记录组成的,重做记录又称为重做条目,它由一组变更向量组成。每个修改向量都记录了数据库中某个数据块所做的修改。例如,如果用户执行了一条UPDATE语句对某个表中的一条记录进行修改,同时将生成一条重做记录。这条重做记录可能由多个变更向量组成,在这些变更向量中记录了所有被这条语句修改过的数据块中的信息。被修改的数据块包括表中存储这条记录的数据块,以及回滚段中存储的相应的回滚条目的数据块。
利用重做记录,不仅能够恢复对数据文件所做的修改操作,还能够恢复对回滚段所做的修改操作。因此,重做日志文件不仅可以保护用户数据库,还能够保护回滚段数据。在进行数据库恢复时,Oracle会读取每个变更向量,然后将其中记录的修改信息重新应用到相应的数据块上。
五、表空间
表空间是Oracle数据库中最大的逻辑结构。它提供了一套有效组织数据的方法,是组织数据和进行空间分配的逻辑结构,可以将表空间看作是数据库对象的容器。简单地说,表空间就是一个或多个数据文件(物理文件)的集合(逻辑文件),所有的数据对象都被逻辑地存放在指定的表空间中。
一个数据库通常包括SYSTEM、SYSAUX和TEMP三个默认表空间,一个或多个临时表空间,还有一个撤销表空间和几个应用程序专用的表空间。可以通过创建新的表空间来满足需求,创建时需要决定表空间的类型。
5.1表空间的类型
(1)系统表空间(System tablespace)
系统表空间包括SYSTEM和SYSAUX表空间,系统表空间是所有数据库必需且自动创建的,一般存放Oracle的数据字典表及相应数据。
(2)永久表空间(Permanent tablespace)
永久表空间用于保存永久性数据,如系统数据、应用系统数据。每个用户都会被分配一个永久表空间,以便保存其相关数据。除了撤销表(Udo)空间以外,相对于临时表空间而言,其他表空间就是永久表空间,如系统表空间。
(3)临时表空间(Temporary tablespace.)
由于Oracle工作时经常需要一些临时的磁盘空间,这些空间主要在查询带有排序(如Group by、Order by等)算法时使用,当用完后就立即释放,对记录在磁盘区的信息不再使用,因此称为临时表空间。一般安装之后只有一个TEMP临时表空间。
(4)撤销表空间(Undo tablespace)
从Oracle9i后,提供了一种全新的撤销空间管理方式,从而使得DBA能够很容易地管理撤销空间,即“自动撤销管理”。而与此相对应,通过回滚段进行撤销空间管理的方式被称为“手工撤销管理”。自动撒销管理方式也称为SMU(System Managed Undo)方式,而回滚段管理方式称为RBU(Rollback Segments Undo)方式。在Oracle 11g数据库中,系统默认为启用自动撤销表空间管理方式,同时也支持传统的回滚段管理方式。
(5)大文件表空间和小文件表空间
从Oracle 10g开始,Oracle引入了大文件表空间,这是一个新增的表空间类型。该类型的出现使存储能力有了显著的增强。大文件表空间不像传统的表空间那样由多个数据文件组成。
大文件表空间(bigfile tablespace)是为了超大型数据库而设计的,如果一个超大型数据库具有上千个数据文件,则更新数据文件头部信息(如check-.point).的操作可能会花费很长时间。如果使用大文件表空间,可以使用大数据文件来减少文件的数量,从而减少更新的时间。
小文件表空间(smallfile tablespace)是之前Oracle表空间在Oracle 11g中的新名称,是默认创建的表空间的类型。在小文件表空间中可以放置多达1022个数据文件,一个数据库最多可以放置64K个数据文件。SYSTEM和SYSAUX表空间总是被创建为小文件表空间。
5.2表空间的状态
出于不同的使用需求,对表空间设置了不同的状态。通过改变表空间的状态,可以控制表空间的可用性和安全性,也可以为相关的备份恢复等工作提供保障。表空间的状态介绍如下:
(1)读写(Read-Write)状态
这是表空间的默认状态。任何具有表空间配额并拥有相关权限的用户均可读写表空间的数据。
(2)只读(Read-Only)状态
如果将表空间设置为只读状态,则任何用户(包括DBA)均无法向表空间写入数据,也无法修改表空间中的现有数据,这种限制和权限无关。
只读状态可以使表空间的数据不被修改,即仅能SELECT,而无法进行NSERT、UPDATE或是DELETE操作。只读状态一方面对数据提供了保护,另一方面对数据库中设置静态数据非常有好处。我们可以将不能被修改的静态数据保存在一个单独的表空间中,并将这个表空间设置为只读状态,这样既能够提高数据的安全性,又能够减轻DBA的管理和维护的负担。
(3)脱机(Offline)状态
在有多个应用表空间的数据库中,DBA可以通过将某个应用表空间设置为脱机状态,使表空间暂时不被用户访问。如果需要访问该表空间时,必须将脱机状态设置为联机状态。这样的设置增强了表空间的可用性,并提高了数据库管理的灵活性。
5.3表空间的作用
对Oracle数据库来说,引入表空间概念具有以下作用:
- 控制用户所占用的空间配额。
- 控制数据库所占用的磁盘空间。
- 可以将表空间设置成只读状态而保证大量的静态数据不被修改。
- 能够将一个表的数据和这个表的索引数据分别存储在不同的表空间中,也可以提高数据库的/O性能。
- 可通过其将不同表的数据、分区表的不同分区的数据存储在不同的表空间中,可以提高数据库的/O性能,并有利于进行数据库的部分备份和恢复等管理工作。
- 表空间提供了一个备份和恢复的单位,Oracle提供了按表空间备份和恢复的功能。
六、段
段(segment)用于存储表空间中某一种特定的具有独立存储结构的对象的所有数据,它由一个或多个区组成。段包含表空间中一种指定类型的逻辑存储结构,段是数据区的集合,每个段都分配给特定的数据结构,存储在相同的表空间中。
Oracle以数据区为单位为段分配空间,当段的数据区已满的时候,Oracle为段分配另一个数据区, 段的数据区在磁盘上可能是不连续的。段和它所有的数据区都存储在一个表空间中。在表空间中,一个段包含来自多个文件的数据区,段可以跨越数据文件。按照段中所存储数据的特征和用途的不同,可以将段分成数据段、索引段、临时段和回滚段几种类型。
6.1数据段
数据段(data segment)用于存储表中的所有数据。当某个用户创建表时,就会在该用户的默认表空间中为该表分配一个与表名相同的数据段,以便将来存储该表的所有数据。若创建的是分区表,则为每个分区分配一个数据段。显然,在一个表空间中创建了几个表,该表空间中就有几个数据段。
数据段随着数据的增加而逐渐地变大。段的增大过程是通过增加区的个数而实现的。每次增加一个区,每个区的大小是块的整数倍。
6.2索引段
索引段(index segment)用于存储索引的所有数据。当用户用CREATE INDEX语句创建索引,或在定义约束(如主键)自动创建索引时,就会在该用户的默认表空间中为该索引分配一个与索引名相同的索引段,以便将来存储该索引的所有数据。如果创建的是分区索引,则为每个分区索引分配一个索引段。
6.3临时段
临时段(temporary segment).用于存储排序操作所产生的临时数据。当用户使用ORDER BY语句进行排序或汇总时,在该用户的临时表空间中自动创建一个临时段,排序结束,临时段自动消除。
在Oracle中,临时表空间一般是通用的,所有用户的默认临时表空间都是TEMP表空间。当然,可以在创建用户之后,指定临时表空间。
6.4回滚段
回滚段(rollback segment).用于存储用户数据被修改之前的值,以便在特定条件下回滚用户对数据的修改。Oracle利用回滚段来恢复被回滚事务对数据库所做的修改,或者为事务提供读一致性保证。需要注意的是,每个数据库都将至少拥用一个回滚段。
七、区
区(Extent)是由物理上连续存放的块构成的。区是Oracle存储分配的最小单位,由一个或多个块组成,一个或多个区将组成段。当在数据库中创建带有实际存储结构的方案对象时,Oracle将为该方案对象分配若干个区,以便组成一个对应的段来为该方案对象提供初始的存储空间。当段中已分配的区都写满后,Oracle就为该段分配一个新区,以便容纳更多的数据。
八、数据块
数据块(B1oCk)是最小的数据管理单位,也是执行输入输出操作时的最小单位。相应地,操作系统执行输入输出操作的最小单位是操作系统块。Oracle块的大小是操作系统块大小的整数倍,可以在安装时选择“自定义安装”来指定,也可以在CREATE DATABASE创建数据库实例时指定。其最小为2K,最大可达为64K。
在数据块中可以存储各种类型的数据,如表数据、索引数据和簇数据等。无论数据块中存放何种类型的数据,每个数据块都具有相同的结构。Oracle数据块的基本结构由以下几个部分组成:
- 块头部:块头部包含块中一般的属性信息,如块的物理地址、块所属的段的类型等。
- 表目录:若块中存储的数据是表数据(表中的一行或多行记录),则表目录存储关于该表的信息。
- 行目录:存储该块中有效的行信息。
- 空闲空间:数据块中尚未使用的存储空间,当向数据中添加新数据时,将减小空闲空间。
- 行空间:行空间是块中已经使用的存储空间,在行空间中存储了表或索引的数据
块头部、表目录和行目录共同组成块的头部信息区。块的头部信息区中并不存放实际的数据库数据,它只起到引导系统读取数据的作用。因此,若头部信息区被损坏,则整个数据块将失效,数据块中存储的数据将丢失。而空闲空间和行空间则共同构成块的存储区,空闲空间和行空间的总和就是块的总容量。
提示:
了解数据文件、控制文件、日志文件的结构和特点,对于开发人员和DBA人员来说,可以更好地维护、管理配置数据库;
了解表空间、段、区、数据块的特点和使用方法,有利于管理员更好地配置、管理和优化数据库,提高运行效率,提高其性能和可靠性。
因此,我们应该清楚Oracle的这些基本术语,加强自己对数据的应用能力!