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里;
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语句的解析阶段,需要这些信息来解析用户名和用户的访问权限。同样的,设置数据字典高速缓存的大小通过设置共享池的大小间接实现。