oracle中心进程
Oracle实例的进程结构

Oracle 实例的进程结构进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务。
进程与程序的区别在于前者是一个动态概念,后者是一个静态实体。
程序仅仅是指令的有序集合,而进程则强调执行过程。
进程可以动态地创建,当完成任务后即会消亡。
在Oracle 系统工作过程中,主要涉及到如下3类进程:● 用户进程 在用户连接数据库时会创建一个用户进程。
用户进程执行的是一个应用程序或Oracle 工具程序的代码,以完成用户指定的任务。
用户进程不是实例的组成部分。
● 服务器进程 这些进程根据客户的请求来完成工作。
● 后台进程 这些进程随数据库而启动,用于完成各种维护任务,如将数据块写至磁盘进程DBWR 、维护在线重做日志进程LGWR 、清理异常中止的进程等。
图2-6显示了服务器进程、用户进程和后台进程之间的关系。
共享池数据缓冲区日志缓冲区SGAData Data Data Data Data Data Data 数据文件日志文件组DBWRARCH 磁盘或磁带CKPT 服务器进程LGWR 用户进程PMON LCKn SMON RECO图2-6 服务器进程、用户进程和后台进程之间的关系1 用户进程当用户执行一个Oracle 应用程序时,或者启动一个Oracle 工具时(如SQL*Plus ),Oracle 将创建一个用户进程来执行相应的用户任务。
与用户进程相关的有两个概念:“连接”和“会话”。
连接是一个用户进程与数据库实例之间的一条通信路径,这条通信路径通过操作系统平台中的进程间通信机制或网络连接来实现。
会话则是一个用户到数据库的指定连接。
例如当一个用户启动SQL*Plus ,并输入正确的用户名和密码连接到一个数据库库后,就为该用户创建了一个会话。
会话在用户连接到实例的过程中始终存在,直到用户断开连接或终止应用程序为止。
可以看出,会话是通过连接来建立的。
同一个用户可以通过建立多个连接来创建到Oracle数据库的多个会话。
详解Oracle架构、原理、进程

详解Oracle架构、原理、进程⾸先看张图:对于⼀个数据库系统来说,假设这个系统没有运⾏,我们所能看到的和这个数据库相关的⽆⾮就是⼏个基于操作系统的物理⽂件,这是从静态的⾓度来看,如果从动态的⾓度来看呢,也就是说这个数据库系统运⾏起来了,能够对外提供服务了,那就意外着数据库系统启动了⾃⼰的⼀个实例,综合以上2个⾓度,Oracle如何定义上述描述呢?我们来引⼊第⼀个概念,Oracle服务器,所谓Oracle服务器是⼀个数据库管理系统,它包括⼀个Oracle实例(动态)和⼀个Oracle数据库(静态)。
Oracle实例是⼀个运⾏的概念(如操作系统的进程),提供了⼀种访问,Oracle数据库的⽅式,始终打开⼀个,并且只能打开⼀个Oracle数据库,Oracle实例有SGA和⼀些后台服务进程组成,在后台服务进程当中,DBWn PMON CKPT LGWR SMON是必备的后台进程,⽽ad queue、rac、shared server、ad replication则是可选的,之所以可选,要们是因为离开它Oracle也能正常运⾏,要么是⼀些⾼级的功能才可以⽤得到。
Oracle数据库是⼀个被统⼀处理的的数据的集合,从物理⾓度来看包括三类⽂件数据⽂件,控制⽂件,重做⽇志⽂件。
从逻辑⾓度来看,Oracle数据库⾄少包含⼀个表空间,表空间⾄少包含⼀个段,段由区做成,区有块组成。
需要注意的是表空间可以包含若⼲个数据⽂件,段可以跨同⼀个表空间的多个数据⽂件,区只能在同⼀个数据⽂件内。
Oracle还设计了其他的关键⽂件⽤来为整个系统服务,如配置⽂件、密码⽂件、归档⽇志⽂件,还有还有⽤户进程和服务进程,现在可以简单理解下执⾏SQL语句就要⽤到这2个进程。
SGA SHARE POOL(共享池)⽤如下命令可以调整ALTER SYSTEM SETSHARED_POOL_SIZE=64MLIBRARY CACHE(库⾼速缓存)1存储最近使⽤的SQL和PL/SQL语句信息2包括SHARED SQL和SHARED PL/SQL3⽤LRU算法管理4⼤⼩由SHARE POOL⼤⼩决定DATA DICTIONARY CACHE(数据字典⾼速缓存)1数据库中最近使⽤的定义的集合2包含数据库⽂件,表,索引,列,⽤户,权限和其他的数据库对象相关信息3在语法分析阶段,服务器进程会在数据字典中查找⽤于对象解析和验证访问的信息4将数据字典信息⾼速缓存到内存中,可缩短查询和DML的响应时间5⼤⼩由共享池的⼤⼩决定DATABASE BUFFERCACHE(数据缓冲区⾼速缓存)1存储已从数据⽂件检索到的数据的复本2⼤幅提⾼读取和更新数据的性能3使⽤LRU算法管理4主块的⼤⼩由DB_BLOCK_SIZE确定REDO LOG BUFFER(重做⽇志缓冲区)1记录对数据库数据块作的全部更改2主要⽤来恢复3其中记录的更改被称作重做条⽬4重做条⽬包含⽤于重新构建或重做更改的信息5⼤⼩由LOG_BUFFER定义LARGE POOL(⼤型池)1 SGA可选的内存区2分担了共享池的⼀部分⼯作3⽤于共享服务器的UGA4⽤于I/O服务器进程5备份和恢复操作或RMAN6并⾏执⾏消息缓冲区(前提PARALLEL_POOL_SIZE=TRUE)7不使⽤LRU列表8⼤⼩由LARGE_POOL_SIZE确定JAVA POOL(JAVA池)1存储JAVA命令服务分析要求2安装和使⽤JAVA时必须的3⼤⼩有JAVA_POOL_SIZE确定PRIVATE SQL AREA(专⽤SQL区)专⽤SQL 区的位置取决于为会PERSISTEN AREA(永久区)包含绑定信息,并且只在关闭游标时释放RUNTIME AREAPGA 话建⽴的连接类型。
Oracle进程及相关示意图

