Oracle体系结构2

singing 10年前
Oracle实例
当把一个关闭的数据库手动启动并装载和打开,从而使数据库变得有效时,分别经历的阶段如下:
l启动实例而不装载数据库
l数据库装载
l数据库打开
1.启动实例,此时执行如下操作:
l从OS指定位置处检索服务器参数文件,如果没找到则通过启动命令中是使用SPFILE还是PFILE替代默认的文件使用该文本初始化参数文件
l从初始化文件中读取初始化参数
l基于初始化参数值分配SGA
l启动Oracle后台进程
l打开警告日志和跟踪文件,并写入警告日志文件
此阶段数据库与实例没有关联,可以执行数据库创建、备份和恢复的等特定任务。
2.数据库装载,其特征如下:
l获取初始化参数文件中指定的控制文件参数(CONTROL_FILES)的值,打开控制文件并从其中找到数据文件和联机重做日志文件的名字
l在一个已装载的数据库中,数据库是关闭的,仅仅DBA能够访问,管理员可以利用本特点在需要完成特定任务时保持数据库装载状态
3.数据库打开,打开后的数据库是可访问的,执行如下操作:
l打开除撤销表空间外其它表空间中的数据文件
l获取撤销表空间
l打开联机重做日志文件
数据库关闭
当把一个打开的数据库手动关闭,使其从有效状态进入无效状态从而执行一些维护任务时,分
别经历的阶段如下:
l数据库关闭
l数据库卸载
l数据库实例关闭
 
1.关闭模式
  有4种关闭模式,其行为是不同的,如下表:
 
行为
ABORD
IMMEDIATE
TRANSCATIONAL
NORMAL
允许新用户连接?
NO
NO
NO
NO
等待直到当前会话结束?
NO
NO
NO
YES
等待直到事务会话结束?
NO
NO
YES
YES
执行一个检查点并关闭文件?
NO
YES
YES
YES
可能的关闭语句分别如下:
lSHUTDOWN ABORD
  用于紧急情形,例如其它的关闭方式无法成功关闭时。强制模式的关闭速度最快,但再重新打开数据库时速度也是最慢的,因为要支持一个恢复过程以确保数据的一致性。
1.关闭模式
可能的关闭语句分别如下(续):
lSHUTDOWN IMMEDIATE
  立即模式的关闭速度仅次于ABORD,此时Oracle会中断任何正在执行的SQL语句并且将连接的用户断开;同时活动事务也被中断,未提交的修改被置成回滚。
lSHUTDOWN TRANSACTIONAL
  事务模式防止新事物的启动,但会等待当前所有事务执行完成。自然地,关闭时间依赖于当活动前事务执行的时间
lSHUTDOWN NORMAL
正常模式是默认的关闭模式,会等待所有已连接用户断开连接后关闭。
2.数据库关闭三阶段
(1).关闭阶段
数据库关闭过程中隐含的操作取决于数据库是正常关闭还是非正常关闭:
1).正常关闭
即没有使用ABORD,此时Oracle会把SGA中的数据写入到数据文件和联机重做日志文件中,接着会关闭联机数据文件和重做日志文件。所有的脱机表空间中的脱机数据文件已经被关闭,如果此时再重新打开数据库,则脱机表空间仍然会保持脱机状态。
在这个阶段,数据库已经被关闭并且不能正常被访问,而控制文件依然还是保持被打开状态。
 
2.数据库关闭三阶段
(1).关闭阶段(续)
1).非正常关闭
即使用了ABORD或数据库发生了非正常的终止,此时当前打开的数据库实例会被关闭并且会立即关闭数据库。SGA中的缓冲数据不会被写入到数据文件和联机重做日志文件中。当接下来重新打开数据库时,Oracle会自动地先恢复该实例。
(2).卸载阶段
在数据库关闭以后执行本阶段,此阶段Oracle会从实例中卸载数据库。数据库卸载后,Oracle会关闭控制文件,但是实例仍然会保留在内存中。
 
