Oracle由instance 和 database 组成。
instance 是数据库启动时初始化的一组进程和内存结构
database 指的是用户存储数据的一些物理文件
整体来看,用户通过用户进程与服务器进程进行连接来操作数据库(并非用户进程直接操作数据库)用户会话相关的内存区域为PGA(program global area)。然后服务器进程与instance(实例)进行交互。实例再对数据库物理文件进行交互。
在SGA中必须包含的内存结构有:共享池(shared pool)、数据库缓冲区缓存(database buffer pool)、日志缓冲区(redo log buffer pool)
可能包含的池有:large pool、java pool、stream pool等
其中,共享池中包含了 library cache、data dict cache。 library cache主要包含了最近使用的SQL语句,LRU的方式存储,可以用于快速执行SQL语句。而data dict cache 又称row cache ,是用于SQL解析阶段使用的缓存,存储了用户权限等信息。
数据库缓冲区用于存放从数据文件中读取的的数据块拷贝的区域。Oracle进程如果发现需要访问的数据块已经在buffer cache中,就直接读写内存中的相应区域,而无需读取数据文件,从而大大提高性能。Buffer cache对于所有oracle进程都是共享的,即能被所有oracle进程访问。
日志缓冲区存入重做日志的内存区域。
主要后台进程:
DBWR数据库写进程:把database buffer cache中的修改的数据写回数据库。
LGWR 日志写进程:把redo log buffer 的内容写入到log file中。
SMON系统监控进程:在系统启动过程中,有需要recover,该进程负责roll back。还会完成系统里对自由空间的整理、临时栈的清空。
PMON进程监控进程:回滚被异常终止或强制终止的事务。
CKPT:数据库里用于同步,会强制将内存中的数据写入文件。
ARCH 归档进程:自动备份在线日志,需要在归档模式下。(可选)
另一种说法:
DBWR:负责将更新的数据从数据库缓冲区高速缓存写入数据文件。
LGWR:将重做日志缓冲区中的更改写入在线重做日志文件。
SMON:检查数据库的一致性如果有必要还会在数据库打开时启动数据库的恢复。
PMON:负责在一个Oracle进程失败时清理资源。
物理结构:
Data file 数据文件:数据库中的数据
Control file控制文件:记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等
Redo log file 日志文件