oracle后台进程1,处理用户请求,同时维护数据库系统使其始终具有良好的性能。
2,从用户进程处接受到任务,然后进行I/O操作、监视各个进程的状态、维护系统的性能和可靠性9i中主要的后台进程数据库写进程(DBWRn)将脏缓存块写入数据文件日志写进程(LGWR)将重做日志缓存区的重做记录写入联机重做日志检查点进程(CKPT)调用DBWR或LGWR将所有脏缓存块写入数据文件,已实现数据库完整性系统监视进程(SMON)在实例启动时负责恢复数据库,回收表空间空闲空间进程监视进程(PMON)恢复那些失败的进程,并释放其进程所占系统资源。
定期检查调度程序和服务进程归档进程(ARCn)将已经写满的重做日志文件复制到归档目标中恢复进程(RECO)分布式数据库环境中自动恢复那些失败的分布式事务调度程序进程(Dnnn)接受用户进程的请求,将他们放入请求队列中,然后为请求队列中的用户进程分配一个服务进程。
注意:oracle还有一些可选后台进程。
比如,在使用作业队列功能(oracle job queue)时将会启动作业队列进程CJQn;在使用高级队列功能(oracle advanced queue)时将启动队列监视进程QMNn。
这些进程不会对实例的运行造成太大影响,即使失败也不会导致实例崩溃。
数据库写进程(DBWRn)将脏缓存块写入数据文件DBWR不是将所有的脏缓存块写入数据文件,因为脏缓存块一旦被写入数据文件,它将被标记为空闲缓存块,其中保存的数据将丢失。
如果随后立即有其他的用户进程来访问缓存块中以前所保存的数据,oracle需要重新到数据文件中读取。
这样很显然不是我们所期望的通过LRU算法能够解决这个问题。
LRU(最近最少使用)算法。
最近未被访问过的缓存块被标记为“冷缓存块(cold cache block)”,DBWR进程只将那些同时被标记为“脏”和“冷”的缓存块写入数据文件,这样,那些经常被访问的脏缓存块将继续保留在缓存中,直到他们不再需要使用时才由DBWR进程写入数据文件。
04-1 Oracle进程结构

字典缓存
为提高效率,缓存常使用的数据字典信息。如账户信息、数据库结构信息等。
15
大型池
大型池是一个可选的内存结构。提供大量内存。 适合于下列操作:
进行数据库备份或恢复操作; 执行具有大量排序操作的SQL语句; 执行并行数据库操作。
大型池没有LRU列表
16
Java池
用于为JVM中的Java代码和数据提供内存服务。
23
用户进程
用户进程的建立
当用户执行一个Oracle应用程序,如Pro*C程序,或者启动 一个Oracle工具时,如SQL*PLUS,系统将创建一个用户进 程来执行。
连接和会话
连接:是一个用户进程与数据库实例间的通信路径。通过操 作系统平台中的进程间通信机制或网络连接实现。 会话:是一个用户到数据库的特定连接。会话在用户连接到 实例过程中始终存在,直到断开连接或中止应用程序。 共享服务器模式,多个会话将共享一个服务进程。 专用服务器模式,每个会话将独占一个服务进程。
24
Oracle 进程
服务进程
服务进程是由Oracle自身创建的,用于处理连接到实例的用户进程的请求。 用户进程必须通过服务进程才能访问数据库。 服务进程分两种:专用服务进程、共享服务进程。 服务进程的主要任务:
解析并执行用户进程提交的SQL语句 在SGA的数据库缓存中搜索用户进程访问的数据,如果没有,则负责从磁盘中读入。 将结果返回给用户。
Oracle内部代码
Oracle内部代码
SGA
专用服务器模式
4
用户程 序代码
调度进程 共享服务器模式 Oracle内 部代码
SGA
5
2 实例及其内存结构
实例 Oracle数据库服务器由一个Oracle数据库和一个Oracle实例构成。 数据库启动后,将会为其分配一个系统全局区,并启动若干的后台 进程。 所有的后台进程以及内存结构的总和成一个Oracle实例。 用户对数据库的访问是通过与实例的交互实现的,实例在数据库和 用户间充当了中介角色。 每个数据库至少对应一个实例。 实例组成 实例的内存结构:系统全局区(SGA)和程序全局区(PGA) 实例的进程结构:若干后台进程和服务进程组成,共享服务器下还 包括调度进程。
04 Oracle服务器-进程结构

• 用户进程 User process • Oracle进程:Oracle进程在创建实例时由Oracle产生,执行
的是Oracle自身的代码,用于完成特定的服务功能。
– 服务进程 Server process
– 后台进程 Background process
DBWn DWW0 LGWR
CKPT
件的任务交给DBWR进 程完成
Data files
Control files
Redo log files
成都信息工程学院 软件工程学院
1-12
Oracle服务器—Oracle体系结构
归档进程 Archiver (ARCn)
该进程将已填满的在线日志文件拷贝到指定的存储设备。
需要注意的是:在单处理器的服务器下,配置额外的 DBWn无法发挥作用。
Database
成都信息工程学院 软件工程学院
1-8
Oracle服务器—Oracle体系结构
日志写进程 Log Writer (LGWR)
Instance SGA
Redo log buffer
该进程将日志缓冲区写入磁盘上的一 个日志文件,它是负责管理日志缓冲区的 一个ORACLE后台进程。 LGWR的启动时机为:
Database
日志缓冲区是一个循环缓冲区。当LGWR将日志缓冲区的 日志项写入日志文件后,服务器进程可将新的日志项写 入到该日志缓冲区。LGWR 通常写得很快,可确保日志缓 冲区总有空间可写入新的日志项。
成都信息工程学院 软件工程学院
1-9
Oracle服务器—Oracle体系结构
系统监控进程 System Monitor (SMON)
Oracle中最易忽视的两个重要进程

