一个完整的oracle服务包括一个oracle instance和一个oracle database。前者主要包括内存结构和一些process,后者主要涉及一些存储方面的结构。
oracle的内存结构主要包括SGA(共享内存区)和PGA(program global area)。SGA是在oracle instance起的时候就预分配好的,主要包括以下几个部分:
shared pool:分别dictionary cache和library cache,前者主要存放数据字典的信息,后者主要存放一些sql语句和他们的执行计划等信息。
database buffer cache:主要存放数据块
log buffer:主要存放redo log entries
large pool:一般用于一些需要分配比较大内存的任务,如用于备份或恢复,或在共享服务器模式下存放一部分用户session的信息。这是一个可选的区域。
java pool:好象是用于存放一些与java代码相关的内容,具体没有研究过。
stream pool:用于oracle stream
在oracle 10g中,可以设置sga_target值,为sga分配一个总共的值,由系统自动调整各个部分的值。
oracle的process:
有user process和server process之分。user process为发起连接请求的进程,而server process负责与数据库实例进行交互,为user process的请求服务。oracle的连接模式有专用服务器(dedicated server)和共享服务器(shared server)两种模式。两者的差别在于,前者一个server process只为一个user process服务,而后者一共server process服务多个user process。一般共享服务模式适用于那些资源较紧张的系统。在这种模式下,PGA中的部分内容被存放在SGA中,但总的内存使用量是减少的。在我接触过的数据库服务器中,大多是采用专用服务器模式。
后台进程(background process)是在数据库实例启动时启动的一系列后台进程,主要用于数据库的各种管理。比较重要的几个后台进程有:
SMON:用于在数据库实例crash时执行恢复操作
PMON:用于在进程失败时进行清理和资源释放
DBWn:用于将database buffer cache中的脏块写入数据文件中
LGWR:将log buffer中的redo entries写入redo文件
CKPT:用于在数据文件头和control文件中记录最近的检查点(checkpoint)
ARCn:用于将redo文件中的内容写到archive文件中
其中SMON进程是最重要的,当我们使用shutdown abort也无法关闭数据库时,kill掉SMON进程后一般其他进程就也被kill掉了
数据库存储结构:
一个oracle database由以下三部分文件组成:
control文件:在数据库实例mount数据库时打开control文件。control文件记录的主要是数据库的物理存储结构,包括数据库有哪些数据文件、redo文件等。
数据文件:顾名思义存放的是数据库中最关键的数据。
online redo文件:redo文件记录的是数据库的更新日志。它主要用于实例的恢复。当数据库实例crash时,内存中的数据全部丢失,数据库重启时,可以根据redo文件将数据库恢复到最近的一个检查点,然后可以再根据回滚段中的内容回滚未提交的事务。
除此之外,还有一些文件虽然不属于oracle database的范畴,但对于维持数据库的正常运行也至关重要。主要包括以下几部分:
参数文件:参数文件用于在数据库启动时指定一些相关参数的值。参数文件有pfile和spfile两种。前者是文本文件,可以用编辑器手工修改。后者是二进制文件。9i以后,推荐用spfile启动数据库,它支持动态修改数据库参数,即在数据库运行过程中,可以使用alter system命令同时修改内存和spfile中参数的值(仅限于动态参数,对于静态参数,可用alter system ... scope=spfile命令修改spfile中的值,重启后生效),在数据库重启后该参数修改仍然生效。而如果使用pfile启动,对于动态参数的修改,首先必须使用alter system 命令在内存中修改,其次还需要手工编辑pfile文件。比较麻烦。
密码文件:密码文件主要用于保证具有sysdba权限的用户可以远程访问数据库,并对数据库进行起停操作。
归档日志文件:归档日志文件其实是redo文件的脱机备份。redo文件一般有几组,在数据库运行过程中是循环使用的,因此前面的组势必会被后面的组覆盖掉。如果打开数据库归档,数据库就会将redo文件中的内存保存到脱机的归档日志文件中。这样,如果数据库发生了介质损坏或文件丢失,只要有备份以及其后所有的归档日志文件,就可以进行是数据库恢复。
数据库逻辑结构:
tablespace:每个数据库在逻辑上被分为几个表空间。每个表空间由一个或多个数据文件组成。其中,system表空间主要用于存放数据字典信息,相当关键。而sysaux表空间是oracle10g新增的表空间,它主要用于存放一些与oracle的组件相关的辅助信息。
segment:数据库的对象一般以segment的方式存储在数据库中,如一张表,一个索引,一张分区表的一个分区等等。
extent:一个segment由一个或多个extent组成。extent是给segment分配存储的最小单位。一个extent一般由一些连续的block组成。
block:data block是数据库读写的最小单位。一般选择默认的8KB即可。对于主要用于批量的系统,可以选择16KB的block size。数据库的block size在建库时决定,一旦决定就无法更改。
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8558093/viewspace-973606/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8558093/viewspace-973606/