2.数据库关闭三阶段
(3).实例关闭阶段
这是数据库关闭的最后一个阶段,当数据库实例关闭以后,内存中的SGA会被清除,后台进程也会被停止。
 
检查点
  检查点是在协调数据库关闭、实例恢复和常规操作一致性方面非常重要的一个循环处理机制。检查点有两层相关的含义:
l检查点是一个指示检查点位置的数据结构,当实例恢复时它是在重做日志流中的SCN(系统该变号)
l当将数据库缓冲区中的数据写入到磁盘时检查点是一种写事件
 
  1.检查点的目的包括:
l缩短因介质或实例故障恢复所需要的时间
l确保缓冲区的数据规则的写入到硬盘
l确保在一致性的关闭时将提交的数据写入到磁盘
2.Oracle实例何时初始化检查点 
  检查点进程(CKPT)用来将检查点写入到数据文件头部和控制文件中,一般包括以下几种情形:
l线程检查点
在某个特点的目标任务前,数据库在一个特定的线程中将所有被重做日志修改的缓冲区写入到磁盘中。一组数据库中所有实例检查点(检查点集合)称为数据库检查点,数据库检查点会在以下几种情况下发生:
u并发的数据库关闭
u联机重做日志切换
uALTER SYSTEM CHECKPOINT语句执行时
uALTER DATABASE BACKUP BEGIN语句执行时
2.Oracle实例何时初始化检查点(续) 
l表空间和数据文件检查点
表空间检查点是一组为表空间中每一个数据文件服务的检查点集合,将表空间设置为脱机、只读以及收缩数据文件或者执行ALTER DATABASE BACKUP BEGIN语句时会产生
l增量检查点
增量检查点是一类线程检查点,当联机重做日志发生交换时使用增量检查点来部分的消除对大数据块的写入。数据库写入进程(DBWn)至少每3秒钟会检查一次其是否要执行数据写入工作,当DBWn写入脏数据,它将提取检查点的位置,从而产生一个CKPT将检查点的位置写入到控制文件,但不会写入到数据文件的头部。
实例恢复
1.实例恢复的目的 
  当时实例失败时,实例恢复能确保数据库保持在一个一致性状态,因为无论Oracle数据库如何管理数据库的变化,都可能发生数据库文件不一致的情况。
重做日志线程(实例生成的重做日志)是实例产生的所有发生了变化的记录。单一实例的数据库具有唯一的一个重做日志线程。
事务提交时,日志写入进程(LGWR)将保留在内存的重做日志实体和事务的系统改变号(SCN)写入到联机重做日志中,然而当DBWn工作时,DBWn都会将修改了的数据块写入到数据文件中,因此未提交的修改会临时保存在数据文件中而已经提交的修改却不再保存在数据文件中。
1.实例恢复的目的(续) 
  当由于SHUTDWON ABORD或其它原因导致打开的数据库发生实例失败时,会发生如下情况:
l提交的数据块仅仅写入到的联机重做日志而没有写入到数据文件中,这些变化必须要应用到数据库中,即写入到数据文件中,否则数据不一致
l事务失败时,数据文件中可能包含未提交事务的数据,而这种改变应该被回滚以保持数据库的一致性
实例恢复就是用联机重做日志文件来同步当前的联机数据文件,以确保它们是一致的。
 
2.何时会执行实例恢复
  当数据库实例打开为读/写模式时,控制文件中的重做日志线程被标记为打开;如果数据库被关闭时是一致(日志文件和数据文件的一致)的,则日志线程被标记为关闭。实例恢复就是依据日志线程的状态的。如果日志线程的标记是打开的,但是却没有活动实例的线程队列来与日志线程通讯,则需要进行实例恢复。
