--------------------------------------
这篇文章主要就是记录一下自己对oracle体系结构的理解,其中不免有不对的地方,请各位谅解并暴风骤雨般的指正!
--------------------------------------
oracle数据库的结构
在学习oracle数据库时,有两个概念一直很混淆,就是数据库(database)和实例(instance),采用《Oracle_Database_9i10g11g编程艺术深入数据库体系结构》一书中的解释就是:
数据库(database):物理操作系统文件或磁盘的集合。如果使用的是ASM或RAW分区时,数据库可能不是单独的操作系统文件,但定义仍然不变。
实例(instance):一组oracle后台进程/线程以及一个共享内存区,这些内存由同一计算机上运行的线程/进程所共享。
我理解的数据库(database)就是物理存在的保存数据的数据文件和一些必备的其他文件组成,一直存在的;实例(instance)就是一组共享的内存区域,随着计算机的关机而消失。(理解不对的地方,请指正!)
一、逻辑数据库结构
oracle的逻辑数据库结构包括(从小到大):
数据块(data block):oracle数据库中的存储的最小单元,一般是8k,数据库还支持2k,4k,16k的块
区(extent):有相邻的多个数据块组成,空间分配的单元。
段(segment):由多个区组成,如undo段。
表空间(tablespace):由多个相应的段组成,包含有多个数据文件。oracle11g数据库中包含5个默认的表空间:system表空间,sysaux表空间,撤销(undo)表空间,临时(temporary)表空间,用户(user)表空间
二、物理数据库结构
oracle的物理数据库结构包括:
数据文件(data file):存储真实的数据(表和索引等)
控制文件(control file):记录对数据库结构的更改信息(重要)
重做日志文件(redo log file):联机在线的方式记录对数据操作的信息,轮训方式记录
初始化参数文件(spfile和pfile):记录数据库的初始化参数,spfile文件为二进制服务器文件,pfile为文本文件,二者可以互相生成
密码文件(orapwd[sid]):指定了sysdba或sysoper管理权限的数据库用户的名字
预警日志文件(alter_[sid].log):记录实例运行期间的主要更给和事件,如日志切换、和数据库有关的错误、告警以及其他的消息
跟踪文件(trace):记录后台进程写入的调试跟踪文件,用户进程的调试跟踪文件
归档日志文件(archivelog):归档模式下产生的归档日志,由arch进程写入日志。
备份文件(backup):数据库的备份

三、oracle进程
oracle的进程主要包含了用户进程和oracle进程。
用户进程:负责运行连接用户和数据库实例的应用,如sqlplus,pl/sql等
oracle进程:执行oracle服务器的任务,有分为:服务器进程和后台进程。服务器进程(server process)为单独的用户进程服务的进程,每一个用户在连接数据库的时候,在会话期间创建。后台进程(backgroud process)为oracle实例真正干活的进程,最重要的包括了DBWn,LGWR,CKPT,PMON及SMON五大进程,下边分别简单介绍这五大进程的作用:
数据库写进程(DBWn):将更改的数据从高速缓冲区写入数据文件
日志写进程(LGWR) :将重做日志从日志缓冲区中写入联机重做日志文件
检查点进程(CKPT):更新数据文件的头,记录检查点的详细信息,保证数据一致性
进程监控进程(PMON):监控数据库进程,定期清理完成或失败的进程
系统监控进程(SMON):执行实例恢复,并且合并区
后台进程还包括其他一些进程:归档进程(ARCn),可管理进程(MMON),可管理监控进程(MMNL),内存管理进程(MMAN),作业队列调整进程(CJQO),闪回数据库进程(RVWR),跟踪数据库变化进程(CTWR),ASM进程(RBAL、ARBn、ASMB)
四、oracle内存结构
oracle包括两种内存结构,一种为共享内存结构,一种为进程专有内存结构。共享的内存区被称为SGA(系统全局区),专有的内存区被称为PGA(程序全局区或私有内存区)
SGA是实例中最重要的组成部分,其主要部件包括:
数据库高速缓冲区(buffer cache):读取数据文件中的数据
共享池(share pool):包含library cache,data dictionary cache等
重做日志缓冲区(redo log buffer):包含对数据库的操作的信息
Java池(Java pool):实例化Java对象的堆空间
大池(large pool):存储大内存的配置,如rman
流池(streams pool):支持oracle的流功能
PGA是每个服务器进程独占的,是在用户启动会话时为每一位用户创建的一个程序全局区,可以将PGA划分为私有SQL区域和运行时区域