Oracle中最易忽视的两个重要进程在Oracle数据库中有两个进程非常的渺小,但是其作用却是非常的巨大。
由于其比较小而往往被数据库管理员所忽视。
笔者这次就给大家提醒提醒,不要忽视了这两个进程的作用。
如果利用的好的话,会减少系统管理员不少的工作。
一、系统监视进程SMON这个进程对于Oracle数据库来说,可以利用一句话来概括,即人小鬼大。
其负责的内容并不是很多,但是对于数据的安全与数据库的性能却有很关键的作用。
如随着表空间中的数据不断的建立、删除、更新等等,在表空间中难免会产生碎片。
由于这些碎片的存在,数据库的性能会逐渐的降低。
而现在系统监视进程SMON的作用,就可以解决这些碎片。
SMON 进程会将各个表空间的空闲碎片合并在一起,让数据库系统更加容易分配。
从而提高数据库的性能。
另外,在数据库运行的过程中,会因为断电或者其他的原因而发生故障。
此时由于数据高速缓存中的脏缓存块还没有来得及写入到数据文件中,从而导致数据的丢失。
在数据库启动的时候,系统监视进程SMON会在下一次启动例程的时候,自动读取重做日志文件并对数据库进行恢复。
也就是说,进行将已提交的事物写入数据文件(已经写入到日志文件中而没有写入到数据文件中的数据)、回退未提交的事务操作。
可见,SMON进程在Oracle 数据库中是一个比较小但是却非常重要的角色。
在管理这个进程的时候,笔者认为主要需要注意两个问题。
一是其启动的时机。
一般情况下,例程重新启动的时候,会启动这个系统监视进程。
然后在这个例程运行期间,这个进程也会被系统定期的唤醒,然后其会检查是否有工作需要其完成。
最重要的是,在有需要的时候,数据库管理员可以通过其他进程来启动这个SMON系统系统监视进程,来完成一些特定的工作。
第二需要注意表空间配置对这个进程的影响。
在表空间管理中,有一个参数叫做PCTINCREASE。
如果将这个参数设置为0的话,则这个SMON系统监视进程对于这个表空间的作用就要打折扣了。
oracle数据库的进程结构

三、进程结构进程结构包括用户进程和oracle进程两类,而oracle进程中又分为服务器进程和后台进程,每个系统进程的大部分操作都是相互独立的,互不干扰。
(一)用户进程用户进程是当用户连接数据库执行一个应用程序时创建的,用来完成用户所制定的任务。
在oracle数据库中有两个与用户进程相关的概念:连接与会话。
连接是指用户进程与数据库实例之间的一条通信路径。
该路径由硬件线路、网络协议和操作系统进程通信机制构成。
会话是指用户到数据库的指定连接。
在用户连接数据库的过程中,会话始终存在,知道用户断开连接户终止应用程序为止。
而且会话是通过连接实现的,同一个用户可以创建多个连接来实现多个会话。
(二)服务器进程服务器进程由oracle自身创建,用于处理连接到数据库实例的用户进程所提出的请求。
在应用程序和Oracle运行在一台机器的情况下,可以将用户进程和对应的服务器进程合并来降低系统开销。
但是,当应用程序和Oracle在不同的计算机上运行时,用户进程总是通过不同的服务器进程连接Oracle。
服务器进程主要完成以下任务。
1、解析并执行用户提交的sql语句和pl/sql语句。
2、在SAG的高速缓冲区中搜索用户进程所需要访问的数据,如果数据不在缓冲区中,则需要从硬盘数据文件中读取所需的数据,再将他们复制到缓冲区中。
3、将查询或执行后的结果数据返回给用户进程。
用户进程服务器进程建立连接oracle服务器创建会话数据库访问示意图图1 用户进程与数据库进程的联系(三)后台进程为了保证oracle 数据库在任意一个时刻都可以处理多用户的并发请求,进行复杂的数据操作,而且还要优化系统性能,oracle 数据库启用了一些相互独立的附加进程,完成一类指定的工作,称之为后台进程。
服务器进程在执行用户进程请求时,会调用后台进程来实现对数据库的操作。
后台进程主要完成以下任务:(1)在内存与磁盘之间进行I/O 操作(2)见识各个服务器的进程状态(3)协调各个服务器进程的任务(4)维护系统性能和可靠性 SGA 服务器进程用户进程LGWRPMONSMONARCnCKPTDBWRn用户PGA 数据库进程图2 数据库进程与内存的联系后台进程又分为必备进程和可选进程。
0117Oracle的进程结构

4
《 Oracle 12C数据库应用与设计》
Oracle 12C数据库应用与设计
《 Oracle 12C数据库应用与设计》
单元1 登录Oracle数据库与试用 Oracle的常用工具
Oracle的进程结构
《 Oracle 12C数据库应用与设计》
数据库实例由内存和一系列后台进程组成,Oracle数 据库启动时,会启动多个Oracle后台进程,通过相关进程, Oracle实现数据库与实例的连通和互动。
进程是操作系统的一种机制,它执行一系列的步骤, 完成指定的任务(或称为作业)。一个进程通常有它自己 的私有内存区(Private Memory Area)。
进程和程序的区别是:进程是动态的、有生命的, 而程序是静态的;程序是一系列指令的集合,进程强调的 执行过程。
3
Oracle的进程分为Oracle系统进程和用户进程, Oracle系统进程又分为服务器进程(Server Process) 和后台进程(Background Process)。
Oracle数据库进程之服务器进程详解