以下两种情况下,Oracle会自动恢复实例:
l单一实例或集群实例数据库中实例失败后的第一次打开
l集群实例环境中,部分实例失败
l
 
 
3.实例恢复中检查点的重要性
  实例恢复使用检查点来确定那些修改要应用到数据文件中去。如果已提交修改的SCN小于检查点SCN,则检查点的位置将被写入到数据文件中。
在实例恢复期间,数据库必须将检查点位置和重做日志线程之间的修改应用到数据文件中。部分改变可能已经写入到数据文件中,然而仅仅那些系统该变号小于检查点位置的会被写入磁盘。
 
4.实例恢复阶段
1).缓存恢复(或称为前滚阶段)
首先是缓存恢复和前滚(向前滚动)阶段,此时会将联机重做日中记录的所有改变重新应用到数据文件中。由于需要回滚的数据也被记录在联机重做日中,因此向前滚动也会产生相应的回滚段。
前滚会将联机重做日中所有记录了要求回滚的数据一直向前回滚直到前面某个时刻的状态。完成前滚后,数据文件中就包含了所有联机重做日中已提交修改的数据,数据文件中也就不再包含联机重做日或数据文件中没有提交的数据了。
2).事务恢复(又称为回滚)阶段
   前滚完成后,任何未提交的修改都会被撤销。Oracle将SCN小于检查SCN的已提交修改写入磁盘。针对实例失败前写入到数据文件中的未提交修改,Oracle会申请撤销块用来执行回滚操作。
下图说明了前滚和回滚两个阶段。
  
参数文件
   启动实例可以使用服务器参数文件(推荐)也可以使用传统的文本初始化文件。这些文件中包含的都是一系列的配置参数。
1.初始化参数
不同的环境中,Oracle都提供了很多初始化参数,而大部分参数无需修改,只有很少部分参数需要进行设置。
 1).初始化参数的功能分组
l 文件和目录名字的参数
l 进程的限定数、数据库资源或者数据库自身的参数
l 设定容量大小的参数,如SGA的大小参数 
2).基本及高级参数
初始化参数分为基本参数和高级参数,大约30个左右。基本参数包括数据库的名字、控制文件的位置、数据库块大小、撤销表空间等。在极少数情况下,需要数据库专家来调整高级参数以获取更好的数据库性能以满足一些独特的需求。
 
2.服务器参数文件
即数据库管理的初始化文件,具有如下特性:
l必须在数据库服务器主机上,且数据库只有一个服务器参数文件
l只能被数据库服务器读取,而不能被客户端读取
l存储在数据库服务器主机上的服务器参数文件是持久的。对参数的修改,不但对当前实例有效,而且数据库关闭和重新启动后依然有效
 
使用服务器参数文件能够消除需要维护多个本地文本初始化参数文件的问题。
 
3.文本初始化参数文件
即传统的初始化文件,是包含了一些列初始化参数的文本文件,特点如下:
l数据库关闭或启动时,文本初始化参数文件必须驻留在连接到数据库的那台客户端的机器上
l是文本格式而非二进制格式的
lOracle只能读而不能写该文件,对参数的修改必须手工进行
l使用ALTER SYSTEM修改参数只能在当前实例中有效。如果想要对参数的修改在重新启动数据库后也有效,必须要手工修改该文件然后重启数据库
 
下图是使用多个文本初始化文件的例图:
  
 
4. 初始化参数的修改
参数又可分为静态参数和动态参数,其特征如下:
特征
静态
动态
需要修改参数文件(文本和服务器)?
YES
NO
修改生效前需要重新启动实例?
YES
NO
在《Oracle数据库参考》中初始化参数项描述为“可变”?
NO
NO
修改只针对数据库和实例
YES
NO
 
DB_BLOCK_SIZE、DB_NAME、COMPATIBLE是静态参数。动态参数又分为会话级的和系统级的两组,回话级的仅仅在当前会话中有效(如NLS_DATE_FORMAT),系统级的不仅在当前会话中而且在整个数据库中都是有效的(如MEMORY_TARGET)。
 
