ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle学习必看(oracle结构)

oracle学习必看(oracle结构)

原创 Linux操作系统 作者:junnylove 时间:2009-06-23 14:35:31 0 删除 编辑

oracle学习必看(oracle结构)

1、Oracle Overview
先从一副图开始:

这幅图简单明了的展现了Oracle的整体架构。

整个架构由上下两部分构成,也代表了Oracle数据库服务器(Oracle Database Server)的两部分:Oracle实例(Oracle Instance)和Oracle数据库(Oracle Database)。

这里有必要区分三个术语:Oracle数据库服务器,Oracle实例和Oracle数据库。Oracle数据库服务器只一个数据库管理系统,提供了综合的,集成的方法来管理信息,包括数据库实例和数据库两部分;Oracle实例是访问数据库的一种方法,通常只打开一个数据库,包括了内存结构和后台进程结构。可以允许多个实例对应一个数据库,典型的情况下是一个实例对应一个数据库,但在集群情况下,即Real Application Cluster(RAC),则是多个实例对应一个数据库。用户连接到服务器,则指的是连接到实例。Oracle数据库则主要包括了一些文件,主要有数据文件、控制文件和重做日志文件。

2、Oracle实例

Oracle实例主要包括了内存块(SGA和PGA)和一些后台进程,后面会有详细介绍;

2.1、Oracle实例内存结构
SGA (System Global Area):SGA是在Oracle实例启动的时候分配的全局共享的内存,是Oracle实例的基本组成部分,它由以下内存区域组成的:Shared Pool, Database Buffer Cache, Redo log Buffer, Java Pool, Large Pool。在sql命令行下运行命令Show sga;则会输出注入一下内容:

Total System Global Area  322961408 bytes

Fixed Size              1219208 bytes

Variable Size            100664696 bytes

Database Buffers        218103808 bytes

Redo Buffers           2973696 bytes

SGA是一个连续分配的内存区,是动态变化的,由参数SGA_MAX_SIZE指定最大值,以granules为单位进行分配,如果SGA小于128M,则granules = 4M,如果SGA大于128M,则granules = 16M,使用语句select component,granule_size from v$sga_dynamic_components;可以查看granules的情况。

Shared Pool :存放了最近执行的SQL语句,最近使用的数据定义语句。包括两部分重要的性能相关的内存结构:Library Cache和Data Dictionary Cache。由参数SHARED_POOL_SIZE指定最大值。Library Cache存放最近使用的经过编译的SQL和PL/SQL语句,使得最常用的语句的共享成为可能,使用LRU算法进行交换;Data Dictionary Cache存放了最近使用的数据库中的定义,包含了对数据文件、表、索引、列、用户、权限和其他数据库对象的信息。在SQL语句的解析阶段,服务器进程先到数据字典中去查看,来验证。将数据字典的信息缓存到内存中来快速响应查询和DML。

Dataase Buffer Cache :保存了从数据文件中渠道的数据块的副本,当你查询和更新数据时可以显著提高性能,使用LRU算法进行交互,由参数DB_CACHE_SIZE指定最大值。包括了DB_CACHE_SZIE, DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE三部分,使用DB_CACHE_ADVICE参数来设定是否收集相关信息,统计信息将会放在动态视图V$DB_CACHE_ADVICE中。

Redo Log Buffer :记录了对数据块所作的所有修改,主要用于恢复数据库。由LOG_BUFFER参数指定最大值。

Java Pool:可选内存区,主要是为java调用服务的,如果安装和使用java则是必须的。由参数指定JAVA_POOL_SIZE指定;

Large Pool:主要用于处理一些额外的工作,比如使用RMAN来备份恢复数据库时需要用到Large Pool,再例如进行I/O处理时也会用到,由参数LARGE_POOL_SIZE指定。

PGA:在为每个连接到数据库的用户进程分配的内存。当用户连接进程创建时就分配,断开连接就释放。
 

