北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2 ORACLE数据库实例管理
? Oracle服务器就是数据库管理系统 (DBMS),由
数据库 (Oracle database)和 实例 (Oracle
instance)组成。
? 实例是一系列复杂的内存结构和操作系统进程,
它为 Oracle客户提供所期望的不同程度的服务。
一个实例只能打开一个数据库,或者说一个数
据库被唯一的一个实例装载。
4.2.1 实例组成
4.2.2 实例创建
4.2.3 监控实例
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1 ORACLE数据库实例组成
? 实例中 每一个进程都有各自的一个内存块,该内存块
用于保存私有变量、地址堆栈和其他运行时的信息。
? 进程间使用公共共享区 并在公共共享区内完成它们的
工作。公共共享区是能够在同一时间内被不同程序和
不同进程读写的一块内存区。该内存块称为 系统全局
区 (SGA)。因为 SGA驻留在一个共享内存段中,所以它
经常被称作共享全局区。
? 后台进程就像数据库的手,是直接处理数据库的组件;
SGA就像大脑,在必要时间接地调度手处理它们的信息
与存储检索。 SGA参与发生在数据库中全部的信息和服
务器的处理。
? 单用户的 Oracle配置 (Personal Oracle Lite),不使
用多进程执行数据库的功能。相反,所有的数据库功
能由一个 Oracle进程完成。由于这个原因,单用户也
称为单进程 Oracle。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1 ORACLE数据库实例组成
? ORACLE实例是指有自己的内存结构和相关的服务
器进程及后台进程的 DBMS。
4.2.1.1 内存结构
4.2.1.2 进程
实例
SGAShared pool
Database
Buffer cache
Redo log
Buffer cache
Library
cache
Data Dictionary
cache
PMON SMON DBWR LGWR CKPT Others
内存
结构
后台
进程
用户
进程
服务器
进程
PGA
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
? ORACLE的内存结构主要有两个内存区域组成:
SGA(System Global Area):系统全局区,是
ORACLE实例的基础,是一个共享区域,存放最
近使用的 SQL语句、最近使用的数据、最近使用
的数据字典等信息,供各个进程调用。
PGA(Program Global Area):程序全局区,该
区域是一非共享区域,存放会话、排序、游标、
主变量等信息,被服务器进程调用,保证谁的
请求处理结果给谁,谁的排序给谁,用户声明
的、打开的、使用的、关闭的游标是私有的,
用户的主变量不被其他用户干扰。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
? 系统全局区:系统全局区是实例的主要部
分。它含有数据维护,SQL语句分析与重做
缓存所必须的所有内存结构。
? 系统全局区的数据是共享的,也就是说,
多个进程可以在同一时间对 SGA中的数据进
行访问和修改。所有数据库操作都使用包
含在 SGA中某点上的结构。
? 当实例被创建时,分配 SGA;当实例关闭时,
释放 SGA。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
? SGA组成如下:
– 共享池。
– 数据库缓冲区高速缓存。
– 重做日志缓冲区。
另外 oracle9i还有 Java pool,8i有 Java虚
拟机,解释 Java; Java pool是利用数据库技
术解释 Java.
oracle9i的 SGA可以通过 SGA_MAX_SIZE被动
态的设置大小,8i不能动态设置。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
– 共享池:共享池包括库高速缓存、数据字典
高速缓存和服务器控制结构(例如数据库字
符集)。
参见下图
库高速缓冲 字典高速缓冲 控制结构
共享
SQL区
专用 SQL区
永久区 运行区
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
– 共享池:
库高速缓存存储已提交给 RDBMS的 SQL语句
文本、分析过的格式与执行计划,以及已被
执行的 PL/SQL包头与过程等。数据字典高速
缓存存储用于分析 SQL语句的数据字典行。
Oracle服务器用库高速缓存来提高执行
SQL语句的性能。当一条 SQL语句提交时,服
务器首先查找高速缓存,查看相同的语句是
否已被提交或缓存过。如果有,Oracle使用
存储的语法分析树和执行路径来执行该语句,
使用存储代码可以获得明显的性能提高 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
– 共享池:
对于使用以前缓存的 SQL语句,它必须在所
有方面都与缓存版本完全相同,包括标点符号
和字母的大小写。
库高速缓存包括共享和专用 SQL区。共享
SQL区包括 SQL语句语法分析树和执行路径;专
用 SQL区存储特定的会话信息,一个用户会话
能够一次打开的专用 SQL区的数量由 init.ora
参数 OPEN_CURSORS决定。
库高速缓存中的专用 SQL区可更进一步分为
永久区和运行区。永久区中包含合法的信息,
并可应用于 SQL语句的多个执行中,而运行区
中仅包含正在被执行的 SQL语句的数据。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
– 共享池:
字典高速缓存含有 RDBMS引擎分析 SQL语句所使用
的数据字典信息。在这个区域中含有段信息、安全
性、访问权限和在可用的自由存储空间等信息。
共享池的大小取决于 init.ora文件参数
SHARED_POOL_SIZE,它是以字节为单位的。 ORACLE
9i可以通过 ALTER SYSTEM SET SHARED_POOL_SIZE动
态设置。
共享区经过长期装卸和卸载数据对象会产生许多
碎片,如果在共享池中没有足够的连续空间用来装
载目标数据,会产生错误。这个问题可以通过运行
SQL命令 ALTER SYSTEM FLUSH SHARED_POOL解决。但
是如果在数据库操作时,经常遇到共享池错误,就
必须增大共享池。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
– 数据库缓冲区高速缓存:是影响整个数据库
系统运行的重要因素之一。 数据库缓冲区高
速缓存是由与 Oracle块相同大小的内存块组
成。所有 Oracle操作的数据在使用前被装入
到数据库缓冲区高速缓存中。数据的更新在
内存块中完成 。
Oracle根据最近最少被使用 (LRU)列表将数
据清出缓冲区高速缓存。 LRU列表记录数据块
被访问的频繁程度。当服务器在缓冲区中需
要更多空间来从磁盘读入一个数据块时,它
去访问 LRU列表,以确定可以清出哪些块,使
用这种方法,保证最频繁使用的块保存在内
存中 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
– 数据库缓冲区高速缓存:
被修改过的缓冲块称为脏的,脏列表记录
所有在内存中被修改而又尚未写入磁盘中的
数据。当 Oracle接收到修改数据的请求时,
对高速缓存中的块进行数据修改,同时写入
重做日志中,然后该块被放入脏的列表中,
对这些数据的随后访问从高速缓存中读取改
变的数据的新的值。
Oracle服务器对更新的一块数据,并不立
即更新数据文件中的数据。 RDBMS等到一定条
件时才将改变的数据刷新写入数据文件(参
见数据库写入进程)。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
– 数据库缓冲区高速缓存,
DB_BLOCK_SIZE和 DB_BLOCK_BUFFERS是决
定缓冲区高速缓存大小的两个初始化参数。
DB_BLOCK_SIZE设置 Oracle块大小,
DB_BLOCK_BUFFERS决定分配给缓冲区高速缓
存的块的数量。两参数相乘就可得出缓冲区
高速缓存的内存总数 (以字节为单位 )。
ORACLE 9i可以通过 ALTER SYSTEM SET
DB_CACHE_SIZE动态设置。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
– 重做日志缓冲区:重做日志缓冲区用于在内
存中存储未被刷新写入联机重做日志文件的
重做信息。
它是循环使用的缓冲区,当重做日志缓冲
区填满时,将它的内容写入联机重做日志文
件。
重做日志缓冲区的大小是由 LOG_BUFFER初
始化参数决定,以字节为单位,决定在内存
中保留多少空间缓存重做日志项。如果这个
值设置得过低,进程之间相互竞争,LGWR进
程读出和写入缓存,有可能会导致性能问题。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
– 重做日志缓冲区:
为强迫重做日志顺序写入,Oracle服务器
使用闩控制对缓存的访问。闩是一个 Oracle
进程对一个内存结构的锁定,一个进程必须
持有重做分配闩,才能写入重做日志缓冲区。
当一个进程持有分配闩时,其他任何进程都
不能使用这个分配闩写入重做日志缓冲区。
Oracle服务器使用
LOG_SMALL_ENTRY_MAX_SIZE初始化参数限制
一次写入的重做的总量 。这个参数以字节为
单位,其缺省值随操作系统和硬件不同而不
同。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.1 ORACLE內存结构
– 重做日志缓冲区:
对具有多个 CPU的服务器而言,Oracle服
务器不允许使用重做分配闩所书写的重做日
志项所需空间比参数
LOG_SMALL_ENTRY_MAX_SIZE大。相反,进程
必须持有一个重做复制闩。可获得的重做复
制闩的数量等于 LOG_SIMULTANEOUS_COPIES
初始化参数的值。
LOG_SIMULTANEOUS_COPIES的缺省值是系统
中 CPU的数量。使用重做复制闩,多个进程
能同时写入重做日志缓冲区。
可以使用 V$LATCH动态性能视图监控重做
分配闩与重做复制闩。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
? ORACLE进程可以理解为一系列执行一定任务、
提供不同服务信息的程序。主要有用户进程、
服务器进程、后台进程三种类型。
? 用户进程:当客户机向 ORACLE服务器发出一个
连接请求时,就产生一个用户进程。
数据库用户操纵数据前,首先要建立一个与
数据库服务器的连接 (可通过 Oracle工具,如
SQL*Plus),连接的同时产生用户进程,用户
进程并不直接作用于 ORACLE服务器,而是与一
个服务器进程进行通信。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
? 用户进程,每个用户进程被分配一部分内存区,
称为进程全局区 (PGA)。
当一个用户进程通过专用服务器方式连接数
据库时,用户的会话数据、堆栈空间和游标状
态信息存储在进程全局区中。用户的会话数据
包括安全和资源使用信息;堆栈空间含有为用
户会话指定的本地变量;游标状态区包括运行
时的游标信息、返回的行和游标返回的代码。
如果用户进程通过共享服务器进程方式进行
连接,游标和会话信息被存储在系统全局区
(SGA)中。尽管对整个数据库而言,这并不增加
对内存空间的要求,但是它需要一个更大的系
统全局区来存放这些附加的会话信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
Oracle Server
4.2.1.2 ORACLE进程
? 服务器进程:服务器进程接受用户发出的请求,
并根据请求与数据库通信,通过这些通信完成
用户进程对数据库中数据的处理要求,同时完
成对数据库的连接操作和 I/O访问。
SGAShared pool
Database
Buffer
Redo log
Buffer用户进程
服务器
进程
数据库用户
建立连接
建立会话
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
? Oracle后台进程:在任意瞬间,Oracle数
据库可以处理许多行信息、处理几百个同
步用户请求、进行复杂的数据操作,与此
同时提供最高水平的性能和数据的完整性。
为了完成这些任务,Oracle数据库将
一项大的工作分散到多个程序中,其中每
个程序的大部分操作都是相互独立的,并
扮演一个特定的角色。这些程序称为
Oracle后台进程。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
? Oracle数据库的物理文件和内存结构之间的关
系由后台进程来维持 。
? 理解后台进程和它们担负的任务,将有助于分
析性能问题、指出瓶颈和诊断数据库中的故障
点。
? 数据库拥有多个后台进程,其数量取决于数据
库的配置。每个后台进程创建一个跟踪文件,
在实例操作期间保存跟踪文件。可以设置
init.ora文件的 BACKGROUND_DUMP_DEST参数来
规定后台进程跟踪文件的位置。排除数据库故
障时,跟踪文件就显得非常重要。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
? Oracle后台进程有:
– 系统监控( SMON)
– 进程监控进程( PMON)
– 数据库写进程( DBWR)
– 日志写进程( LGWR)
– 调度进程( Dnnn)
– 归档进程( ARCH)
– 检查点( CKPT)
– 恢复进程( RECO)
– 快照进程( SNPn)
– 锁进程( LCKn)
– 并行查询进程( Pnnn)
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 系统监控 (System Monitor,SMON)
进程监控 (Process Monitor,PMON):
由于种种原因,对 Oracle数据库的连接可
能会发生崩溃、挂起或其他非正常终止。例
如,网络断线、用户提出不合理的要求遭到
系统拒绝,操作系统出错等等,都会引起连
接中断或系统挂起,Oracle服务器必须有能
力去处理由于各种原因而引起的失败。
系统监控和进程监控都是自动解决数据库
系统问题的后台进程 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 进程监控 (PMON)自动
清除中断或失败的进
程,包括清除非正常
中断的进程留下的孤
儿会话、回滚未提交
事务、释放被断开连
接的进程占有的锁、
释放被失败进程占有
的系统全局区 (SGA)资
源,它同时监控服务
器和调度进程,如果
它们失败则自动重启
它们。
Instance
SGA
PMON
PGA area
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 系统监控 (SMON)作为恢复
自动实例的进程,回滚尚
未提交的事务或前卷重做
日志。 SMON也是管理某些
数据库段的进程,收回不
再使用的临时段空间,并
自动合并在数据文件中相
邻的自由空间块。
SMON仅当创建表空间或
表时的缺省存储参数
pctincrease不是 0时,合
并表空间中的自由空间。
如果想让 SMON自动地处理
这个操作,至少将
pctincrease设置为 1。
Instance
SGA
SMON
Database
Data
files
Control
files
Redo log
files
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
Database
4.2.1.2 ORACLE进程
– 数据库写进程
(Database
Writer,DBWR):
负责将缓冲区
中脏的数据块
写入到数据文
件中。
Instance
SGA
database
Buffer
cache
DBWR
Data
files
Control
files
Redo log
files
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 数据库写进程 (Database Writer,DBWR)
DBWR等到下列情况发生时,才成批地读脏
列表,并将在脏列表中发现的所有块刷新写入
数据文件 。
1)发生一个检查点。
2)脏列表的长度达到 init.ora文件中
DB_BLOCK_WRITE_BATCH参数值的一半。
3)使用的缓冲区数量达到 init.ora参数
DB_BLOCK_MAX_SCAN。
4) DBWR后台进程发生超时(大约每 3秒)。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 数据库写进程 (Database Writer,DBWR)
在大多数安装中,有一个 DBWR进程处理所有
数据库的所有写入活动。但是当发现这个 DBWR
进程不能满足数据库要求时,可以启动一个以
上的 DBWR进程。
init.ora文件中 DB_WRITES参数可以设置在
启动时创建的 DBWR进程数 (缺省值是 1)。建议
使用与存储数据文件的物理磁盘一样多的 DBWR
进程或者将这个数量设为与数据库中数据文件
的数量相等。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 数据库写进程 (Database Writer,DBWR)
另一个参数是 DB_BLOCK_CHECKPOINT_BATCH,
设置在每个检查点 DBWR写入的块的最大量(参看
检查点进程)。增大该参数,可以减少 DBWR刷新
缓冲区的次数。但将这个数值增得过大,当 DBWR
最终刷新缓冲区时,可能产生不能接受的延迟。
第三个参数是 DB_BLOCK_CHECKSUM,这是个布
尔参数,启用这个参数时,导致每个数据库块被
写入时附加一个校验和值。当随后读取该块时,
计算校验和值并与存储在数据库中的数值进行比
较,如果值不同,将产生错误。当查找数据毁坏
问题时,这是一个有价值的参数,但是在全部时
间都启用这个值也会有代价。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 日志写( Log
Writer,LGWR), LGWR
是将在系统全局区中重
做日志缓冲区的重做日
志条目写入到联机重做
日志文件的进程。
LGWR执行写入操作
的条件是:发生提交、
重做日志缓冲区满度
达到三分之一、超时
(3秒 ),DBWR进程开始
之前 。
Database
Instance
SGA
Redo log
buffer
LGWRDBWR
Data
files
Control
files
Redo log
files
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 日志写( Log Writer,LGWR),
直到 Oracle在 LGWR完成将重做信息从重做
缓冲区刷新到联机重做日志文件之后,Oracle
才认为一个事务已完成。在 LGWR成功地将重做
日志项写入联机重做文件时(并不是改变数据
文件中的数据时),将一个成功码返回给服务
器进程。
用于配置 LGWR进程的选项很少,大多数的
配置涉及重做日志缓冲区和支持该缓冲区的内
存结构,而不是 LGWR进程自身。
可以建立多个 LGWR的 I/O口,以改善向日志
文件的写入性能,init.ora中 LGWR_IO_SLAVES
参数决定。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 日志写( Log Writer,LGWR):
检查点导致 LGWR和 DBWR。检查点间隔时间越
短,发生数据库故障时需要的恢复时间越短,
同时减少了必须执行每一检查点所需的工作。
当决定正确的检查点间隔时,必须权衡所有这
些因素。
LOG_CHECKPOINT_INTERVAL参数即一定数量
的操作系统块 (不是 Oracle块 )写入重做时,引
起数据库中的一个检查点被触发。
LOG_CHECKPOINT_TIMEOUT参数指定的时间间隔
(以秒为单位 )发生一个检查点。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 日志写( Log Writer,LGWR):
另外当一个重做日志组写满时,一个检查点被触发。
要注意不要设置不必要的检查点,或者迫使不需要的
检查点发生。例如,如果一个重做日志组大小为 3MB,
而 LOG_CHECKPOINT_INTERVAL设置为 2.5MB。当有
2.5MB的数据写入重做日志时,导致发生一个检查点。
另外,当重做日志组写满时(仅在又写入 0.5MB的数
据后),发生另一个检查点。事实上,这两个检查点
将相继发生。 频繁的检查点将浪费大量的进程活动和
I/O次数以执行相关的检查点 。
最后一个参数是布尔值 LOG_CHECKPOINTS_TO_ALERT。
每当检查点发生时,它为数据库在 alert.log文件中
设置一个标记,并用于试图指出确切的检查点间隔。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 调度进程:正如前面所提到的,服务器进程
既可以是一个用户进程专有的,也可以在多个
用户进程之间共享。使用共享服务器要求配置
多线程服务器。当使用共享服务器进程时,至
少必须存在一个调度进程( Dnnn),在环境需
要时也可能有多个调度进程。 调度进程将用户
请求传送到系统全局区的请求队列,并将服务
器的响应信息返回给正确的用户进程。
参数 MTS_DISPATCHERS指定调度进程使用的
协议及开始使用该协议的调度进程的数量。
参数 MTS_MAX_DISPATCHERS控制 RDBMS允许
的调度进程的最大数量。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 归档进程 (Archiver,ARCH):ARCH负责将全部
联机重做日志复制到归档重做日志文件。这
仅在数据库运行在归档模式( ARCHIVELOG)
下才发生。
Data
files
Control
files
Redo log
files ArchivedRedo log
files
ARCH
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 归档进程 (Archiver,ARCH):
当 ARCH正在复制归档重做日志时,没有其他
进程能够写入这个重做日志。重做日志是按顺
序循环使用的,如果数据库需要转换重做日志,
但是 ARCH还正在按其顺序复制下一个日志,所
有数据库的活动将终止,直到 ARCH完成。如果
归档由于某些原因不能完成复制日志,它将等
待直到引起不能写入的错误得到解决为止。
在 init.ora文件中 ARCHIVE_LOG_START参数
必须设置为 TRUE,当数据库启动时,才会自动
开始归档。如果设置了归档模式,但不自动启
动 ARCH,当所有联机重做日志写满时,数据库
将会挂起,等待你手工归档联机日志。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 检查点进程 (CKPT):CKPT
是可选的后台进程,执行
LGWR进程通常会执行的检
查点任务 —— 即用当前版
本信息更新数据文件和控
制文件头。
CHECKPOINT_PROCESS参
数设置为 TRUE可以启用
CKPT进程。注意在 Oracle
8.x中,该已被集成入
RDBMS中并设置为 TRUE。
如果在 Oracle 8.x的 init
文件中包括这个参数,实
例启动将会失败。 Database
Instance
SGA
Redo log
buffer
LGWR CKPTDBWR
Data
files
Control
files
Redo log
files
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 恢复进程 (RECO):负责在分布式数据库中恢
复失败的事务。分布式事务配置数据库时 (设
置 DISTRIBUTED_TRANSACTIONS值大于 0),
RECO会自动启动。
– 快照进程 (SNPn):处理数据库快照的自动刷
新,并运行预定的数据库过程。参数
JOB_QUEUE_PROCESS设置启动的快照进程数,
参数 JOB_QUEUE_INTERVAL决定快照进程在被
唤醒以处理挂起的作业或事务之前休眠的时
间 (以秒为单位 )。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1.2 ORACLE进程
– 锁进程 (LCKn):在并行服务器环境中,多个实
例安装在同一个数据库上,锁进程 (LCKn)负
责管理和协调每个实例占有的锁。
– 并行查询进程 (Pnnn):根据数据库的活动和
并行查询选项的配置,Oracle服务器启动和
停止查询进程。这些进程涉及并行索引的创
建、表的创建及查询。启动的进程的数量与
参数 PARALLEL_MIN_SERVERS指定的数量相同,
但决不能超过参数 PARALLEL_MAX_SERVERS指
定的进程数。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1 ORACLE数据库实例组成
? 为更好地理解前面讨论的实例组件是如何相互
交互的,看一个典型的事务在实例结构中的移
动。
? 当一个用户会话使用 SQL*Net驱动程序连接到
服务器会话时,开始一个事务。这个连接可以
使用它自己的一个服务进程进行专用连接,或
通过调度进程处理的一个共享连接。服务器会
话对传递给它的 SQL语句与已经保存在共享 SQL
区中的语句进行比较,如果在共享池中发现有
完全一样的语句,使用该语句早已存储的做过
语法分析的形式与执行计划。如果在共享池中
没有发现匹配语句,服务器进程对这些语句进
行语法分析。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1 ORACLE数据库实例组成
? 接下来,服务器会话查看在数据库缓冲区中是
否已经存储了完成该事务所必须的数据块。如
果在缓冲区中没有,服务器会话就从数据文件
中读取必要的数据,将它们拷贝到缓冲区中。
如果事务是一个查询,服务器会话将查询的结
果返回给用户进程(执行必要次数的数据块读
和拷贝以返回所有数据)。
? 对一个修改数据的事务,有更多的步骤需要做。
例如,假设事务是一个更新。在将必要的数据
块读入缓冲区高速缓存中之后,修改内存中的
数据块。修改的缓存块标记为脏的,并把它们
放入脏列表中。还产生重做信息,并将重做信
息存储在重做日志缓存中。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1 ORACLE数据库实例组成
? 如果事务是相对短期的,事务完成,用户提交,
发出信号给 LGWR进程让它将重做日志缓冲区刷
新到联机重做日志文件。如果事务相对持续时
间很长和很复杂,下列事情有可能发生:
1)产生的重做引起重做日志缓冲区写满三分
之一的空间,这会触发 LGWR进程刷新重做日志
缓冲区。
2)放入脏列表中的块数达到限定的长度,这
会触发 DBWR进程将数据库缓冲区所有脏列表项
刷新写入到数据文件中,它反过来也使 LGWR进
程向磁盘刷新重做日志缓冲区。
3)遇到一个数据库检查点,这将触发数据库
缓冲区高速缓存和重做日志高速缓存刷新。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.1 ORACLE数据库实例组成
4)可获得的缓冲区高速缓存中的自由缓存
空间下降到规定的门限以下,这也会引起数据
库高速缓存缓冲区的刷新。
5)产生一个不可恢复的数据库错误,这迫
使该事务中断、回滚并向服务器会话报告错误。
? 当事务正在处理向重做缓存生成的重做并刷新
时,联机重做日志逐渐被填满。当前日志被填
满后,LGWR进程开始写入下一个日志组;与此
同时,归档进程将重做日志复制到磁盘或磁带。
因为直到所有重做日志信息从重做缓冲区写入
到联机重做日志之后,事务才被记录为执行成
功的,所以 LGWR和 ARCH必须各自有能力在无错
误的情况下完成自己的任务。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.2 ORACLE数据库实例创建
? 通过前面介绍,我们知道 ORACLE数据库服务器
的启动事实上是创建实例的过程 。打开一个
Oracle数据库的过程具体包括以下三步:
1)创建一个 Oracle实例(非安装阶段)
2)由实例安装数据库(安装阶段)
3)打开数据库(打开阶段)
Oracle实例在数据库启动的非安装阶段创建。
当数据库经过非安装阶段时,读取 init.ora参
数文件,启动后台进程,初始化系统全局区
( SGA)。 init.ora文件定义了实例的配置,包
括内存结构的大小和启动后台进程的数量和类
型等。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.2 ORACLE数据库实例创建
? 下一阶段称为安装阶段。 init.ora文件中的控
制文件参数值决定数据库的安装实例。在安装
阶段,读取控制文件并使其成为可访问的,可
以对控制文件内存储的数据进行查询和修改。
最后的阶段就是打开数据库。在这一阶段,
存储在控制文件中的数据库文件以排它使用方
式被实例锁定,使数据库能够被普通用户访问。
打开是数据库的正常操作状态,在数据库打开
之前,只有 DBA能访问数据库,且只能通过服务
器管理器对其进行访问。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.2 ORACLE数据库实例创建
Oracle
启动进