4. 初始化参数的修改
可以使用ALTER SYSTEM SET语句来设置系统级参数所设置的范围:
lSCOPE=MEMORY
参数的改变仅仅影响当前实例,数据库重新启动后失效
lSCOPE=SPFILE
参数的改变写入到服务器参数文件,并且在当前实例中生效,必须重启数据库方能生效
lSCOPE=BOTH
是MEMORY和SPFILE的结合体
 
诊断文件
   Oracle使用故障诊断部件来预防、监测、诊断和解析数据库的问题,这些问题一般包括代码的bug、元数据损坏或客户数据损坏。故障诊断部件的目的包括:
l 预先侦测问题
l 当侦测到问题时,减小损坏范围并中断数据库服务
l 缩短问题诊断和解决的时间
l 简化Oracle技术支持和客户之间的交互过程
 
1.自动诊断信息库
  ADR(Auto Diagnostic Repository)是一个基于文件的资料库,用来存储跟踪文件、警告文件和数据库健康监测报告等资料,其特征如下:
l具有统一的目录结构
l具有一致的诊断数据格式
l提供统一的工具集
  这些特征能够保证Oracle技术支持与客户进行高效的交互。ADR是在数据库之外的,因此当物理数据库失效后Oracle还能访问管理ADR。数据库创建前可以创建ADR。
 
1).工作机制
  ADR采用问题预先跟踪机制,而当危险错误发生时会产生内部错误。ADR跟踪每个问题时都有一个问题键(文本描述的)。当同一个问题发生多次时,ADR对每一次问题的发生都创建一个带时间戳的事件,事件具有事件ID(数字型)。事件发生时,ADR将事件警告发送给OEM。对问题的诊断和解决一般都是由事件警告入手的。
   由于一个危险错误多半表现在为在短时间内发生多次,即具有泛滥性。如果ADR找到了事件的起始,就会申请使用灾害控制机制来控制事件的继续发生。事件泛滥控制会生成警告日志。ADR通过这种方式能够通知到管理员危险错误正在发生。
 
2).ADR结构
 ADR base是ADR的根目录,ADR base可以包含多个ADR目录用来存放不同的诊断数据,如警告、核心数据、事件、跟踪信息和其它数据等。
  
 
 
预警日志
每个数据库都有预警日志,是xml格式的,包含的内容如下:
l内部错误(ORA-600)、块损坏错误(ORA-1578)和死锁(ORA-60)
l管理操作如DDL语句
lSQL*PLUS命令如STARTUP、SHUTDWON、ARCHIVE LOG、RECOVERY
l自动刷新物化视图时的错误
 
 
 
跟踪文件
跟踪文件是一个用来研究分析问题的管理员文件。
1.跟踪文件的类型
   每个服务器进程和后台进程都会周期性的写一个相关的跟踪文件,其内部是进程的环境、状态、活跃性或者错误。
   SQL跟踪也能灵活的创建跟踪文件,用来记录个性化的SQL语句执行信息。如果要跟踪客户标示、服务、模块、动作、会话、实例和数据库,则可以使用OEM或者DBMS_MONITER包。
   转储(dump)是一类特殊的跟踪文件。鉴于跟踪往往是连续的输出,转储就是在某个时间点上对某个事件的诊断信息进行输出。当事件发生时,数据库中写入一个或多个转储至事件目录(专门创建的)。
2.跟踪文件的位置
   ADR跟踪文件存储在跟踪目录下面,文件名是依赖平台的,扩展名是.trc。一般是后台进程跟踪文件名带有SID、后台进程名字和操作系统进程号,如mytest_reco_10355.trc。服务器进程跟踪文件名带有SID、“ora”字符串和操作系统进程号,如mytest_ora_10304.trc。
   有时跟踪文件中有相应的跟踪映射文件( .trm )。 这些文件包含有关跟踪文件的结构信息,用于搜索和导航。
 
 
 
