对于一个数据库系统来说,假设这个系统没有运行,我们所能看到的和这个数据库相关的无非就是几个基于操作系统的物理文件,这是从静态的角度来看,如果从动态的角度来看呢,也就是说这个数据库系统运行起来了,能够对外提供服务了,那就意外着数据库系统启动了自己的一个实例,综合以上2个角度,Oracle如何定义上述描述呢?
我们来引入第一个概念,Oracle服务器,所谓Oracle服务器是一个数据库管理系统,它包括一个Oracle实例(动态)和一个Oracle数据库(静态)。Oracle实例是一个运行的概念(如操作系统的进程),提供了一种访问,Oracle数据库的方式,始终打开一个,并且只能打开一个 O racle数据库, O racle实例有SGA和一些后台服务进程组成,在后台服务进程当中,DBWn PMON CKPT LGWR SMON是必备的后台进程,而ad queue、rac、shared server、ad replication则是可选的,之所以可选,要们是因为离开它Oracle也能正常运行,要么是一些高级的功能才可以用得到。
O racle数据库是一个被统一处理的的数据的集合,从物理角度来看包括三类文件数据文件,控制文件,重做日志文件。从逻辑角度来看, O racle数据库至少包含一个表空间,表空间至少包含一个段,段由区做成,区有块组成。需要注意的是表空间可以包含若干个数据文件,段可以跨同一个表空间的多个数据文件,区只能在同一个数据文件内。
O racle还设计了其他的关键文件用来为整个系统服务,如配置文件、密码文件、归档日志文件,还有还有用户进程和服务进程,现在可以简单理解下执行SQL语句就要用到这2个进程。
|
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 模式时自动归档联机重做日志 • 保留数据库的全部更改记录 |
最后,举一个用户提交SQL语句的的例子来结束本文,如果用户想提交SQL语句,那么首先你必须要连接到Oracle实例,连接到 Oracle 实例有三种途径:如果用户登陆到运行 Oracle 实例的操作系统上,则通过进程间通信进行访问2C/S结构访问3三层结构。发起连接的应用程序或工具通常称为用户进程,连接发起后,Oracle服务器就会创建一个进程来接受连接,这个进程就成为服务进程,服务器进程代表用户进程与Oracle实例进行通信,在专用服务器连接模式下,用户进程和服务进程是1对1的关系,在共享服务器模式下,多个用户进程可能共享一个服务进程。当服务器进程开始和Oracle实例进行通信时,一个会话就被创建了。显然处理一个查询要经过语法分析、绑定、执行、提取等阶段。