Oracle实例主要有3 类进程:(1)服务器进程(serverprocess):这些进程根据客户的请求来完成工作。
我们已经对专用服务器和共享服务器有了一定的了解。
它们就是服务器进程。
(2)后台进程(backgroundprocess):这些进程随数据库而启动,用于完成各种维护任务,如将块写至磁盘、维护在线重做日志、清理异常中止的进程等。
(3)从属进程(slaveprocess):这些进程类似于后台进程,不过它们要代表后台进程或服务器进程完成一些额外的工作。
在某些操作系统(如Windows)上,Oracle使用线程实现,所以在这种操作系统上,就要把我们所说的“进程”理解为“线程”的同义词。
“进程”一词既表示进程,也涵盖线程。
如果你使用的是一个多进程的Oracle实现,比如说UNIX 上的Oracle 实现,“进程”就很贴切。
如果你使用的是单进程的Oracle 实现,如Windows上的Oracle 实现,“进程”实际是指“Oracle 进程中的线程”。
所以,举例来说,当我谈到DBWn 进程时,在Windows 上就对应为Oracle 进程中的DBWn 线程服务器进程服务器进程就是代表客户会话完成工作的进程。
应用向数据库发送的SQL 语句最后就要由这些进程接收并执行。
(1)专用服务器(dedicatedserver)连接,采用专用服务器连接时,会在服务器上得到针对这个连接的一个专用进程。
数据库连接与服务器上的一个进程或线程之间存在一对一的映射。
(2)共享服务器(sharedserver)连接,采用共享服务器连接时,多个会话可以共享一个服务器进程池,其中的进程由Oracle 实例生成和管理。
你所连接的是一个数据库调度器(dispatcher),而不是特意为连接创建的一个专用服务器进程。
注意连接和会话之间的区别:(1)连接(connection)就是客户进程与Oracle 实例之间的一条物理路径(例如,客户与实例之间的一个网络连接)。
ORACLE内存管理和后台进程

D WR 将 管 理缓 冲存 储 区 . 用 户 进 程 总 可 得 到 未 用 的 缓 冲 区 。 使 1软 件 代 码 区 : 于存 储 正 在 执 行 的 或 可 以 执 行 的程 序 代 码 。软 时 . B . 用 O C E采 用 L A R L RU(E S E E T Y U E 算 法 ( 近 最 少 使 L A T R C N L S D) 最 件 区 是 只 读 。 安 装 成共 享 或非 共 享 。 R C E 系 统程 序 是 可共 享 的 , 可 O A L 保 使 / O 以致 多 个 OR C E 用 户可 存 取 它 , 不 需 要 在 内存 有 多 个 副 本 。用 户 用 算法 ) 持 内存 中 的数 据 块 是 最 近 使 用 的 , I 最 小 。 A L 而 4L wR进 程 :该 进 程 将 日志 缓 冲 区写 入 磁 盘 上 的 一 个 日志 文 _G 程序可以共享也可以不共享。 它 R CE G 2系 统 全 局 区 S A: 一 组 由 O AC E分 配 的共 享 的 内存 结 构 , 件 . 是负 责 管理 日志 缓 冲 区的 一 个 O A L 后 台进 程 。L WR进 程 . G 为 R L 可 包 含 一 个 数 据 库 实 例 的 数 据 或控 制信 息 。 果 多个 用 户 同 时连 接 到 将 自 上 次 写 入 磁 盘 以来 的全 部 日志 项 输 出 , 下 列 情 况 下 ,会 引 起 如 G 同一 实 例 时 . 在实 例 的 S A 中数 据 可 为多 个 用 户 所 共 享 , 以又 称 为 L WR输 出 : G ‘ 所 a当 用 户 进 程 提交 一 事务 时写 入 一 个 提 交 记 录 。 . 共 享 全 局 区 。 当 实 例 起 动 时 ,GA 的存 储 自动 地 被 分 配 ;当 实 例 关 闭 S
oracle后台进程

DBWn:执行将数据块缓冲区写入数据文件的工作,是负责缓冲区存储区管理的一个Oracle后台进程。
LGWR:负责管理日志缓冲区的一个Oracle后台进程,它将日志缓冲区写入磁盘上的日志文件。
CKPT:在检查点出现时,对全部数据文件的文件头进行修改,并在控制文件中记录该检查点。
Dnnn:允许用户进程共享有限的服务器进程。
MMAN:实现共享内存自动管理的功能自动调整共享内存各个组件的大小(10g新增加的后台进程)。
PSP0:启动其他的Oracle进程(10g新增加的后台进程)。
CJQ0:它是一个任务队列的调度进程,负责从job$表中找到需要执行的任务,并分配job进程执行,如果job进程不足,会
SMON:负责在实例启动时执行实例恢复,并清理不再使用的临时段。
RECO:启动分布式选项时才会存在的进程,而且DISTRIBUTED\-TRANSACTIONS参数大于0。
LCKn:在具有并行服务器选件的环境下使用,可多至10个进程,用于实例间的封锁。
ARCH:将已填满的在线日志文件复制到指定的存储设备。
自动产生新的job进程(在jo来自_queue_processes参数限制范围内)。
QMON:是队列监控同步进程(QMNC)和队列服务进程(QXXX)的统称。
MMON:是管理监控进程,M000是MMON的SLAVE进程,协助MMON进程工作(10g新增加的后台进程)。
MMNL:是AWR新增的进程,主要作用是将AWR数据从内存中刷新到表中。
Oracle五大进程和server process介绍

Oracle必须的五大进程:SMON 系统监视进程空间管理: 定期合并空间(老版本才有) 定期回收临时段实例恢复: (如掉电导致实例意外终止)恢复的方法: 先前滚==>后回滚==>释放资源前滚将数据库中的SQL(包括提交的和未提交的)全部重新做一遍回滚将没提交的SQL句从数据库中将老的镜像取出覆盖释放资源将前滚和回滚中使用到的资源释放DBWn n指的是0-9 a-j 多个写进程的区分将脏块写盘触发写的条件1.产生检查点2.脏数据缓冲区达到阀值默认10%3.扫描整个db buffer没有空闲 db buffer中包含脏的和未脏的优先写脏数据列表再写未改的4.timeout超时如果DBWR没事做会被每三秒唤醒一次去巡检写不写不一定5.集群环境的ping请求触发多实例的数据写请求6.表级别的truncate或drop也会触发数据写7.修改表空间的read only8.做表空间的offline(离线)9.热备份 begin backup命令PMON 进程监视器1.清理与实例非法断开的server_procese残留的资源非正常终止的用户进程产生的垃圾资源2.负责重启以外死掉的调度器(网络监听中使用的)3.将实例的信息注册到监听程序CKPT 把新的检查点写入指定位置1.调度数据写dbwN2.将新检查点写数据文件头3.将新检查点写控制文件中的数据文件头的记录LGWR 只有一个进程不会向数据写进程那么多因为写要求有顺序将redo log buffer里的条目写到redo文件触发写的条件mit2.redo log buffer 1/3满3.redo log buffer 日志缓冲区达到1M4.写日志优先(任何一次数据写之前)当更新数据量很多时日志量很少(就是一update) 数据量却很多所以采用写日志优先5.3秒写一次server process简述【以客户端执行一条sql为例说明】:1、sql语句通过网络到达实例、server process 接收sql语句2、server process 去shard pool找sql和执行计划若没有解析sql3、server process 根据执行计划去buffer cache(缓存dbf的数据)找相关的数据,如没有才到dbf中取出数据放到buffer chache 再返给用户4、若需要修改数据,server process 读出数据到buffer cache中内存中修改数据修改完返给用户server process始终为用户服务,故:server process处理的快慢直接影响用户体验的快慢。
经典说明Oracle SMON进程