基本内存结构
1.SGA
一组共享内存结构,包含实例的控制信息和数据。可以为所有的服务器进程和后台进程所共享。
2.PGA
进程所专用的包含实例控制信息和数据的非共享内存区域。当一个进程启动时它创建一段PGA,因此其也是为某个服务
器或后台进程服务的,一组PGA构成总的PGA或者称为实例PGA。数据库PGA初始化参数是为实例PGA而非单个PGA所设置的。
  
 
3.UGA
   UGA(用户全局区)是为用户会话相连的一段内存区域。
 
 
4.软件代码区
   用来存储正在运行或者准备运行的代码的一部分内存,Oracle的代码存在软件代码区,是与用户程序完全不同的。
 
Oracle内存管理模式
1.自动内存管理(AMM)
   设定实例内存的目标大小,实例依据PGA和SGA的实际需要自动分配和自动设定内存的大小。这是默认的内存管理方式
2.自动共享内存管理(ASMM)
   这种内存的管理方式是部分的自动内存管理机制,通过设定SGA的目标大小,而对PGA的管理可以选择给PGA设置一个总的大小也可以选择个性化的方式来管理PGA。
3.手工内存管理
   这种模式不用设置总的内存大小,而是逐一设置PGA和SGA实例的各个参数。
 
UGA

    UGA是分配给会话变量的内存,包括登录信息以及其它数据库会话必须的信息。本质上UGA存储的是会话的状态。例如会话装载一个PL/SQL包
到内存中,则UGA包含包的状态,这些状态是包变量在某个特定时刻的一系列的值。当包中子程序改变了变量的值,则包的状态也会发生改变。默认情况下,包中变量会在会话的生命期内保持一个唯一的状态。
   OLAP页池也存储在UGA,池管理OLAP的页(等价于数据块)。OLAP会话开始时分配页池、而会话结束时释放页池。
   会话在其生命期内UGA必须是有效,因而在共享服务器连接时UGA不能放在PGA区域,其原因是PGA是分配给单个进程的。因为在共享服务器连接时UGA存在SGA而在专用服务器连接时放在PGA。
 
PGA
l分配给OS进程或线程的、且不可为其它OS进程或线程所共享因其进程专用性,故不能是在SGA中分配的
lPGA是一个内存堆,其中包含有专用或共享服务器进程所需的会话变量;服务器进程从PGA中分配内存结构
1.私有SQL区域

l保存解析后的SQL语句以及其它会话特定要求的信息
l服务器进程执行SQL语句或PL/SQL代码时,使用私有SQL区域干三件事:绑定变量值、查询执行的状态信息、查询执行工作区.执行完成后客户端可以使用一个游标指向私有SQL区域,如下图:
 
SGA
1.数据库高速缓冲区
l又称为高速缓存缓冲区,用来存储从数据文件的数据块中读取的数据的副本
l是最主要的内存地址,缓存管理器用来临时缓存当前或最近读取的数据块
l所有的连接用户均可访问本区域
 
Oracle使用高速缓存缓冲区来达到如下两个目的:
l优化物理I/O
l将经常被访问的块保存在缓存中,而将很少访问的块写入到磁盘
 
1.数据库高速缓冲区
 (1).高速缓冲区的状态
未使用状态:从未被使用或当前未使用的内存,最容易被数据库使用
干净状态:早前用过且当前包含一个某个时间点上具有读一致性的数据块的内存;干净的含义是块中的数据是“干净”的以至于不需要检查点;数据库能保留当中的块并重新使用它
脏状态:包含被修改过且还未写入到磁盘的数据的内存;脏状态的内存在重新使用前必须要设置检查点
每个缓冲区的访问模式都可能有两种:“保留”的和“自由”的。缓存中的缓冲区被“保留”以便用户会话能访问它。同一时刻不能有多个会话修改同一个“保留”缓冲区。
(2).高速缓冲区的模式
    客户端请求数据时,Oracle从数据库缓冲区中获得缓存,模式包括:
