ORACLE 10G体系结构与存储结构(存储结构)

时间:2022-12-25 03:57:45

ORACLE数据库的存储结构分为逻辑存储结构和物理存储结构。逻辑存储结构与操作系统平台无关;物理存储结构与操作系统平台有关。
从物理上看,数据库是由控制文件、数据文件、重做日志文件、初始化参数文件等组成的;从逻辑上看,数据库是由表空间组成的。表空间是最大的逻辑存储单位,块是最小的逻辑单位,逻辑存储结构中的块对应于操作系统中的块。

一、逻辑存储结构
许多初始化参数都是针对逻辑存储结构来定义的。
逻辑存储结构包括表空间、段、区、块。逻辑存储结构之间的关系是:多个块组成区,多个区组成段、多个段组成表空间、多个表空间组成逻辑数据库。
一个区只能存在一个数据文件中,一个段中的各个区可以分别在多个数据文件中。组成区的块是连续的。
(一)表空间
表空间是最大的逻辑单位,一个数据库由多个表空间组成,一个表空间可以包含多个数据文件,一个数据文件只能属于一个表空间。
ORACLE自动创建的表空间
SYSTEM系统表空间
SYSAUX辅助系统表空间
EXAMPLE实例表空间
TEMP临时表空间
UNDOTBS1重做表空间
USERS用户表空间
(1)SYSTEM表空间
(2)SYSAUX表空间
(3)TEMP表空间
当SYSTEM表空间被创建为一个本地管理的表空间时,TEMP表空间就是必不可少的,否则他是可选的。
SYTEM和SYSAUX表空间值存放系统信息,不存放非系统信息。
(二)段
段用于存储表空间中某一个特定的、具有独立存储结构的的数据库对象的数据,它由一个或多个连续的区组成。
ORACLE中可用的段类型
TABLE表段
TABLE PARTITION表分区段
INDEX索引段
INDEX PARTITION索引分区段
CLUSTER簇段
ROLLBACK回退段
DETERRED ROLLBACK延迟回退段
UNDO撤销段
TEMPORARY临时段
CACHE高速缓存段
LOB二进制大对象段
LOBINDEX二进制大对象索引段

段的增大过程是通过增加区的个数而实现的(每次增加一个区)。每个区的大小是块的整数倍。
(1)表段
表段存储表的所有数据。当用户创建表时,就会在该用户的默认表空间中为该表分配一个与表名相同的表段,以便将来存储该表的所有数据。
(2)表分区段
表分区段用于存储分区表的所有数据。当用户创建分区表时,就会在该用户的默认表空间中为该表的每个分区分配一个表分区段。通过将一个达标的数据分散到不同的表分区段中,就能降低I/O次数,提高性能。
(3)索引段
索引段存储索引的所有数据。当用户用CREATE INDEX语句创建索引,或在定义约束而自动创建索引时,就会在该用户的默认表空间中为该索引分配一个与索引名相同的索引段。
(4)索引分区段
如果为分区表创建分区索引,则会为每个区分区索引分配一个索引分区段,其功能与表分区段相同。
(5)临时段
临时段存储排序所产生的临时数据。临时数据首先会被暂存到排序区(属于PGA区)中,当排序区不足以暂存这些临时数据时,则会在该用户的临时表空间中自动创建一个临时段,用于暂存这些临时数据,排序结束时,临时段会自动消除。
执行以下操作时会产生临时数据:CREATE INDEX,SELECT..ORDER BY,SELECT...GROUP BY,SELECT DISTINCT...,SELECT...UNION,SELECT...INTERSECT,SELECT...MINUS,ANALYZE命令。
在ORACLE中,每个用户都有一个用户分配临时段的临时表空间。临时表空间一般通用,所有的用户的默认临时表空间都是TEMP表空间。也可以创建另外的临时表空间,然后在创建用户时或创建用户之后,指定其临时表空间。
建议使用专用的临时表空间作为用户的临时表空间。
(6)回退段
回退段存储数据修改之前的位置和值。利用这些信息,可以回退未提交的事务,维护数据库的读一致性,并能从例程的崩溃中进行恢复。
回退段的原理与实现是一项十分复杂的技术,已经面临淘汰。自ORACLE 9I来,增加了UNDO(撤销或还原)表空间,并增加了自动撤销管理功能来代替回退段的功能,即用撤销表空间代替回退段,但功能相同。
建议使用自动撤销管理功能中的撤销段,不要使用手动撤销管理的回退功能。
(7)撤销段
撤销表空间用于分配撤销段。撤销段也用于存储数据修改之前的位置和值。
默认的撤销表空间由初始化参数UNDO_TABLESPACE指定的。撤销表空间是循环使用的,已提交的撤销记录可能被覆盖,但可以用初始化参数UNDO_RETENTION指定撤销记录在撤销段中的保留时间。
即使在ORACLE中设置初始化参数UNDO_MANAGEMENT为AUTO,即启动自动撤销管理功能,也会在SYSTEM表空间中保留一个SYSTEM回退段,以便存放和处理由ORACLE系统事务产生的撤销数据。在创建数据库后,运行SQL.BSQ脚本时会自动创建SYSTEM回退段,DBA不需要对它进行任何的维护和管理,也不能删除它。
(8)二进制大对象段
二进制大对象段用于存储LOB数据类型列中的数据,如:文档,图像,音频,视频等。创建表时,可以定义LOB数据类型的列,ORACLE会为此自动分配对应的二进制大对象段。对于LOB列来说,如果数据长度少于40000字节,则与其他列的数据会一起存放在表段中;否则数据就会被存储到二进制大对象段中。

