Oracle 体系结构学习

1 认识Oracle后台进程

Oracle数据库后台进程是Oracle数据库管理系统(DBMS)的核心组件,它们在后台运行,负责数据库的各种管理和维护任务。

主要包括以下几种:

SMON (System Monitor)

SMON负责数据库的恢复操作,如处理系统故障(例如,实例失败)。

当检测到数据库实例崩溃时,SMON会尝试恢复控制文件和数据文件的一致性。

PMON (Process Monitor)

PMON负责监控用户进程的状态,并在用户进程异常终止时进行清理工作。

它确保不会留下孤儿进程占用资源。

DBWn (Database Writer)

DBWn负责将缓冲区缓存中的脏数据写入数据文件。

它通过减少脏缓冲区的数量来提高性能,并保证数据的一致性和持久性。

LGWR (Log Writer)

LGWR负责将重做日志缓冲区中的日志条目写入到在线重做日志文件中。

这是保证事务持久性的关键部分,确保即使在系统崩溃的情况下,也能通过重做日志恢复数据。

CKPT (Checkpoint)

CKPT进程负责在数据库中创建检查点,以确保数据文件和在线重做日志的一致性。

检查点减少了恢复操作的时间,因为它允许数据库从最近的检查点开始恢复。

ARCn (Archiver)

ARCn负责将在线重做日志文件归档到指定的归档日志目录中。

前面5个是必须启动的;

这些不是在Windows服务里看到的哪些;

如何能看到这些进程和它们的状态呢;

在Windows任务管理器看不到;

Oracle数据库 在Windows平台运行时默认以单一 oracle.exe 进程运行。

这句话是网上的;

目前我任务管理器里看到的如下,包括我打开了SQL Developer,这可能还增加一个进程;

我没发现oracle.exe,这是不是版本的问题,我的是11g r2;

根据资料,用Oracle安装以后的Administration Assistant for Windows工具,可以查看Oracle的进程;

但是打开此工具,我的看不到什么,上图的上部是网上的,我的在电脑名下面只有性能监视器、Oracle主目录两项;

根据资料,执行如下图的SQL(需要SYSDBA权限),可以查看Oracle包含的进程的状态;

看一下它显示的,后台进程都是包含在ORACLE.EXE里;

sql 复制代码
SELECT s.sid, s.serial#, p.spid, s.username, s.status, s.osuser, s.machine, s.program
FROM v$session s, v$process p
WHERE s.paddr = p.addr;

2 Oracle内存结构学习

Oracle内存由2大部分组成:SGA(系统全局区),PGA(程序全局区)。

PGA不是实例的一部分,服务器进程启动时,才分配PGA。

SGA是数据库实例的一部分,数据库实例启动时,会首先分配系统全局区。

系统全局区包括几个重要的内存区;数据库高速缓存,重做日志缓存,共享池,大池,Java池。

2.1 共享池(Shared Pool)

共享池包括库高速缓存和数据字典高速缓存。

库高速缓存存储了最近使用过的SQL和PL/SQL语句。Oracle采用LRU算法管理库高速缓存。没有直接设置库高速缓存的指令,只能通过设置共享池的大小间接地更改。共享池是SGA的一部分,所以共享池不能超过SGA的大小。

数据字典高速缓存存储了数据文件、表、索引、列、用户、权限信息和其它一些数据库对象的定义。在SQL语句的解析阶段,需要这些信息来解析用户名和用户的访问权限。同样的,设置数据字典高速缓存的大小通过设置共享池的大小间接实现。