Oracle服务器结构详解(最新推荐)

宅男工程师
• 阅读 3

一、Oracle服务器主要组成
实例(系统全局区SGA、后台进程)
数据库
程序全局区(PGA)
前台进程
Oracle服务器结构详解(最新推荐)
二、系统全局区SGA
Oracle服务器结构详解(最新推荐)
1.高速数据缓冲区
用来存放Oracle系统最近访问过的数据块,经常或者最近被访问的数据块会被放置到高速数据缓冲区的前端,不经常被访问的会被放置到后端
Oracle服务器结构详解(最新推荐)
2.共享池
存储最近执行过的SQL语句和最近使用过的数据定义

共享池的大小由SHARE_POOL_SIZE决定

共享池包含:

库高速缓冲区:包含SQL语句文本,分析代码和执行计划

字典高速缓冲区:包含表,列和其他对象定义和权限

3.Redo buffer(重做日志缓冲区)
跟踪服务器和后台进程对数据库所做的更改,它的字节大小由LOG_BUFFER 参数定义。记录被更改的块、更改位置以及重做条目中的新值;重做条目不区分被更改块的类型,它只记录块中哪些字节发生了更改。重做日志缓冲区连续使用,而且一个事务处理所做的更改可能会与其它事务处理的更改交叉存取;它是在已满后可以重新使用的循环缓冲区,但是只有在所有旧的重做条目都记录在重做日志文件之后才能使用。
COMMIT提交处理:

服务器进程随同系统更改号(SCN)一起在重做日志缓冲区中放置一个提交记录。
LGWR 向重做日志文件中连续写入直到提交记录含提交记录的所有重做日志缓冲区条目。这之后,Oracle 服务器就能够保证即使存在实例失败也不会丢失更改。
通知用户COMMIT 命令已完成。
服务器进程记录信息以指出事务处理已完成并且可以释放资源锁。

4.大共享区
存储不与SQL语句处理直接相关的大型内存结构,如在备份和还原操作中复制的数据块。

5.固定SGA
存储Java代码

三、用户进程全局区-PGA
又称程序全局区,可以把代码、全局变量和数据结构都存储在其中,每个Oracle服务器进程只拥有自己的那部分PGA资源

PGA包含:

私有SQL区

会话区

四、服务器进程
处理用户会话过程中的SQL语句和SQL Plus命令

五、后台进程

1.数据库写入程序(DBW0)
数据库写入程序将灰数据缓冲区从数据库缓冲区高速缓存写入数据文件。它确保有足够数量的空闲缓冲区(即当服务器进程需要读取数据文件中的块时可以覆盖的缓冲区) 在数据库缓冲区高速缓存中可用。由于服务器进程只在缓冲区高速缓存中进行更改,因此数据库性能得到改善,而且DBW0 延迟写入数据文件直到发生下列事件之一:

灰数据缓冲区的数量达到阈值
当进行扫描而无法找到任何空闲缓冲区时进程扫描了指定数量的块
出现超时(每三秒)
出现检查点(检查点是使数据库缓冲区高速缓存与数据文件同步的一种方法)

2.日志写入程序(LGWR)
将重做日志缓冲区中注册的更改写入重做日志文件。
LGWR 在下列情况下执行从重做日志缓冲区到重做日志文件的连续写入:

当提交事务处理时
当重做日志缓冲区的三分之一已满时
当重做日志缓冲区中记录了超过1 MB 的更改时
在 DBW0 将数据库缓冲区高速缓存中修改的块写入数据文件以前因为恢复操作需要重做,所以LGWR 只在重做写入磁盘后确认COMMIT 命令

3.系统监控程序(SMON)
检查数据库的一致性.果Oracle 实例失败,那么SGA 中尚未写入磁盘的所有信息都会丢失。实例丢失后,后台进程SMON 在数据库重新打开时自动执行实例恢复。恢复实例需要进行以下步骤:

前滚以恢复尚未记入数据文件但已经记入联机重做日志中的数据。由于实例失败过程中SGA 的丢失,这些数据尚未写入磁盘。在这个进程中,SMON 读取重做日志文件并将重做日志中记录的更改应用到数据块中。由于所有提交的事务处理都已被写入重做日志,因此该进程完全恢复这些事务处理。
打开数据库以允许用户登录。未被未恢复事务处理锁定的任何数据都立即可用。
回退未提交的事务处理。它们由SMON 回退,或在访问锁定的数据时由单个服务器进程回退。