l最近性模式:最近性模式又称为数据块模式,是指检索的数据是从高速缓冲区中检索的。如某个未提交的事务更新了两行数据,然后一个最近性模式化能从刚刚未提交的行中获取数据块。这种模式一般用来处理更新语句。
l一致性模式:从读一致性版本的数据块中检索数据,此模式也可以从撤消数据中读取数据。如某个未提交的事务更新了两行数据,当另外一个会话请求这两行数据时,数据块将使用撤消数据创建一个不包含未提交数据的读一致性数据版本块给该请求。通常,此模式是数据块检索采用的模式。
(3).高速缓冲区的I/O
    先在内存中执行逻辑I/O,如果请求的缓存不再缓冲区,则执行一个物理I/O,从而从磁盘或闪存缓冲中获取还数据,然后再执行逻辑I/O.
l缓冲区写入器:DBWn定期将使用很少的或脏数据写入磁盘,情形有:
l服务器进程找不到干净的缓冲区用来装载准备新读入的数据时
l因实例开始恢复而必须预先提取检查点(存储在重做日志线程中)时
l表空间被设置成只读或者脱机时
l缓冲区读出器:当干净的或未使用的缓冲区数量很小时,数据库就必须从缓存缓冲区中移除一部分缓存。其算法取决于闪存缓存是否启用,如下描述:
l缓冲区读出器(续):
l闪存缓存禁用时:数据库重新使用每一个干净的缓存并用新数据覆盖它。如果对缓冲区的覆盖需要延迟,则数据库必须先从磁盘读出它
l闪存缓存启用时:DBWn能将干净缓存的主体写入到闪存缓存,并且允许在内存中对它进行重用。在主内存中,数据库将该缓存的头保存到一个LRU列表中用来跟踪和定位闪存缓存中的缓冲区主体。如果对缓冲区的覆盖需要延迟,则数据库可以从闪存缓存中而不是从磁盘读出它
 
  当客户端进程请求缓存时,服务器进程在高速缓存缓冲区中搜索缓存,如果搜到缓存,则称为缓存命中,服务器进程的搜索顺序如下:
l在整个高速缓存缓冲区中搜索缓存,如果找到则对该缓存执行逻辑读
l在闪存缓存的LRU列表中搜索缓存头,如果存在,则对闪存缓存执行一个优化的物理读
l如果上述均未搜索到,则称为缓存未命中,将接着执行如下步骤:
 
当客户端进程请求缓存时(续):
l执行物理读从数据文件中将块读入内存
l执行逻辑读,再读入缓存
  
 (4). 缓存池
缓存池是缓存的集合,数据库高速缓存缓冲区被划分为一个或多个缓冲池。包括以下几种可能:
l默认池(Default):该池是块通常缓冲的位置。 除非手动配置独立的缓存池,否则默认池是唯一的缓冲池。
l保存池(Keep):用于频繁访问的块,但是如果在默认池中空间缺乏时这些块会被收回。保留池的目的是将对象保存在内存中,从而降低I/O
l回收池(Recycle):循环使用的缓存池,用于访问率很低的块,用来防止这些块占用宝贵的内存资源
 
2.重做日志缓冲区
    是一个循环的缓冲区,用来存放重做日志条目,重做日志条目中存储了用来重建、撤消或者DML/DDL语句对数据库所做的修改信息。数据库恢复就是使用重做日志条目来恢复数据文件的。
    数据库从用户内存中拷贝重做日志条目到重做日志缓冲区中。重做日志条目在缓存中占据连续的顺序空间。LGWR(Log Writer)将重做日志缓冲区写入到磁盘上的联机重做日志文件(顺序写入)。
  
 