一、系统监视进程SMON这个进程对于Oracle数据库来说,可以利用一句话来概括,即人小鬼大。
其负责的内容并不是很多,但是对于数据的安全与数据库的性能却有很关键的作用。
如随着表空间中的数据不断的建立、删除、更新等等,在表空间中难免会产生碎片。
由于这些碎片的存在,数据库的性能会逐渐的降低。
而现在系统监视进程SMON的作用,就可以解决这些碎片。
Oracle SMON进程会将各个表空间的空闲碎片合并在一起,让数据库系统更加容易分配。
从而提高数据库的性能。
另外,在数据库运行的过程中,会因为断电或者其他的原因而发生故障。
此时由于数据高速缓存中的脏缓存块还没有来得及写入到数据文件中,从而导致数据的丢失。
在数据库启动的时候,系统监视进程SMON会在下一次启动例程的时候,自动读取重做日志文件并对数据库进行恢复。
也就是说,进行将已提交的事物写入数据文件(已经写入到日志文件中而没有写入到数据文件中的数据)、回退未提交的事务操作。
可见,Oracle SMON 进程是一个比较小但是却非常重要的角色。
在管理这个进程的时候,笔者认为主要需要注意两个问题。
一是其启动的时机。
一般情况下,例程重新启动的时候,会启动这个系统监视进程。
然后在这个例程运行期间,这个进程也会被系统定期的唤醒,然后其会检查是否有工作需要其完成。
最重要的是,在有需要的时候,数据库管理员可以通过其他进程来启动这个SMON系统系统监视进程,来完成一些特定的工作。
第二需要注意表空间配置对这个进程的影响。
在表空间管理中,有一个参数叫做PCTINCREASE。
如果将这个参数设置为0的话,则这个SMON系统监视进程对于这个表空间的作用就要打折扣了。
在设置为0的情况下,SMON进程就不会对这个表空间中的空闲碎片进行整理、合并操作。
也就是说,需要数据库管理员通过数据的导出导入等手工操作,才能够解决表空间的碎片问题。
显然这会增加数据库管理员的工作量。
为此笔者建立,除非有特别的需要,不要将这个参数设置为0。
oracle查看后台进程