2.2、Oracle实例进程结构
Oracle实例中的进程分为三种:后台进程、服务器进程和客户端进程。后台进程是专注于数据处理的核心进程,服务器进程其实也运行在后台,负责处理客户端和数据库的连接;客户端进程则是为了连接数据库而创建。一个比喻可以用来表示这三个进程的关系:Oracle实例是一个工厂的话,后台进程就是工厂中的工人,从事具体的生产工作,服务器进程是工厂的销售人员,负责和客户打交道,用户进程则是客户,提交任务,向工厂下订单,该订单由销售人员处理后交给工人来完成。

Oracle实例的进程中,有5个必须的进程和其余若干可选的进程。在linux下使用命令ps –ef | grep oracle可以查看oracle相关的进程,其中一组进程如下:


Oracle的后台进程命名也是比较规范的,形式就如ora_XXX_。五个必须的进程是ora_DBWn_,ora_PMON_,ora_CKPT_,ora_LGWR_,ora_SMON_

其中n表示序号,即多个同类进程存在时,以添加序号命名。

Ora_DBWn_:最繁忙的进程,负责将SGA中Database Buffer Cache保存的内容写入到Data Files中去。有多种触发条件,比如检查点、无空闲的缓存、超时等等;

Ora_SMON_:系统监控器,进程实例回复,为用户访问打开数据库,回滚未提交的食物,管理空闲空间,释放临时的segments,就像数据库实例中的清洁员一样;

Ora_PMON_:进程监控器,回滚事务,释放锁或其他资源等等,也像清洁员;

Ora_LGWR_:将Redo Log Buffer中的内容写入到Redo Log Files中去,同意有很多触发条件,在DBWn进程执行任务之前执行;

Ora_CKPT_:在检查点发信号给DBWn,升级数据文件头和控制文件的检查点信息。

 

其他还有一些可选的进程,如ARCn、LMNn、QMNn、CJQ0、LMON、RECO、Dnnn、LMS、Snnn、LCKn、Pnnn。其中ARCn是比较重要的,它在ARCHIVELOG模式被设置时,自动归档在线重做日志;保存对数据库所作的所有修改记录。

3、Oracle数据库
Oracle数据库则主要包括了一些文件,这些文件是数据最终存放的地方,主要有数据文件、控制文件和重做日志文件。

3.1、Oracle数据库的物理结构
Oracle数据库的物理结构中包含了多种文件,三种基本的文件类型是数据文件、控制文件和重做日志文件。此外还有参数文件、密码文件、备份文件、归档重做日志文件、Alert日志和Trace文件。

数据文件是存储数据的;操作数据文件,访问数据库,这些操作就是由控制文件来协调的;重做日志文件记录了数据库的改变,以便进行数据库的恢复,能够恢复数据文件。它们的路径是\oradata\orcl(是oracle的主目录)。


参数文件规定了oracle的一些基本的初始参数,参数文件也有多种类型,后面会详细介绍。

归档重做日志文件和重做日志文件是相辅相成的,重做日志文件的容量满之后,归档进程就会把它们放到归档日志文件中去。

密码文件存放了用户连接数据库时需要用到的用户名和密码。

Alert日志和Trace文件则是在数据库实例运行时,如果遇到警告或者错误,这些信息就会被写到这两个文件中,一般可以在目录\admin\orcl下的bdump或者udump下面找到这些文件。

备份文件则包含了以上文件的备份。

3.2、Oracle数据库的逻辑结构
下图展示了oracle数据库的逻辑结构。一个oracle服务器上只有一个oracle数据库;一个oracle数据库可以由多个tablespace组成;一个tablespace可以由多个segment组成;一个segment可以由多个extent组成;一个extent则由多个连续的blocks组成。Oracle数据库的一个block对应于操作系统磁盘上的一个或多个block,磁盘上的一个block对应了内存中的一页。Oracle数据库block的大小由参数DB_BLOCK_SIZE指定,通常我们看到DB_BLOCK_SIZE=8192K。一个tablespace可以由多个datafile组成,一个segment也可以横跨多个datafile,但是extent就不能跨datafile。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8404772/viewspace-607270/,如需转载,请注明出处,否则将追究法律责任。

下一篇: ORACLE RAC原理
请登录后发表评论 登录
全部评论

注册时间:2009-06-22

  • 博文量
    36
  • 访问量
    88079