SMON 也执行一些空间维护功能:

联合或合并数据文件中空闲空间的邻近区域。
回收临时段将它们作为数据文件中的空闲空间返回。临时段用于在SQL 语句处理过程中存储数据。

4.过程监视器(PMON)
负责在一个Oracle 进程失败时清理资源,进程失败后,后台进程PMON 通过下面的方法进行清理:

回退用户的当前事务处理
释放当前保留的所有表锁或行锁
释放用户当前保留的其它资源

5.检查点进程(CKPT)
负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Wesley13 Wesley13
3年前
RAC环境单实例启动数据库收到ORA
     在RAC环境中,如果你在没有启动节点的集群服务的情况下单实例启动数据库,将收到类似如下的报错:\oracle@rhel1u01\$sqlSQL\Plus:Release10.2.0.5.0ProductiononTueApr215:00:272013Copyright(
Wesley13 Wesley13
3年前
oracle数据泵的学习
DataPump工具DataPump    从oracledatabase10g开始引入了datapump(数据泵)工具,它提供了一种基于服务器的数据导出导入使用程序。所有的datapump都作为一个服务器进程,数据不再必须由一个客户程序处理。DataPump工具的导出和导入实现Oracle数据库之间数据的传输。 
Wesley13 Wesley13
3年前
MySQL 内核线程简要分析
若接触过Oracle的学者,想必应该都知道Oracle的体系结构,Oracle体系结构中涉及的进程诸如:PMON、SMON、LGWR、CKPT、DBWR\_N等等那MySQL里面的线程是怎么样的呢?(因为MySQL是单进程多线程结构),带着这个疑问,进行了查阅资料及调试,总结为:MySQL启动时,默认是23个线程。实验环境Linux:CentO
Wesley13 Wesley13
3年前
oracle调用java代码
  内容主要包括:java开发,打包java程序成jar文件,上传jar文件到Oracle所在系统,Oracle导入jar文件中java类到数据库中,Oracle根据导入java类创建函数,Oracle操作函数。  用到的软件:Oracle数据库,Oracle数据库安装在Linux操作系统上;java用IDEA开发;上传jar文件用winSCP;操作Or
Wesley13 Wesley13
3年前
Oracle:如果表存在
我正在为Oracle数据库编写一些迁移脚本,并且希望Oracle有类似MySQL的IFEXISTS结构。具体来说,每当我想在MySQL中删除表时,我都会这样做DROPTABLEIFEXISTStable_name;这样,如果表不存在,DROP不会产生错误,脚本可以继续。Oracle是否有类似的机制?
Wesley13 Wesley13
3年前
也谈Oracle异常: ORA
也谈Oracle异常:ORA06502:PL/SQL:数字或值错误:字符串缓冲区太小参考文章:(1)也谈Oracle异常:ORA06502:PL/SQL:数字或值错误:字符串缓冲区太小(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cod
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
操作Redis
redis也是一个数据库,它的存储以keyvalue的方式存放,比如:!(https://oscimg.oschina.net/oscnet/65ce59c339672e02554ab5db30f1611ad41.png)a.关系型数据库比如:  mysql、oracle、sqlserver、db2、sqlite数据库,
Wesley13 Wesley13
3年前
oracle buffer cache深度分析:概念以及内存结构
本文首先具体介绍了Oracle中buffercache的概念以及所包含的内存结构。然后结合各个后台进程(包括DBWRn、CKPT、LGWR等)深入介绍了oracle对于buffercache的治理机制,并具体解释了oracle为什么会采用现在的治理机制,是为了解决什么问题。比如为何会引入toUCh次数、为何会引入增量检查点等等。最后全面介绍了有关buf
Wesley13 Wesley13
3年前
Oracle之内存结构(SGA、PGA)
一、内存结构!(https://oscimg.oschina.net/oscnet/1e4726bdcc68d8bce6b31c881f0d055c202.jpg)(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fblog.itpub.net%2Fbatch.downlo