Oracle的体系结构
前言
这个章节主要想说的是Oracle的体系结构,这个也是理论强些。还有一些比较理论的知识点(比如表空间啊),就暂时先不写了,下一章节开始进入Oracle的操作阶段,比如表的查询啊、插入以及重点是和SQL 2005的一些区别和Oracle中特有的命令。
希望大家继续捧场。
Oracle体系结构分类
我们应该知道的是在Oracle数据库的体系结构包括以下四种结构:
那下面我比较粗略的说以下结构包括什么!~
一。物理存储结构
顾名思义,Oracle数据库在物理是由存储在磁盘中的操作系统文件所组成的,能被我们看见的文件。Oracle 数据库在物理上主要有3种类型的文件组成,分别是数据文件(*.dbf)、控制文件(*.ctl)、日志文件(*.log)
①数据文件(Data File):指存储数据库数据的文件,也就是我们平时新建的数据库。比如表中的记录、索引都存储在数据文件中。我们需要注意的时候,用户在读取数据的时候,如果用户读取的数据不在缓冲区(就像我们操作系统也有一个缓存,在计算机中 为了提高系统的性能,把一些常用的数据放在内存中),那么就从数据库中读取出来,放到内存中去。存储数据的时候,也是先把数据保存到缓冲区中,然后再后台进程DBWn讲数据写入到数据文件中。
我们可以通过dba_data_files数据字典(数据字典就是存储一些系统数据)数据文件的状态。有一些字段解释一下:
Blocks:数据文件所占用的数据块数
autoextensible:数据文件是否允许扩展
tablespace_name:数据文件对应的表空间名
②控制文件(Control File):是一个二进制文件,用来描述数据库的物理结构。主要存放着数据库中的数据文件和日志文件信息。如果在使用Oracle过程中,损坏了控制文件,那么数据库将无法正常工作。
Oracle一般会默认创建3个包含相同信息的控制文件,目的是为了当其中一个受损时,可以调用其他控制文件来继续工作。
③日志文件(Log file):是记录数据库中所修改信息的文件,保证数据库安全,也可以实现数据的备份与恢复。
如果status位current表名系统正在使用该字段对应的日志文件。如果是inactive,则没有使用。
当一个日志文件组的空间被占用完了之后,Oracle系统会自动转换到另一个日志文件组。不过,也可以使用alter system swithch logfile 进行手动切换。
④其他文件
当然,除了上面的之外 还有其他的一些文件。
参数文件:记录Oracle数据库的基本信息,比如数据库名和控制文件所在的路径等。
备份文件:可以借助备份文件对受损文件进行备份
归档重做日志文件:对写满的日志文件进行复制并保存
警告、跟踪日志文件:如果一个进程发现了一个内部错误时,可以将关于错误的信息存储到它的跟踪文件中。
二。逻辑存储结构
Oracle数据库的表空间从逻辑存储结构上来说,包括表空间、段、区和数据快。他们之间的关系是多个数据库组成一个区,多个区组成一个段,多个段组成一个表空间,多个表空间组成数据库,所以图如下:
①表空间:Oralce中,最大的逻辑存储结构是表空间(tablespace)。表空间和物理上的数据文件相对应。具体 下面详解。
②段(Segment)是一组盘区,这组盘区组成了被Oracle视为一个单位的数据库对象,比如表或索引。因此,段是数据库终端用户将处理的最小单位。
分为5中段:
数据段:存储表中数据。
索引段:存储表中所有索引。
临时段:存储临时数据。
LOB段:用于存储表中的大型数据对象。
回退段:用于存储用户数据被修改之前的值。
③区:Oracle中,区是磁盘空间分配的最小单位。
段的增大是通过增加区的个数来实现的,在个数并非是没有限制的。创建段的时候,可以使用Min_extents和Max_extents来定义区的个数。
④块(Block)是用来管理存储空间的最基本单位,也是最小的逻辑存储单位。
在创建Oracle数据库时,初始化参数DB_BLOCK_SIZE用来指定一个数据库的大小。数据库创建之后,无法修改数据库的大小。比如:
数据块的结构如下:
块头部:数据库中的一搬性信息,比如数据库的物理地址。
表目录:存储表的信息。
行目录:存储数据库中有效的行信息。
空闲空间:还没有使用的存储空间。
行空间:存储表或索引的数据。
三。内存结构
当用户发出一条SQL命令时,服务器进程会对这条SQL语句进行语法分析并执行它,然后将用户所需要的数据从磁盘的数据文件中读取出来,存放在系统全局区中的数据缓冲区中。如果用户进程对缓冲区中的数据进行了修改,则修改后的数据将由数据库写入进程DBWn希尔磁盘数据文件中。
按照系统对内存的使用方法不同,Oracle数据库的内存分为以下几部分:
①系统全局区(SGA)
是Oracle位系统分配的一组可共享的一组共享的内存结构,可以保护一个数据实例的数据或控制信息。系统全局区按照作用的不同可以分为:
- 数据缓冲区
用于存储从磁盘数据文件中读取的数据,供所有用户共享。
- 日志缓冲区
用于存储数据库的修改操作信息。
- 共享池
共享池用来保存最近执行的SQL语句、PL/SQL程序的数据字典信息,它是对SQL语句和PL/SQL程序进行语法分析、编译和执行的内存区域。
共享池的大小由shared_pool_size 确定。
②程序全局区(Program Global Area,PGA)
是包含单个用户或服务器数据和控制信息的内存区域,它在用户进程连接到Oracle数据库并创建一个会话是,由Oracle自动分配。
③排序区(Sort Area)
是Oracle系统为排序操作所产生的临时数据提供的内存空间。
④大池(Large Pool)
提供一个大的缓冲区供数据库的备份与恢复操作使用。
四。实例进程结构
① DBWn(DataBase Write,数据库写入)进程是赋值管理数据缓冲区的后台进程,用于将缓冲区中的数据写入到数据文件。
②LGWR(Log Write,日志写入)进程是负责管理日志缓冲区的一个后天进程,用于将日志缓冲区中的日志数据写入磁盘的日志文件。
③CKPT(Check Point)进程保存所有修改过的数据缓冲区中的数据都被写入磁盘数据文件中。
默认情况是1800秒。
④SMON(System Monitor)进程:用于在实例启动时执行实例恢复,并负责清理不在使用的临时段。
⑤PMON(Process Monitor)进程:用于在用户进程出现故障时执行恢复操作。
⑥ARCn(Archive Process,归档):将写满日志文件复制到归档日志文件中。
⑦RECO (Recovery)进程:用在分布式数据库系统中,用于自动解决在分布式数据库中出现的事物故障。
⑧LCKn(Lock)进程:存在于并行服务器系统中,用于实现多个实例间的封锁。
⑨Dnnn(Dispatchers)进程:存在于多线程服务器体系结构中,用于将用户进程连接到服务器进程中。
五。数据字典
在我的这篇和前篇文章用到了很多数据字典(是oracle数据库用来存贮数据库结构信息的地方)。这个很有用,网上资料也很多!~~
转载自:http://www.cnblogs.com/damonlan/archive/2012/07/27/2604132.html