3.共享池
  SGA保留的区,用来存储解析了的SQL、PL/SQL代码、系统参数和数据字典。数据库中的任何操作几乎都与共享池有关。
 
 (1).库缓冲区
    用来存储可执行的SQL或者PL/SQL代码。本区域包含SQL和PL/SQL区域、控制结构(如锁)、库缓存的句柄。在共享服务器结构下,还包括私有的SQL区域。
    当SQL语句执行时,数据库试图重用以前执行过的代码,如果解析后的代码在库缓存中存在且能够被共享,则重用它,称为软解析或库缓存命中。否则,数据库重新构造一个可执行版本的应用代码,称为硬解析或者库缓存未命中。
1).共享SQL区域
数据库使用共享SQL区域处理SQL语句的第一次执行,本区域对所有用户均有效且包含语句解析树和执行计划。每个唯一的语句只有唯一的一个共享SQL区域。
2).私有SQL区域
每个会话发布一个SQL语句时均有一个私有SQL区域。如果多个用户发布的是相同的SQL语句,则它们的私有SQL区域均指向同一个共享SQL区域。
(2).数据字典缓冲区
  用于存放数据库系统自身信息的缓冲区,如表、视图、结构、用户等。SQL语句解析期间,数据字典会被频繁的访问。
  由于数据字典被访问的频率非常高,因此其中又设计了两种内存位置:
1).数据字典内存区:放的是数据库对象的信息,而且行缓存也能使用本区域
2).库内存区:将数据字典信息放在本缓冲区供所有服务器进程共享
 
4.大对象池
   大对象池是一个可选的缓冲区,管理员可根据需要对其进行配置。大对象池还可以用来提供一个大的区域供数据库备份和恢复使用
5.Java池
   Java池用来存储特定会话的Java代码和数据,是为JVM准备的,其中包括Java对象。
6.流池
   流池存储缓存队列消息并且为Oracle流捕获进程或申请进程。流池是Oracle流专用的。如果没有特别指定,流池开始时大小是0,其大小的增长是根据Oracle流的需要动态增加的。
7.固定的SGA
    固定的SGA是一种内部事务管理的区域,例如:
l后台进程需要经常访问的数据库和实例的常规信息
l进程之间的通讯信息,如锁的信息
 
固定的SGA是有Oracle数据库自身设定的并且不能手工修改。
 
 
 
客户端进程
l不同于Oracle后台进程和服务器进程,客户端进程不能直接对SGA进行读写,而是通过服务器进程来实现
l发起客户端集成的主机往往不是服务器主机
 
l连接:连接是客户端进程和实例间的一种物理通讯链路
l会话:会话是数据库实例内存中描述登录到数据库当前用户状态的逻辑实体
l一个用户可以拥有多个会话,某个会话中的提交不会影响其它会话的事务
  
 
 
服务器进程
   服务器进程用来处理客户端进程与实例的连接。一个客户端进程总是与一个单独的服务器进程进行通讯。其负责的主要任务如下:
l解析和运行应用程序发布的SQL语句,也包括创建和执行查询计划
l执行PL/SQL代码
l从数据文件中将数据库读入到数据库高速缓冲区中(相反的写过程是由DBWn完成的)
l将结果返回给客户端应用
 
1.专用服务器进程
在专用服务器配置下,一个客户端能且仅能连接一个服务器进程,服务器进程也只能在客户端连接持续期间为其专一的客户端进程服务,类似一夫一妻制。
  
 
2.共享服务器进程
在共享服务器配置下,客户端应用是通过网络连接到服务器进程适配器而不是服务器进程的。适配器从连接客户端处收到请求后将其放在大对象池中的请求队列。第一个可用的共享服务器进程从请求队列处获得请求并进行处理,然后将处理完的结果放到适配器的响应队列中,接着适配器进程监视该队列并将结果转发给客户端。类似于大医院的分诊台
  
后台进程
 