何查看后台进程?∙系统环境:1、操作系统:Windows 2000 Server,机器内存128M2、数据库:Oracle 8i R2 (8.1.6) for NT 企业版3、安装路径:C:\ORACLE∙实现步骤:∙∙SQL> desc v$bgprocess∙名称空? 类型∙ ----------------------------------------- -------- -----------------∙ PADDR RAW(4) --进程状态对象地址∙ NAME VARCHAR2(5) --后台进程名称∙ DESCRIPTION VARCHAR2(64) --后台进程描述∙ ERROR NUMBER --后台进程运行中所遇到的错误数∙∙SQL> col DESCRIPTION format a40∙SQL> select * from v$bgprocess;∙∙PADDR NAME DESCRIPTION ERROR∙-------- ----- ---------------------------------------- ----------∙02CB8B4C PMON process cleanup ##########∙00 TRWR trace writer process ##########∙00 LMON lkmgr monitor ##########∙00 LMD0 lkmgr daemon 0 ##########∙02CB8E6C DBW0 db writer process 0 ##########∙00 DBW1 db writer process 1 ##########∙00 DBW2 db writer process 2 ##########∙00 DBW3 db writer process 3 ##########∙00 DBW4 db writer process 4 ##########∙00 DBW5 db writer process 5 ##########∙00 DBW6 db writer process 6 ##########∙∙PADDR NAME DESCRIPTION ERROR∙-------- ----- ---------------------------------------- ----------∙00 DBW7 db writer process 7 ##########∙00 DBW8 db writer process 8 ##########∙00 DBW9 db writer process 9 ##########∙02CBB3EC ARC0 Archival Process 0 ##########∙00 ARC1 Archival Process 1 ##########∙00 ARC2 Archival Process 2 ##########∙00 ARC3 Archival Process 3 ##########∙00 ARC4 Archival Process 4 ##########∙00 ARC5 Archival Process 5 ##########∙00 ARC6 Archival Process 6 ##########∙00 ARC7 Archival Process 7 ##########∙∙PADDR NAME DESCRIPTION ERROR∙-------- ----- ---------------------------------------- ----------∙00 ARC8 Archival Process 8 ##########∙00 ARC9 Archival Process 9 ##########∙02CB918C LGWR Redo etc.##########∙00 LCK0 Lock Process 0 ##########∙00 LCK1 Lock Process 1 ##########∙00 LCK2 Lock Process 2 ##########∙00 LCK3 Lock Process 3 ##########∙00 LCK4 Lock Process 4 ##########∙00 LCK5 Lock Process 5 ##########∙00 LCK6 Lock Process 6 ##########∙00 LCK7 Lock Process 7 ##########∙∙PADDR NAME DESCRIPTION ERROR∙-------- ----- ---------------------------------------- ----------∙00 LCK8 Lock Process 8 ##########∙00 LCK9 Lock Process 9 ##########∙00 BSP0 Buffer Server Process 0 ##########∙00 BSP1 Buffer Server Process 1 ##########∙00 BSP2 Buffer Server Process 2 ##########∙00 BSP3 Buffer Server Process 3 ##########∙00 BSP4 Buffer Server Process 4 ##########∙00 BSP5 Buffer Server Process 5 ##########∙00 BSP6 Buffer Server Process 6 ##########∙00 BSP7 Buffer Server Process 7 ##########∙00 BSP8 Buffer Server Process 8 ##########∙∙PADDR NAME DESCRIPTION ERROR∙-------- ----- ---------------------------------------- ----------∙00 BSP9 Buffer Server Process 9 ##########∙02CB94AC CKPT checkpoint ##########∙02CB97CC SMON System Monitor Process ##########∙02CB9AEC RECO distributed recovery ##########∙00 EMN0 Event Monitor Process 0 ##########∙02CB9E0C SNP0 Job Queue Process 0 ##########∙02CBA12C SNP1 Job Queue Process 1 ##########∙02CBA44C SNP2 Job Queue Process 2 ##########∙02CBA76C SNP3 Job Queue Process 3 ##########∙00 SNP4 Job Queue Process 4 ##########∙00 SNP5 Job Queue Process 5 ##########∙∙PADDR NAME DESCRIPTION ERROR∙-------- ----- ---------------------------------------- ----------∙00 SNP6 Job Queue Process 6 ##########∙00 SNP7 Job Queue Process 7 ##########∙00 SNP8 Job Queue Process 8 ##########∙00 SNP9 Job Queue Process 9 ##########∙00 SNPA Job Queue Process A ##########∙00 SNPB Job Queue Process B ##########∙00 SNPC Job Queue Process C∙00 SNPD Job Queue Process D ##########∙00 SNPE Job Queue Process E ##########∙00 SNPF Job Queue Process F ##########∙00 SNPG Job Queue Process G ##########∙∙PADDR NAME DESCRIPTION ERROR∙-------- ----- ---------------------------------------- ----------∙00 SNPH Job Queue Process H ##########∙00 SNPI Job Queue Process I ##########∙00 SNPJ Job Queue Process J ##########∙00 SNPK Job Queue Process K ##########∙00 SNPL Job Queue Process L ##########∙00 SNPM Job Queue Process M ##########∙00 SNPN Job Queue Process N ##########∙00 SNPO Job Queue Process O ##########∙00 SNPP Job Queue Process P ##########∙00 SNPQ Job Queue Process Q ##########∙00 SNPR Job Queue Process R ##########∙∙PADDR NAME DESCRIPTION ERROR∙-------- ----- ---------------------------------------- ----------∙00 SNPS Job Queue Process S ##########∙00 SNPT Job Queue Process T∙00 SNPU Job Queue Process U ##########∙00 SNPV Job Queue Process V ##########∙00 SNPW Job Queue Process W ##########∙00 SNPX Job Queue Process X ##########∙00 SNPY Job Queue Process Y ##########∙00 SNPZ Job Queue Process Z ##########∙00 QMN0 AQ Time Manager Process 0 ##########∙00 QMN1 AQ Time Manager Process 1 ##########∙00 QMN2 AQ Time Manager Process 2 ##########∙∙PADDR NAME DESCRIPTION ERROR∙-------- ----- ---------------------------------------- ----------∙00 QMN3 AQ Time Manager Process 3 ##########∙00 QMN4 AQ Time Manager Process 4 ##########∙00 QMN5 AQ Time Manager Process 5 ##########∙00 QMN6 AQ Time Manager Process 6 ##########∙00 QMN7 AQ Time Manager Process 7 ##########∙00 QMN8 AQ Time Manager Process 8 ##########∙00 QMN9 AQ Time Manager Process 9 ##########∙∙已选择95行。
ORACLE 进程总结

DBWR进程该进程将缓冲区(BUFFER CACHE)中的脏块(DIRTY BLOCK)写入数据文件。
触发条件:DBWR超时,大约3秒系统中没有多余的空缓冲区来存放数据CKPT 进程触发DBWRTIPS:在有些平台上,一个实例可有多个DBWR。
在这样的实例中,一些块可写入一磁盘,另一些块可写入其它磁盘。
LGWR进程该进程将日志缓冲区(REDO BUFFER)写入磁盘上的一个日志文件。
触发条件用户提交有1/3重做日志缓冲区未被写入磁盘有大于1M的重做日志缓冲区未被写入磁盘3秒超时DBWR 写数据之前TIPS:日志缓冲区是一个循环缓冲区CKPT进程检查点进程,通知DBWR写数据,并修改数据文件,控制文件头,记录数据库状态。
TIPS:将上次写数据块的位置记录到CHECKPOINT QUEUE(记录BUFFER CACHE中的buffer header)中,然后周期性读取指针,然后唤醒DBWT写脏数据块。
SMON进程系统监控进程,该进程主要负责实例启动时执行实例恢复,回滚段的在线与离线,管理并清除临时空间,合并空闲空间等。
TIPS:SMON周期性的苏醒(或被其他后台进程叫醒)来执行这些管家的家庭杂事。
TIPS:SMON对CPU负载要求很高。
PMON进程进程监控进程,用于清除失效的用户进程,释放该用户占有的数据库资源(回滚未提交的工作,释放锁等),释放后将资源分配给SGA。
ARCH进程归档进程,将已填满的在线日志文件拷贝到指定的存储设备。
CJQn进程作业进程管理进程,生成j000-j999类似的作业进程来运行作业。
Jnnn进程作业进程,负责运行具体的作业。
Pnnn进程并行进程,一般在并行环境中自动产生。
Snnn进程共享服务器进程。
Dnnn进程调度后台进程。
*********************************************************************************** QMNn进程Streams Advanced Queuing协调进程,监控消息队列。
Oracle的三种进程

