oracle的体系结构解析

柔光的暖阳◎ 2022-06-18 07:18 565阅读 0赞

先送上一幅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和PGA的总结:

SGA:

SHARE POOL(共享池)
用如下命令可以调整:
ALTER SYSTEM SET
SHARED_POOL_SIZE=64M

LIBRARY CACHE(库高速缓存)
1存储最近使用的SQL和PL/SQL语句信息
2包括SHARED SQL和SHARED PL/SQL
3用LRU算法管理
4大小由SHARE POOL大小决定

DATA DICTIONARY CACHE(数据字典高速缓存)
1数据库中最近使用的定义的集合
2包含数据库文件,表,索引,列,用户,权限和其他的数据库相关信息
3在语法分析阶段,服务器进程会在数据字典中查找用于对象解析和验证访问的信息
4将数据字典信息高速缓存到内存中,可缩短查询和DML的响应时间
5大小由共享池的大小决定

DATABASE BUFFER CACHE(数据缓冲区高速缓存)

1存储已从数据文件检索到的数据的复本
2大幅提高读取和更新数据的性能
3使用LRU算法管理
4主块的大小由DB_BLOCK_SIZE确定

REDO LOG BUFFER(重做日志缓冲区)

1.记录对数据库数据块作的全部更改
2.主要用来恢复
3.其中记录的更改被称作重做条目
4.重做条目包含用于重新构建或重做更改的信息
5.大小由LOG_BUFFER定义

LARGE POOL(大型池)

1 SGA可选的内存区
2 分担了共享池的一部分工作
3 用于共享服务器的UGA
4 用于I/O服务器进程
5 备份和恢复操作或RMAN
6 并行执行消息缓冲区(前提PARALLEL_POOL_SIZE=TRUE)
7 不使用LRU列表
8 大小由LARGE_POOL_SIZE确定

Java POOL(Java池)

1 存储JAVA命令服务分析要求
2 安装和使用JAVA时必须的
3 大小有JAVA_POOL_SIZE确定


PGA:

PRIVATE SQL AREA(专用SQL区)
专用SQL区的位置取决于为会话建立的连接类型。在专用服务器环境中,专用SQL区位于各自服务器进程的PGA中。在共享服务器环境中,专用SQL区位于SGA中。
管理专用SQL区是用户进程的职责。用户进程可以分配的专用SQL区的数目始终由初始化参数OPEN_CURSORS来限制。该参数的缺省值是50。

PERSISTEN AREA(永久区)
包含绑定信息,并且只在关闭游标时释放

RUNTIME AREA(运行时区)
在执行请求时的第一步创建。对于INSERT、UPDATE和DELETE命令,该区在执行语句后释放,对于查询操作,该区只在提取所有行或取消查询后释放。

SESSION MEMORY(会话内存)

包含为保留会话变量以及与该会话相关的其它信息而分配的内存。对于共享服务器环境,该会话是共享的而不是专用的。

SQL WORK AREAS(SQL工作区)

用于大量占用内存的操作,如排序、散列联接、位图合并和位图创建。工作区的大小可进行控制和调整


下面是后台进程总结:

DBWn:

DBWn延迟写入数据文件,直到发生下列事件之一:

•增量或正常检查点
•灰数据缓冲区的数量达到阈值
•进程扫描指定数量的块而无法找到任何空闲缓冲区时
•出现超时
•实时应用集群(Real Application Clusters, RAC)环境中出现ping请求
•使一般表空间或临时表空间处于脱机状态
•使表空间处于只读模式
•删除或截断表
•执行ALTER TABLESPACE表空间名BEGIN BACKUP操作

LGWR:

LGWR在下列情况下执行从重做日志缓冲区到重做日志文件的连续写入:

•当提交事务时
•当重做日志缓冲区的三分之一填满时
•当重做日志缓冲区中记录了超过1 MB的更改时
•在DBWn将数据库缓冲区高速缓存中修改的块写入数据文件以前
•每隔三秒

SMON:

例程恢复
–前滚重做日志中的更改
–打开数据库供用户访问
–回退未提交的事务处理
•合并空闲空间
•回收临时段

PMON:

进程失败后,后台进程PMON通过下面的方法进行清理:
•回退用户的当前事务处理
•释放当前保留的所有表锁或行锁
•释放用户当前保留的其它资源
•重新启动已失效的调度程序

CKPT:

•在检查点发信号给DBWn
•使用检查点信息更新数据文件的标头
•使用检查点信息更新控制

启动检查点的原因如下:
•确保定期向磁盘写入内存中发生修改的数据块,以便在系统或数据库失败时不会丢失数据
•缩短例程恢复所需的时间。只需处理最后一个检查点后面的重做日志条目以启动恢复操作
•确保提交的所有数据在关闭期间均已写入数据文件
由CKPT写入的检查点信息包括检查点位置、系统更改号、重做日志中恢复操作的起始位置以及有关日志的信息等等。
注:CKPT并不将数据块写入磁盘,或将重做块写入联机重做日志。

ARCn:

•可选的后台进程
•设置ARCHIVELOG模式时自动归档联机重做日志
•保留数据库的全部更改记录


看了这么多,以上都是我东拼西凑来的。我发最后一个简单明了的总结!
1、系统文件

  1. parameter file 参数文件
  2. password file 密码文件
  3. archived log file 归档日志文件

2、数据库文件

  1. data file 数据文件
  2. control file 控制文件
  3. redo log file 日志文件

3、oracle实例(orcl,XE)
a、SGA 全称( system global area)

  1. 1shared pool 共享池
  2. --> library cache 高速缓冲区 --> data dictionary cache 数据字典高速缓冲区 2database buffer cache 数据库缓冲区

3、java pool java池
专门为java程序开发的一部分

4、redo log buffer 日志缓冲区

5、large pool 大池

b、PGA(program global area)

  1. user process 客户端连接会话
  2. server process 服务器端连接会话

行了完结吧。

发表评论

表情:
评论列表 (有 0 条评论,565人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Oracle体系结构

    Oracle Server由例程(Instance)和数据库(Database)两部分组成。 数据库是一组OS文件的集合,它由数据文件、控制文件和重做日志组成。 例程是由一