1.PMON
进程监视进程,又称进程监视器,它监视其它后台进程并对服务器进程或进程适配器的意外中断进行恢复。PMON用来清除失效的用户进程、释放进程用户资源。如PMON重置活动事务表的状态、不再需要的锁、从活动进程列表中清除其进程ID。
2.SMON
系统监视进程,又称系统监视器,它负责多个系统级的清除任务,包括:
l实例启动时如果需要执行实例恢复,则执行之
l实例恢复期间由于数据文件是只读的或者表空间处于脱机状态引起的事务中断,待表空间联机后,SMON负责恢复这些跳过的中断事务
l清除不再使用的临时段
l对于数据字典管理的表空间,接合自由区
SMON定期检查哪儿需要它,其它进程在需要它时可以调用它
3.DBWn
数据库写入进程,又称数据库写入器,它负责将数据库高速缓冲区中被修改的缓存写入到磁盘。一般一个数据库写入进程(DBW0)即能满足大部分的数据库需求;但在多处理器服务器上,还可以配置DBW1..DBW9和DBWa..DBWj来提升数据库性能。下述情况下,DBWn将脏缓存写入磁盘:
l服务器进程扫描整个缓存后,怎么也找不到干净可用的缓存时。DBWn如果在处理其它操作时,其执行写入是异步的
lDBWn周期性的将缓存写入一个预置的检查点
4.CKPT
检查点进程使用检查点信息更新控制文件和数据文件的头,并且通知DBWn将块写入数据文件。检查点信息包括检查点的位置、SCN、联机重做日志文件中要开始恢复的位置等。 
5.MMON
可管理监视进程,执行很多与AWR(自动工作负载信息)相关的工作。例如当一个度量超出其阀值时的写、执行快照等。
  
6.LGWR
日志写入进程,又称日志写入器,负责管理重做日志缓存。一般是将用户所做的修改写入日志文件,等到了一定时候再写入数据文件。LGWR将缓存中部分连续的区域写入到联机重做日志文件中。Oracle通过分散修改数据库缓存任务来实现脏缓存写入磁盘的分散性,以及通过将快速有序的日志文件写入磁盘来提高其性能。下述情况下,LGWR会将自上次写以来所有拷贝到缓存中的日志条目写入日志文件:
l用户提交了一个事务时
l联机重做日志切换时
l自上次写以来时间达到了3秒时
l重做日志缓冲区达到了1/3或者包含了1M缓存数据时
lDBWn必须将修改的数据写入磁盘时
6.RECO
恢复进程是在分布式数据库用于自动解决失败的分布式事务的。
7.ARCn
当日志切换时,ARCn(归档日志进程)将联机重做日志拷贝到脱机的存储器中。
ARCn仅仅在归档日志模式化且自动归档选项打开时有效。属于可选进程。
8.作业队列进程
是一种后台工具进程,包括CJQ0和Jnnn,前者是作业调度进程,后者是任务队列从属进程。作业队列进程是Oracle用来运行后台任务的,一般的处理方式是批处理。Oracle对其的管理是动态的。也属于可选进程。
9.FBDA
闪回数据归档进程将跟踪表中的历史行数据归档到闪回数据归档资料中。当事务中包含跟踪提交的DML时,FBDA将预先的行数据(未提交前)存储在闪回归档资料中。FBDA也可以保存当前行的元数据。也属于可选进程
10.SMCO
空间管理协调进程管理多个空间管理相关的任务,如预先的空间分配和空间回收,也属于可选进程
 
习题
1.Oracle启动和关闭分别分几部,每一步都执行什么?关闭有哪几种模式,其差异点是什么?
2.什么是检查点?Oracle使用检查点的目的是什么?线程检查点和增量检查点有什么相同点和不同点?
3.请登录OEM,浏览参数文件中的参数,并查看联机的帮助说明。
4.手工绘制实例的SGA,并逐一解释每个区域的目的和作用
5.请解释DBWn和CKPYT的关系,并解释LGWR的工作机制。
java私塾原创内容