Oracle的三种进程用户进程:在用户请求连接Oracle服务器时启动需要从数据库请求信息的数据库用户必须先建立与Oracle 服务器的连接。
连接由SQL*Plus 这类的数据库接口工具请求,并开始用户进程。
用户进程并不与Oracle 服务器直接进行交互操作,而是通过用户程序接口(UPI) 生成各种调用。
用户程序接口则可以创建会话并启动服务器进程。
服务器进程:与Oracle服务器实例相连接,在用户建立会话时启动用户建立连接后,服务器进程便会启动,以处理用户进程的请求。
服务器进程可以是专用服务器进程或共享服务器进程。
在专用服务器环境中,服务器进程只处理一个用户进程的请求。
用户进程断开连接后,服务器进程就会终止。
在共享服务器环境中,服务器进程将处理多个用户进程的请求。
服务器进程可以通过Oracle 程序接口(OPI) 与Oracle 服务器进行通信。
后台进程:在Oracle实例启动时启动维护并加强物理结构和内存结构之间的关系•必备的后台进程:(五个进程分别对应了Oracle的物理结构和内存结构)– DBWn(数据文件)- LGWR (重做日志文件)- CKPT (控制文件)- PMON (SGA)- SMON (PGA)• 可选的后台进程:– ARCn LMDn RECO– CJQ0 LMON Snnn– Dnnn Pnnn– LCKn QMNn数据库写入程序(DBWn) --> n 可以是0-n服务器进程在数据库缓冲区高速缓存中记录对还原块和数据块所做的更改。
DBWn 将数据库缓冲区高速缓存中的灰数据缓冲区写入数据文件。
这可确保数据库缓冲区高速缓存中有足够数量的空闲缓冲区(即当服务器进程需要读取数据文件中的块时可以覆盖的缓冲区)可用。
由于服务器进程只在数据库缓冲区高速缓存中进行更改,因此提高了数据库的性能。
DBWn 延迟写入数据文件,直到发生下列事件之一:• 增量或正常检查点• 灰数据缓冲区的数量达到阈值• 进程扫描指定数量的块而无法找到任何空闲缓冲区时• 出现超时• 实时应用集群(Real Application Clusters, RAC) 环境中出现ping 请求• 使一般表空间或临时表空间处于脱机状态• 使表空间处于只读模式• 删除或截断表• 执行ALTER TABLESPACE 表空间名BEGIN BACKUP 操作DBWn写入数据文件的数据跟是否提交事务没关,有时没提交事务的数据也会被写入数据文件,假设发生rollback会按需把这些数据回滚掉,这些数据就不再用得上,是垃圾数据了。
Oracle常用进程

Oracle常⽤进程PMONPMON,进程监视。
PMON主要有3个⽤途:1,在进程⾮正常中断后,做清理⼯作。
例如:dedicated server失败了或者因为⼀些原因被杀死,这是PMON的⼯作分两种。
第⼀,是对dedicated server所做的⼯作进⾏恢复或撤销。
第⼆:是释放dedicated server占⽤的资源。
PMON会把失败进程的未提交的⼯作进⾏rollback,释放锁,释放SGA空间2,在进程abort后,PMON进⾏清理⼯作。
PMON会监视oracle其他的后台进程,并在需要的时候对它们进⾏重建。
如果shared server或者dispatcher失败后,PMON会介⼊其中,并在清理完失败进程后,重建⼀个shared server或dispatcher。
例如:在数据库进⾏写⽇志的时候LGWR进程失败,这是个很严重的错误。
解决这种问题最安全的⽅法是⽴即中断实例,并恢复。
3,PMON的第三个⽤途是,向Oracle TNS listener注册实例信息。
在实例启动的时候,PMON会查询oracle的默认端⼝(1521端⼝)是否处于⼯作状态。
如果这个端⼝已经处于⼯作状态,那么该实例就可以启动,PMON把实例的相关信息告诉listener,包括服务名、实例的信息等。
如果listener没有启动,PMON就会定期的尝试去连接listener。
这⾥要注意如果oracle没有是默认的1521端⼝,⽽是使⽤其他的端⼝时,PMON和listener的连接过程和使⽤1521端⼝还是很相似的,除了,在使⽤⾮默认端⼝时,listener的地址要在参数LOCAL_LISTENER 中指定。
SMONSMON,系统监视。
SMON的⼯作如下:1,清理临时空间。
2,聚合空闲空间。
如果使⽤dictionary-managed ⽅式来管理表空间,SMON就要负责把空闲的extent聚合成⼤的空闲extent。
这种情况只有在表空间的管理⽅式是dictionary-managed ,且参数PCTINCREASE被设置成⾮零值的时候才会发⽣。
oracle查看和修改进程(会话数)

