今天看了一下伟大的oracle的系统结构,以自己的理解做个总结,主要从一些概念入手:
oracle实例其实就是= 内存分配 + 一组后台进程, 如果把Oracle比作一部汽车,instance相当于汽车的发动机一样,启动oracle前提应先启动instance..内存被分配,进程被启动
System Global Area
SGA是存储数据库进程共享的数据库信息的内存区域。它包含Oracle Server 数据和控制信息。分配在Oracle Server驻留的计算机虚拟内存中。SGA包含如下内存结构:
• 共享池(shared pool) 用来存储最近执行的SQL语句、编译后的代码、执行计划以及最近使用的数据字典(data dictionary)的数据。这些SQL语句可能是被用户递交的也可能是存储过程调用。SHARED_POOL_SIZE可以调整共享池的大小。
• 数据缓冲区(database buffer cache)用来存储最近从数据文件中读写过的数据。DB_BLOCK_SIZE可以调节缓存区的大小,FB_BLOCK_BUFFERS 可以调节缓存区的缓冲数目。
• 重作日志缓冲区(redo log buffer)用来记录服务或后台进程对数据库的操作。 Size defined by LOG_BUFFER
另外在SGA中还有两个可选的内存结构:
• Java pool: 用来存储Java代码。
• Large pool: 用来存储不与SQL直接相关的大型内存结构。例如:在备份和恢复时的数据拷贝。
Background Processes
–• Database Writer (DBW0) 负责将数据的更改由database buffer cache写到data files 。
–• Log Writer (LGWR) 负责将数据更改记录由redo log buffer写到redo log files.
–• System Monitor (SMON) 检查数据库的一致性,必要的情况下,在数据库打开时执行恢复。
–• Process Monitor (PMON)用户进程失败时,进程监控程序实现进程恢复。
–• The Checkpoint Process (CKPT) 负责更新数据库的控制文件( control files )中的状态信息。在数据缓存永久写入数据库时。 )