初识Oracle数据库体系结构

先来看张直观的图:


                                            oracle 11g  体系结构图

                        

理解Oracle体系结构要充分理解三个概念:数据库(database),数据库实例(instance),会话(session),一定不要把这三个概念弄混。

 

 

数据库的概念

(A)    物理存储结构由数据文件、控制文件、重做日志文件组成:

1.       数据文件(datafile)

   select * from dba_data_files;

数据文件包括存储表和索引数据,以及排序和散列等操作的中间结果。一个数据文件只能属于一个数据库,一个数据库可以包含多个数据文件。

2.       控制文件(controlfile)

   select * from v$controlfile;

控制文件记录了数据库的物理存储结构和其他控制信息,如数据库名称、创建数据库的时间戳、组成数据库的各个数据文件和重做日志文件的存储路径及名称、系统的检查点信息等。

控制文件的作用:

Oracle数据库打开时(mount到open阶段),必须先打开控制文件,从中读取数据文件和重做日志文件信息。如果控制文件损坏,就会是数据库无法打开,导致用户无法访问存储在数据库中的信息。

在实例恢复过程中,控制文件检查点信息决定Oracle实例怎样使用重做日志文件恢复数据库。

 

3.       重做日志文件(redo logfile)

        select * from v$logfile;

select * from v$log;

                重做日志文件记录了数据库所产生的所有变化信息。在实例或者介质失败时,可以用重做日志恢复数据库。

重做日志文件组存储数据库重做日志信息,这组重做日志文件被称作联机重做日志文件。每个数据库必须至少拥有两组重做日志文件。Oracle实例以循环写入的方式使用数据库的重做日志文件组。

在归档模式下,在发生日志文件切换后,填满的重做日志文件被复制到其他地方保存。这些日志文件副本被称作归档日志文件。

 

 

(B)逻辑结构由表空间(tablespace)、段(segment)、区间(extent)、数据块(data block)组成

 

一个表空间包含多个段,一个段包含多个区间,一个区间包含多个数据块。

 

表空间:

表空间是一个逻辑容器,它位于逻辑存储结构的顶层。表空间内的数据被物理存放在数据文件中。一个表空间可以包含一个或多个数据文件。但是一个数据文件只能属于一个表空间。

Oracle 11g系统默认创建的表空间有:

SYSTEM:系统表空间。用于存储整个数据库的数据定义信息。

SYSAUX:系统表空间的辅助表空间,用于存储一些组件和产品的数据,以减轻SYSTEM表空间的负载。

TEMP:临时表空间。用于存储SQL语句处理过程中产生的临时数据。

UNDOTBS1:UNDO表空间,Oracle数据库用它来存储还原信息,实现回滚等操作。

USER:默认的用户表空间。用于存储永久用户对象和数据。

 

段:

                段是占用存储空间的数据库对象,用于存储和隔离不同数据库对象的数据。

 

表段:即数据段。

索引段

回滚段:用于数据库还原信息

临时段

 

 

区间:

    区间是Oracle存储空间最小的分配单位。

 

数据块:

    数据块是Oracle最小的I/O单位。

 

 

Oracle数据库物理存储结构和逻辑存储结构关系如下图:


 

 

数据库实例(instance)

Oracle数据库实例由内存结构和后台进程组成。

 


 

 

 

1.       系统全局区SGA(system global area

(a)     数据缓冲区data buffer cache

为了减少数据库的物理I/O次数,提高性能,Oracle从磁盘数据文件检索数据之后或将数据块写入磁盘之前,都要将数据块缓存到数据缓冲区中。

Oracle数据库数据块可以使用8KB(标准块),2KB、4KB、16KB、32KB。数据缓存区也分为标准块缓存区和非标准块缓存区。

 

SQL> show parameter db_block_size

 

NAME                                 TYPE        VALUE

------------------------------------ -----------

db_block_size                        integer     8192

 

备注:保持池、循环池、默认池都属于data_buffer_cache

 

(b)     共享池(shared pool)

共享池大小有参数shared_pool_size参数指定,它又分为数据字典缓存、库缓存、服务器结果缓存。

数据字典缓存(dictionary cache):首次执行的SQL代码,服务器进程首先要解析代码,生成执行计划。在解析过程中需要检索SQL语句操作的数据库对象及其定义、用户和权限等信息。这些信息存储在数据库的数据库字典内。

库缓存(Library cache):用以缓存解析过的SQL语句的执行计划。服务器进行在执行SQL代码时,首先从库缓存查找其执行计划,如果找到,则重用该代码,这称为软解析或库缓存命中。否则进行硬解析。

服务器结果缓存:用于缓存SQL语句查询结果集合和PL/SQL函数的结果集。(缓存数据块)

 

(c)     重做日志缓冲区(redo log buffer)

服务器进程把执行数据修改(insert、update、delete)过程中产生的重做日志写入重做日志缓冲区,然后日志写入进程lgwr把日志缓冲区内的重做日志写入磁盘中的联机重做日志文件。

 

(d)     大池(Large pool)

大池是一个可选的内存区域,它是由large_pool_size参数设置,用于分配不使用于在共享池内分配的大块内存。如RMAN备份所需要的缓冲区、语句并行执行所使用的缓冲区。

 

(e)     JAVA池(java pool)

(f)      流池(stream pool)

 

关于SGA可以查询一个视图

select * from v$sga_dynamic_components;

 


 

 

2.       后台进程(background process)

 

(a)     进程监视进程PMON(process monitor)

l  监视其他后台进程、服务器进程、调度进程的运行情况。当它们异常中断时,重启这些进程或者终止实例运行。

l  在用户进程异常中断后,负责清理数据库缓冲区缓存,释放用户进程锁定的资源。

l  向正在运行的监听注册数据库实例。

 

(b)     系统监视进程SPOM (system monitor)

SMON负责大量系统级的清理工作:

l  实例启动时,如果需要,SMON执行实例恢复。

l  清理不在使用的临时段

l  合并字典管理表空间内的相邻空闲区

 

(c)     数据库写入进程DBWR ( database writer )

负责将SGA内数据缓冲区缓存中修改过的数据块写入数据文件。

 

(d)     日志写入进程 LGWR ( log writer )和归档进程ARCH

负责把日志缓冲区缓存的重做日志写入重做日志文件。

在归档模式下,在发生日志文件切换后,填满的重做日志文件被复制到其他地方保存。这些日志文件副本被称作归档日志文件。

 

(e)     检查点进程 CKPT ( checkpoint process )

在Oracle数据块内,检查点进程会定期启动,它把检查点信息写入控制文件和数据文件头部,并通知DBWn进程把脏数据写入数据文件。DBWn进程的运行又会启动LGWR进程将重做日志文件缓存区中的内容写入重做日志文件。

 

 

 

 

 

 

 

 

 

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

转载于:http://blog.itpub.net/28929558/viewspace-1172507/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值