oracle查看和修改进程(会话数)Oracle 进程及会话当前进程数量select count(*) from v$process;查看进程数量上限select value from v$parameter where name = 'process';查看当前会话量select count(*) from v$session;会话数量上限select value from v$parameter where name = 'sessions';修改进程上限值:100alter system set processes = 100 scope = spfile;修改会话上限值:120,会话数与进程数有⼀个⽐例关系alter system set sessions = 120 scope = spfile;备注:修改完之后备份下spfile,然后重启数据库create pfile from spfile;查看不⽤⽤户的连接数select username,count(username) from v$session where username is not null group by username;查看当前数据库建⽴的会话情况-- SID 会话(session)的ID号;-- SERIAL# 会话的序列号,和SID⼀起⽤来唯⼀标识⼀个会话;-- USERNAME 建⽴该会话的⽤户名;-- PROGRAM 这个会话是⽤什么⼯具连接到数据库的;-- STATUS 当前这个会话的状态,ACTIVE表⽰会话正在执⾏某些任务,INACTIVE表⽰当前会话没有执⾏任何操作;select sid,serial#,username,program,machine,status from v$session;注:SID 对应的username 列为空的会话,是Oracle 的后台进程,不要对这些会话进⾏任何操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle 中心进程
1. PMON:进程监视器(Process Monitor)
1、负责在出现异常中止的连接之后完成清理。
PMON 会回滚未提交的工作,并释放为失败进程分配的SGA 资源。
2、监视其他的Oracle 后台进程,并在必要时(如果可能的话)重启这些后台进程。
3、向Oracle TNS 监听器注册这个实例。
实例启动时,PMON 进程会询问公认的端口地址(除非直接指定),来查看是否启动并运行了一个监听器。
如果数据库实例启动时有监听器在运行,PMON 会与这个监听器通信,并向它传递相关的参数,如服务名和实例的负载度量等。
如果监听器未启动,PMON 则会定期地试图与之联系来注册实例。
2. SMON:系统监视器(System Monitor)
1、清理临时空间:原先清理临时空间这样的杂事都要由我们来完成,随着引入了“真正”的
临时表空间,这个负担已经减轻,但并不是说完全不需要清理临时空间。
例如,建立一个索引
时,创建时为索引分配的区段标记为TEMPORARY。
如果出于某种原因CREATE INDEX 会话中止了,
SMON 就要负责清理。
其他操作创建的临时区段也要由SMON 负责清理。
2、合并空闲空间:如果你在使用字典管理的表空间,SMON 要负责取得表空间中相互连续的空
闲区段,并把它们合并为一个更大的空闲区段。
只有当字典管理的表空间有一个默认的存储子
句,而且pctincrease 设置为一个非0 值时,才会出现空闲空间的合并。
3、针对原来不可用的文件恢复活动的事务:这类似于数据库启动时SMON 的作用。
在实例/崩
溃恢复时由于某个文件(或某些文件)不可用,可能会跳过一些失败的事务(即无法恢复),这
些失败事务将由SMON 来恢复。
例如,磁盘上的文件可能不可用或者未装载,当文件确实可用时,
SMON 就会由此恢复事务。
4、执行RAC 中失败节点的实例恢复:在一个Oracle RAC 配置中,集群中的一个数据库实例失
败时(例如,实例所在的主机失败),集群中的另外某个节点会打开该失败实例的重做日志文件,
并为该失败实例完成所有数据的恢复。
5、清理OBJ$:OBJ$是一个低级数据字典表,其中几乎对每个对象(表、索引、触发器、视图
等)都包含一个条目。
很多情况下,有些条目表示的可能是已经删除的对象,或者表示“not there”(不在那里)对象(“not there”对象是Oracle 依赖机制中使用的一种对象)。
要由SMON
进程来删除这些不再需要的行。
6、收缩回滚段:如果有设置,SMON 会自动将回滚段收缩为所设置的最佳大小。
7、“离线”回滚段:DBA 有可能让一个有活动事务的回滚段离线(offline),或置为不可用。
也有可能活动事务会使用离线的回滚段。
在这种情况下,回滚段并没有真正离线;它只是标记
为“将要离线”。
在后台,SMON 会定期尝试真正将其置为离线,直至成功为止。
3. RECO:分布式数据库恢复(Distributed Database Recovery)
RECO 会试图联系事务的协调器来发现协调的结果。
在此之前,事务会保持未提交状态。
当再次到达事务协调器时,RECO 可能会提交事务,也可能将事务回滚。
4. CKPT:检查点进程(Checkpoint Process)
CKPT 只是更新数据文件的文件首部,以辅助真正建立检查点的进程(DBWn)
5. DBWn:数据库块写入器(Database Block Writer)
1、数据库块写入器(DBWn)是负责将脏块写入磁盘的后台进程。
DBWn 会写出缓冲区缓存中的脏块,通
常是为了在缓存中腾出更多的空间(释放缓冲区来读入其他数据),或者是为了推进检查点(将在线重做日
志文件中的位置前移,如果出现失败,Oracle 会从这个位置开始读取来恢复实例)。
2、可以配置多个DBWn
3、异步:最好的情况下,DBWn 使用异步I/O 将块写至磁盘。
采用异步I/O,DBWn 会收集一批要写的块,并把
它们交给操作系统。
DBWn 并不等待操作系统真正将块写出;而是立即返回,并收集下一批要写的块。
当操
作系统完成写操作时,它会异步地通知DBWn 写操作已经完成。
这样,与所有工作都串行进行相比,DBWn
可以更快地工作。
在后面的“从属进程”一节中,我们还将介绍如何使用I/O 从属进程在不支持异步I/O
的平台或配置上模拟异步I/O。
4、DBWn 会做大量的分散写(scattered write)。
,LGWR 则是向重做日志完成大量的顺序写
(sequential write)。
分散写比顺序写慢多了。
6. LGWR:日志写入器(Log Writer)
LGWR 进程负责将SGA 中重做日志缓冲区的内容刷新输出到磁盘。
如果满足以下某个条件,就会做这
个工作:
1、每3 秒会刷新输出一次
2、任何事务发出一个提交时
3、重做日志缓冲区1/3 满,或者已经包含1 MB 的缓冲数据
7. ARCn:归档进程(Archive Process)
ARCn 进程的任务是:当LGWR 将在线重做日志文件填满时,就将其复制到另一个位置。
此后这些归档
的重做日志文件可以用于完成介质恢复。
8. 其他中心进程
1、自动存储管理后台(Automatic Storage Management Background,ASMB)进程:ASMB 进程
在使用了ASM 的数据库实例中运行。
它负责与管理存储的ASM 实例通信、向ASM 实例提供更新
的统计信息,并向ASM 实例提供一个“心跳”,让ASM 实例知道它还活着,而且仍在运行。
2、重新平衡(Rebalance,RBAL)进程:RBAL 进程也在使用了ASM 的数据库实例中运行。
向ASM
磁盘组增加或去除磁盘时,RBAL 进程负责处理重新平衡请求(即重新分布负载的请求)。
RAC 中特有的
1、锁监视器(Lock monitor,LMON)进程:LMON 监视集群中的所有实例,检测是否有实例失
败。
这有利于恢复失败实例持有的全局锁。
它还负责在实例离开或加入集群时重新配置锁和其
他资源(实例失败时会离开集群,恢复为在线时又会加入集群,或者可能有新实例实时地增加
到集群中)。
2、锁管理器守护(Lock manager daemon,LMD)进程:LMD 进程为全局缓存服务(保持块缓冲
区在实例间一致)处理锁管理器服务请求。
它主要作为代理(broker)向一个队列发出资源请
求,这个队列由LMSn 进程处理。
LMD 会处理全局死锁的检测/解析,并监视全局环境中的锁超时。
3、锁管理器服务器(Lock manager server,LMSn)进程:
4、锁(Lock,LCK0)进程:这个进程的功能与前面所述的LMD 进程非常相似,但是它处理所有
全局资源的请求,而不只是数据库块缓冲区的请求。
5、可诊断性守护(Diagnosability daemon,DIAG)进程:DIAG 只能用于RAC 环境中。
它负责
监视实例的总体“健康情况”,并捕获处理实例失败时所需的信息。