(三)区
区是由物理上连续存放的块构成。由一个或多个区组成段。一个区只能属于一个数据文件。
当在数据库中创建带有实际存储结构的方案对象时,ORACLE将为该方案对象分配若干个区,以便组成一个对应的段,来为该方案对象提供初始的存储空间。当段中已分配的区都写满后,ORACLE就要在该方案对象所在的表空间中为该段分配下一个新的空白区,以便容纳更多的数据。

(四)块
块是最小的数据管理单位。即数据管理中输入输出的最小单位。相应的,操作系统执行输入输出操作的最小单位是操作系统块。
块的大小是操作系统块大小的整数倍。
块带笑傲是一个表空间的属性。SYSTEM和SYSAUX表空间具有相同的标准的块大小,这个大小是在创建数据库时由DB_BLOCK_SIZE初始化参数指定的。在创建数据库之后这个初始化参数值将不能再改变。
在ORACLE 9I前,同一个数据库中的所有表空间必须使用相同大小的块;从ORACLE 9I开始,允许表空间使用各自不同的块大小,这个大小是在创建该表空间时用BLOCK integer [K]子句指定的。如果不适用该子句,则可以使用DB_BLOCK_SIZE初始化参数指定的块大小。在使用非标准块之前,必须先为非标准的块分配相应的数据告诉缓存。

二、物理存储结构
数据库的物理存储文件有:控制文件、数据文件、重做日志文件、密码文件、参数文件和归档重做日志文件等。
逻辑存储结构只有创建、删除的操作;而物理存储结构除了创建、删除之外,还有一个最重要的将其移动到另外一个位置的操作。
(1)控制文件
控制文件是一个很小的二进制文件。在装载数据库时,ORACLE将读取控制文件中的信息,以便判断数据库的状态,获得数据库的物理结构信息及物理文件的使用权。因此,控制文件对于数据库的成功装在,以及其后的打开都是至关重要的。只有控制文件正常才能装载、打开数据库,否则不能。
在数据库运行的过程中,每当出现数据库检查点(checkpoint)或修改数据库结构之后,ORACLE就会修改控制文件的内容。DBA可以通过OEM工具修改控制文件中的部分内容,但是不应该认为的修改控制文件中的内容,否则会破坏控制文件。
应该定期对数据库的控制文件进行备份,并将备份保存在不同的硬盘上;另外,处于安全考虑,可以创建多个控制文件,互为镜像进行复用。

(2)数据文件
数据文件是实际存储插入到数据库表中的实际的操作系统文件。数据文件的大小与它们所存储的数据量的小小直接相关,会自动增大,但删除其中的数据,数据文件的大小不会减少,只能使其有更多的空闲区。
一个表空间在物理上对应于若干个数据文件,而一个数据文件只能属于一个表空间。
在创建表空间时,ORACLE会同时为该表空间创建第一个数据文件。处SYSTEM表空间之外,任何表空间都可以由联机状态切换到脱机状态。当表空间进入脱机状态时,组成该表空间的数据文件也就进入脱机状态了。也可以将表空间中的某一个数据文件单独的设置为脱机状态,以便进行数据库的备份或恢复。正在使用的联机数据文件是不能备份的。

