前言:Oracle 体系结构其实就是指oracle 服务器的体系结构,数据库服务器主要由三个部分组成 管理数据库的各种软件工具(sqlplus,OEM等),实例(一组oracle 后台进程以及服务器中分配的共享内存区域),数据库(是基于磁盘的各种物理文件的集合,如数据文件,控制文件,日志文件,参数文件,归档日志文件) 实例与数据库之间的关系 (实例用于管理和控制数据库,数据库为实例提供数据,一个数据库可以被多个实例转载和打开,而一个实例在其生存周期内只能转载和打开一个数据库)
1.数据库
1.1 数据库从逻辑角度分析数据库构成--表空间、段、数据区、数据块,面向用户的划分方式
表空间:数据库最大的逻辑 划分区域,可存放数据表,索引,回滚段等数据对象,任何数据对象在创建时都必须有指定的表空间 表空间与数据文件的关系是一个表空间由一个或多个数据文件组成一个数据文件只属于一个表空间,oracle数据的存储空间在逻辑上表现为表空间,在物理上表现为数据文件(表空间相当于文件夹)
分类:system表空间(存放系统内部表和数据字典数据)
SYAAUX 表空间,系统表空间的辅助表空间,降低system表空间的负荷,存放字典以外的数据对象
UNDO 表空间,存放撤销信息
USER 表空间:存放用于创建的数据对象,比如SCOTT,一般不同的应用系统的数据应该存放在不同的表空间,而不同的表空间应该存放在不同的磁盘上,从而减少I/O 冲突,提更应用系统的操作系能。
段:它不是存储空间的分配单位,但是一个独立的额逻辑存储结构,用于存储表,索引等,一个数据段只属于一个特定的数据对象,段内的数据区可以不连续,并且跨越多个文件,
数据区: 数据区是由连续的数据块组成的 ,数据区是存储分配的最小单位,分配存储空间是以数据区为单位的,使用数据区的目的是为了保存特定数据类型的数据,一个oracle对象包含至少一个数据区
数据块:逻辑存储结构中最小的逻辑单位,也是执行数据库输入输出操作的最小存储单位。数据块有块头,表目录,行目录组成块头,存放整个数据块的引导信息,空余空间是未用信息用于数据的插入和更新,行数据存放表数据和索引
1.2 物理存储结构
逻辑上数据是存储在表空间中,而物理上存储在表空间所包含的物理文件中,物理存储结构是指由多种物理文件组成,主要有数据文件,控制文件,重做日志文件,归档文件,参数文件,口令文件和警告日志文件
数据文件
在表空间中创建数据对象时,用户无法决定使用哪个数据文件进行存储,有oracle系统负责分配物理存储空间。一个数据对象可以全部存储在一个数据文件中,也可以分布存储在同一个表空间的多个数据文件中。读数据是oracle系统将数据文件中的数据存储在高速 缓冲区,若用户请求数据不再高速缓冲区,则要将数据文件读取到缓冲区,数据更新时不会立即存储在数据文件中,而是由后台进程DBWR 决定何时写入文件,减少磁盘的I/O操作,提高系统的响应性能。(系统数据文件,撤销数据文件,用户数据文件)
控制文件
控制文件是一个二进制文件,记录了数据库的物理结构,主要包含数据库名,数据库文件与日志文件的名字和位置,数据库建立的日期,系统更改号,检查点,归档状态等信息。它一般在oracle系统安装时或者创建数据库时自动创建,控制文件存放的位置有服务器参数文件spfileorcl.ora 的control_files 参数值来决定。oracle 实例在启动时,首先访问的是初始化参数文件spfile,然后为系统全局区(SGA)分配内存,这时实例处于安装状态,控制文件处于打开状态,此时oracle会自动读取控制文件,若正常则读取所有数据文件和日志文件供用户访问,若控制文件信息错误,将无法正常启动实例。为防止控制文件损坏,系统会有两到三个相同的控制文件记录相同信息。
日志文件--重做日志和归档日志
日志文件的功能是记录对数据所做的修改,如果数据出现问题,可以通过日志文件对得到的原始数据进行修改。
重做日志文件:当用户在提交commit命令时,数据库首先将操作记录在日志文件中,所以日志文件记录了数据库所发生的所有更改信息。若将表空间设置为NOLOGGING时,就不会产生日志信息,但是这样破坏了日志的完整性,日志线程由若干个日志组构成,每个日志组由一个或多个日志文件构成。日志信息开始是存放在重做日志缓冲区的,当信息满三分之一时,由LGWR 进程写入日志文件中。
归档日志文件:当所有日志文件都被写入一遍后,进程会再次转向第一个日志组,为避免日志信息被覆盖,需要进行归档处理解决问题。在进行归档操作时,日志写入进程(ARCH)需要归档完成之后才能覆写日志,延迟了系统响应时间,而且归档占用了大量磁盘空间,影响整体性能,所以oracle 默认不采用归档模式。
服务器参数文件(SPFILE):
SPFILE是二进制文件,用来记录数据库的基本参数信息(比如数据库名,控制文件所在路径,日志缓冲区的大小,数据块的大小等),启动数据库之前,系统会读取SPFILE 初始化参数配置和启动实例,SPFILE 由系统自动创建名为SPFILEsid.ora ,sid 为所创建的数据库实例名,SPFILE 由系统维护,尽可能不直接对文件进行编辑,但可通过企业管理器(OEM)或 ALTER SYSTEM 命令修改,这样参数会自动写进文件。
密码文件:密码文件用于验证sysdba 权限的二进制文件,密码文件命名格式一般为PWD<sid> ,创建密码文件后,可以使用remote_login_passwordfile 来控制密码文件的使用状态:NONE 表示只需通过操作系统的验证,SHARED 表示多个数据库实例都可以采用此密码验证,EXCLUSIVE 表示只有一个数据库实例可以用此密码文件验证
警告文件
警告文件时存储在oracle 系统的文本文件(alter_orcl.log)用来记录系统的运行信息和错误消息
跟踪文件
跟踪文件包括后台进程跟踪文件和用户进程跟踪文件,文件命名格式一般为<sid>_<processname>_<spid>.trc
2.实例
实例是一组oracle后台和服务器中的分配的共享内存区域。通过实例来访问和控制磁盘中的数据文件,当用户连接数据库时其实连接的是数据库实例,用数据库服务器管理和操作数据库时,
其实是实例作为中间枢纽,负责数据库和数据库服务器的通行。
2.1系统全局区(SGA 共享内存区域): SGA 中的资源可以被多个用户使用,SGA主要由高速缓冲区,共享池,重做日志缓冲区,java池和大型池等内存结构组成。SGA随着数据库的实例启动而加载到内存中,当数据库关闭时,SGA区域就消失了
2.1.1高速数据缓冲区:一般存放最近使用的数据,分为三部分 脏数据区(已被修改,等待删除或写进数据文件的数据 ),空闲区(不包含任何数据),保留区(正在被用户使用或者被明确保留下来被用来做将来使用的数据)
2.1.2 重做日志缓冲区:用来存放对数据库操作时所产生的日志信息,当检查点发生或重做日志缓冲区中信息达到一定峰值时,有LGWR写入到重做日志文件中。所以较大的重做日志缓冲区能减少对重做日志文件的I/O读写次数,对数据的整体性能有一定影响。
2.1.3共享池
共享池是SGA保留的内存区域,用于缓存SQL语句,PL/SQL语句,数据字典,资源锁、字符集及其他控制结构等,共享池包含库高速缓冲区(SQL..)和字典高速缓冲区(数据字典..)
2.1.4 大型池
大兴池不是SGA的必须内存结构,实例需要大型池是用来减轻共享池的访问压力,比如,数据备份或恢复时或仿真异步I/o功能时,作为I/o 缓冲区使用。执行大量排序操作时,并行查询时
2.1.5 流池
用于数据库之间的信息共享
2.1.6 java 池
给java虚拟机使用的内存区域,支持在数据库中运行java 程序包
2.1.7后台进程
后台进程是实例的重要组成部分。其中SMON(系统监控进程),PMOM(进程监控进程),DBWR(数据写入程序),CKPT(检查点进程) 这5个后台进程必须正常启动,否则将导致数据库实例的崩溃。其他还有LGWR(日志写入进程),ARCH(归档进程),,LCKN(锁定进程),RECO(恢复进程),DNNN(调度进程),SNNP(快照进程)
3.管理数据库的各种软件-- 前台进程
3.1 程序全局区(PGA)(非共享内存区域)
程序全局区也可称做用户进程全局区,他的内存区是私有的,一个服务器进程,只能访问属于它自己的那部分PGA资源,各服务器资源总和即为实例的PGA 大小。
前台进程:用户进程(能够产生或执行SQL语句的应用程序,如SQL*Plus等,会话是指用户进程和实例实现连接后形成的交互方式,一般用户发出请求,数据库实例为用户返回响应消息)
服务器进程(处理解析会话过程中用户向数据库实例发出的SQL语句或SQL*Plus 命令,对于专用服务器模式,客户端进程和Oracle服务器进程是一一对应的,而在共享服务器模式下,一个Oracle服务器进程可能同时服务多个客户端进程)
常用数据字典 引用http://www.cnblogs.com/liuguosong/p/5808642.html