0 开始
状态
SHUTDOWN
1 启动
实例
读参数文件;分配 SGA;
启动后台进程;打开跟
踪文件和警告。
NOMOUNT
(Start up
nomount;)
2 装载
数据

打开控制文件 (控制文件
的位置在参数文件中约
定 )。
MOUNT
(Alter database
mount;)
3 打开
数据

打开数据文件;打开日
志文件; (数据库包含的
文件名及位置信息在控
制文件中约定 )。
OPEN
(Alter database
open;)
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.2 ORACLE数据库实例创建
? 为了改变数据库的操作状态,必须拥有 SYSDBA
特权。当数据库从关闭状态到打开状态时,可
以单步调试数据库的每一个操作状态,例如,
可以在服务器管理器工具中执行 STARTUP
NOMOUNT命令,使数据库处在非安装阶段,接
下来可以运行 ALTER DATABASE MOUNT或者
ALTER DATABASE OPEN命令以单步调试到操作
阶段。
无论是在何种操作状态下,如果执行 SHUT
DOWN命令,将完全关闭数据库。当关闭数据库
时,只能从当前运行状态转到完全关闭状态,
数据库不能从打开状态转到安装状态。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.2 ORACLE数据库实例创建
? 没有安装数据库的实例称为空闲的 —— 它使用
内存,但不做任何工作。一个实例只能唯一地
与一个数据库连接,而且对一个数据库也只分
配一个实例 (使用并行服务器除外 )。
? 启动数据库命令:
STARTUP [FORCE][RESTRICT][PFILE=filename]
[OPEN [RECOVER]|MOUNT|NOMOUNT];
FORCE 强制关闭数据库,然后正常启动,
RESTRICT 启动数据库,只允许具有特权的用
户访问,
RECOVER 启动数据库同时开始介质恢复,
PFILE 说明启动实例使用的参数文件及其位置。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.2 ORACLE数据库实例创建
? 关闭数据库过程与启动相反,关闭数据文件,
关闭日志文件,关闭控制文件,关闭实例并释
放资源。关闭数据库命令:
SHUTDOWN
[NORMAL|TRANSACTIONAL|IMMEDIATE|ABORT];
SHUTDOWN ABORT IMMEDIATE TRANSACTIONAL NORMAL
允许新的连接 NO NO NO NO
等待用户结束
会话
NO NO NO YES
等待事务结束 NO NO YES YES
产生检查点并
关闭数据文件
NO YES YES YES
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.2 ORACLE数据库实例创建
? 关闭数据库的方式中可以看出,
对于 NORMAL,IMMEDIATE、
TRANSACTIONAL的关闭数据库方式,
下次启动数据库时不需做例程恢复 ;
对于 ABORT的关闭方式,下次启动要
做例程恢复。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
? 一般情况下,系统全局区和后台进程在
没有 DBA干预的情况下运行。然而,有时
可能会发生问题,这时 DBA必须能诊断和
修复发生的问题,即 DBA应当能够有效地
监控和管理实例。以下介绍的 三种方法
可以监控和追踪实例及其相关的结构 。
– 使用诊断追踪文件管理实例
– 通过操作系统追踪管理实例
– 使用 V$表监控实例结构
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
– 使用诊断追踪文件管理实例
诊断追踪文件中包含有实例运行过程中的
事件发生信息,充分利用它可以发现和解决
许多问题。诊断追踪文件有三类:警告文件
(alertSID.log)、后台进程跟踪文件、用户
跟踪文件。
查找关于实例的问题最好的地方是在进程
自己的追踪文件中。根据特定的进程和所遇
到的错误,这些追踪文件被写在由参数
USER_DUMP_DEST或者 BACKGROUND_DUMP_DEST
所指定的位置。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
– 使用诊断追踪文件管理实例
后台进程失败经常在数据库的 alert.log
文件中写入一项,或者写到它们各自的追踪
文件,当一个后台进程被终止或者非正常中
断一个操作时,通常产生一个追踪文件,包
含导致失败的错误信息、当前进程堆栈的转
储、当前执行的游标和与问题有关的其他信
息。
DBA应当收集这些追踪文件,将它们提供
给 Oracle全球范围客户支持顾问,他们会帮
助你诊断问题。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
– 通过操作系统追踪管理实例
后台进程也能通过使用操作系统命令进
行追踪。在 UNIX环境中,每一个后台进程是
一个分立的任务,可以分立追踪。通过查看
操作系统进程的内存和 CPU的使用(通过使
用 sar,ps,vmstat和 top等工具)指明性能
问题和失控的查询。有时解决挂起、中断服
务器进程或用户进程的唯一方法是在操作系
统级中断它们。但只能对有十足经验的用户
使用。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
– 通过操作系统追踪管理实例
在 NT服务器环境中,全部的 Oracle实例在
NT操作系统作为一个称为服务的后台进程实
现。各个后台进程作为属于这个服务的线程
实现。使用与 NT OS的 Performance Monitor
工具进行监控,它监控许多事情,包括属于
这个服务的线程的内存的消耗和环境的切换。
详细情况可查看有关使用手册。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
– 使用 V$表监控实例结构
DBA可以使用许多动态性能视图显示实例
的信息。这些视图对发现当前数据库实例
的状态和与实例相关的故障问题有很大的
价值。
1.监控数据库的连接
所有连接到实例的用户和后台进程都能够
使用 V$视图被监控。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
1.监控数据库的连接
V$process视图显示所有连接到数据库的
进程的信息,包括后台进程和用户进程;
V$bgprocess含有所有可能的后台进程的
列表和一个附加的 PADDR列,PADDR列包含后
台运行进程的十六进制地址;
V$session视图包括连接到数据库的用户
会话的信息。
V$mts视图含有共享服务器进程的追踪信
息。这个视图包含的列有最大的连接数、服
务器启动、服务器中止和服务器的最高水位。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
2.监控共享 SQL区
视图 V$sqlarea包含共享 SQL区中的 SQL语
句的信息,包括被执行 SQL语句的文本、访
问该语句的用户数、执行语句时访问的磁盘
块和内存块以及其他信息。在 V$sqlarea中,
disk_reads和 buffer_gets列追踪从磁盘中
读入的块数和从缓冲区中读入的块数。
V$open_cursor视图可以找出尚未关闭的
游标。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
2.监控共享 SQL区
视图 V$sqltext也能用于确定传递给数据库
引擎的 SQL语句。 V$sqlarea视图仅存储 SQL语
句的前 80个字符,而视图 V$sqltext保存完整
的 SQL语句。
除了在 SQL语句中适时加入换行符之外,
V$sqltext_with_newlines视图与 V$sqltext
视图是完全相同的。在 V$sqltext视图中,
SQL语句是分块存储的。要获取整个语句,你
必须按照 PIECE列排序获取 SQL语句的所有部
分。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
3.监控系统全局区
V$sga视图显示每一个 SGA主要组成部分的大
小 (以字节为单位 ),包括重做日志缓冲区、数
据库缓冲区高速缓存和共享池。 V$sgastat视
图包括更多的相关信息,在这个视图中能查找
在系统全局区包含的每个单独的内存结构的大
小,包括为堆栈空间,PL/SQL变量和堆栈预留
的内存。也可以查询这个视图,找出 SGA区中
可获得的自由内存的总数。
4.监控库和字典缓冲区
V$librarycache视图中包含库缓冲区中的每
种类型对象的性能信息; V$rowcache视图中包
含数据字典缓冲区的性能信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
5.监控并行查询进程
查询视图 V$pq_sysstat显示并行查询服
务器的当前运行信息,例如忙的和空闲的
查询服务器的数量与动态服务器创建和终
止的统计数。 V$pq_tqstat视图包含以前使
用并行查询服务器运行的查询的信息。
6.监控归档进程
归档进程活动信息存储在 V$archive视图
中,可以从这个视图中查询由 ARCH进程写
入的归档日志信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.2.3 ORACLE数据库监控实例
7.监控多线程服务器进程
视图 V$mts,V$dispatcher和
V$shared_server包含多线程服务器( MTS)
和内存结构的状态信息。 V$mts视图包含共
享服务器进程的追踪信息,例如启动和终止
的服务器数量和运行服务器的最高水位;
V$dispatcher视图包含运行的调度进程的信
息,从这个视图中,可以查询调度进程的名
字、支持的协议、处理的字节数、处理的消
息数、当前的状态和与调度进程相关的其他
运行信息; V$shared_server视图为运行的
共享服务器进程提供相同类型的信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
作业,
1.何谓 ORACLE实例?
2.为什么 ORACLE有 SGA?
3.服务器进程的功能是什么?
4.叙述 ORACLE数据库的启动和关闭过程,
5.监控 ORACLE实例的方法有哪些?