(3)重做日志文件
当用户对数据库进行修改时,ORACLE实际上是在内容中进行修改,过一段时间后,再几种将内存中的修改结果成批的吸入上面的数据文件中。
如果在将内存中的修改结果写入到数据文件之前发生故障,导致计算机或数据库崩溃,那么,这些修改结果就会被遗失。ORACLE是用重做日志文件来随时保存这些修改结果的,即ORACLE随时将内存中的修改结果保存到重做日志文件中。“随时”表示在将数据修改结果写入数据文件之前,可能已经分好几次写入重做日志文件了。因此,即使发生故障导致数据库崩溃,ORACLE也可以利用重做日志文件中的信息来恢复丢失的数据。只要某项操作的重做信息没有丢失,就可以利用这些重做信息来重现该操作。
因为ORACLE是以循环方式来使用重做日志文件的,所以每个数据库至少需要2个以上重做日志文件。当第一个重做日志文件被写满之后,后台进程LGWR开始写入第二个重做日志文件。当第二个重做日志文件写满后,又开始写入第一个重做日志文件。
当循环使用的重做日志文件比较多、比较大时,可以记录的重做日志就比较多。还可以启动自动归档功能,将即将被覆盖的重做日志文件中的内容存储到另外的归档文件总,以便不丢失任何重做日志,得以恢复任何数据。

(4)其他文件
其他文件包括参数文件、口令文件、归档重做日志文件和后台进程跟踪文件等。
参数文件
参数文件也被称为初始化参数文件,用于存储SGA、可选的ORACLE特性和后台进程的配置参数。从ORACLE 9I开始,它有2中类型:文本参数文件PFILE和服务器参数文件SPFILE。这两种参数文件的作用都相同,可以使用其中之一来配置例程和数据库选项。文本参数文件可以使用文本编辑器进行编辑;服务器参数文件是二进制文件,不能直接用文本编辑器进行编辑。
当数据库启动时,并在创建例程或读取控制文件之前,会先读取参数文件,并按期中的参数进行例程的配置。默认使用的是SPFILE。

口令文件
口令文件是个二进制文件,用于验证特权用户。特权用户是指具有SYSOPER或SYSDBA权限的特殊数据库用户。这些用户可以启动例程、关闭例程、创建数据库、执行备份恢复等操作。创建ORACLE数据库,默认的特权用户是SYS。口令文件的默认位置是%ORACLE_HOME%database,命令格式为PWD<SID>.ora。

预警文件
预警文件按时间顺序记录了由服务器进程、后台进程写入的消息和错误。查看预警文件就可以查看到是否有ORACLE内部错误、块损坏错误,以及非默认的初始化参数,还可以监视特权用户的操作,监视数据库的物理结构的变化。预警文件的位置由初始化参数background_dump_dest确定。命名格式为<SID>_alert.log。

后台进程跟踪文件
后台进程跟踪文件用来记录后台进程的警告或错误消息。每个后台进程都有相应的跟踪文件。后台进程跟踪文件的位置由初始化参数background_dump_dest确定。命名格式为<SID>_<PROCESS>_<SPID>.trc。

服务器进程跟踪文件
该文件用来记录服务器进行的相关信息,跟踪SQL语句,诊断SQL语句性能,做出相应的性能调整规划。当使用该类型跟踪文件来跟踪SQL语句时,必须先激活SQL跟踪。服务器进程跟踪文件的位置由初始化参数user_dump_dest来确定。命名格式为<SID>_ora_<SPID>.trc。
激活SQL跟踪的办法是在初始化参数文件中,或是在启动会话时,将参数sql_trace设置成TRUE。

归档日志文件
非活动的重做日志文件的备份。通过使用归档日志文件,可以保留所有历史重做记录。只有在归档模式下才会生成归档日志文件。

监听程序日志文件、跟踪文件
记录监听程序的启动时间、正在监听的端口、正在运行在哪台计算机上、已经建立了哪些连接等信息。其默认位置是%ORACLE_HOME%\NETWORK\log,命名格式为listenerX.log,其中listenerX为程序的名称。