当前位置:文档之家› 概述 Oracle 11g 数据库体系结构

概述 Oracle 11g 数据库体系结构

人的一生要想事事皆精,堪比登天之难。如若放手一搏,取一技之长,亦并非难事!程默

前言:
自第一份工作2011年05月至今三年有余,这段过程中也一直与数据库打交道,近日得闲写一篇文字描述为主数据库的体系结构。
(工作中接触最多的为Oracle 数据库,以下简介Oracle数据库体系结构 参考资料为《OCP/OCA 认证考试指南全册》)

1.Oracle公司具有哪些产品系列,这些产品的用途又是什么?
产品系列可概括为3类,Oracle 服务器系列、Oracle开发工具、Oracle 应用程序。
Oracle服务器系列具有,数据库服务器、应用服务器、企业管理器,共同组合成oralce网格计算体系组件,网格就是"虚拟化"的意思。三者关系为数据库服务器用于存储数据,应用服务器提供最终用户请求的服务的基础设施,企业管理器对应的产品给管理员提供管理界面。
Oracle开发工具有,sql*plus、sql developer、pl/sql 等还有些第三方工具 navicat for Oracle等。
Oralce应用程序具有,两套核心产品一套为Oracle E-Business Suite 是基于账务处理引擎的应用程序,属于金融应用服务。另一套Oracle Collaboration Suite 是办公自动化工具。

2.什么是实例与数据库,它们之间的关系?
Oracle 数据库是存放在磁盘上的一组文件,文件的大小数量理论上没有规定的限制,因此数据的的大小也没有限制。文件一般分为 控制文件,重做日志,数据文件。Oracle 实例是一组进程和内存结构,存在于CPU上和服务器节点与内存中,可以对它进行启动与停止。用户通过实例建立会话,由实例管理数据库的所有访问。实例分为单实例体系与分布式体系。单实例体系结构表示为,只用一个实例打开对应磁盘上存储的数据库,实例和数据库文件应属在同一台机器上。分布式体系结构可为3类, a.RAC(实时应用群集),多个实例打开一个数据库。b.流,多个Oracle服务器之间传播数据。c.数据保护,主数据库更新备用数据库。分布式体系的整合使用,可使数据达到 100%正常运行时间和0%数据丢失的目标。

据此结论:通常说的链接数据库,其实是链接该数据库的实例,并不能直接联系数据库。并将链接上Oracle数据库的实例称为Oracle服务器。
在此对数据库实例启动命令做补录,实例的构建到可用分为三个步骤,nomount、mount、open,只有在open状态下才称为链接上数据库。 当处在nomount模式下时,实例已构建后台进程通过初始参数文件已在内存中构建SGA与部分后台进程,处于该状态下可读取控制文件,然后进入mount模式。当处在mount模式下时,该模式是由nomount模式状态成功读取控制文件后进入

,处于mount模式下可通过控制文件读取数据库数据文件与重做日志文件,但此时并未链接上数据文件与重做日志文件,相当于没有链接数据库。当处在open模式下时,在执行open模式命令时,如果成功,那么表示实例以完全链接打开了数据库,客户端用户可通过协议链接上实例,操作和使用数据库。通常使用STARTUP命令启动打开实例,STARTUP就是包含这三个步骤并依次做执行(nomount、mount、open),当数据库文件出现问题时,可通过这三个步骤做分布调整;

在此对数据库实例关闭命令也做补录,shutdown [normal | transactional | immediate | abort] 。
关闭数据库分为以上四种方式关闭,其中只有abort 关闭为无序的,有人会说 shutdown abort 命令可能会对数据库造成数据丢失,其实完全不正确的理解,因为oralce数据库属于关系数据库,关系数据库对事务处理必须具备ACID特性,A表示原子性(atomicity)、C表示一致性(consistency)、I表示隔离线(isolation)和D表示持久性(durability),所以根据持久性的原理,一旦事务完成数据库就不可能丢失这个事务。无序关闭就像断电,所以只是数据缓冲区缓存"脏"数据没有被写入到数据文件中做同步,属于实例与数据库不同步关闭,这就是和有序关闭的唯一区别(数据库文件和实例缓存同步),由于重做日志机制对数据缓冲区数据的保护,所以不会丢失数据,只是在启动时Oracle服务器,后台进程会将重做日志的数据恢复到数据库缓冲区缓存,从而耗费一定时间。所以说有序关闭和无序关闭后恢复数据的时间上会存在差异,但是并不会丢失数据。但是很多大公司对恢复时间有严格的规定,可理解分秒就是钱呀。

3.实例的内存结构与进程结构分别由什么组成?
Oracle实例由系统全局区(SGA)的共享内存块和大量的后台进程构成。
SGA 主要(至少)包含三种数据结构:1、数据库缓冲区缓存 2、日志缓冲区 3、共享池 。还可包含 大池、java池 、流池等。
PGA 为用户会话所需要服务器的内存(不可占用SGA内存),区别于SGA的性质,为不共享内存,所以每个会话都有自己专用的PGA。
SGA与PGA 对应的结构大小,DBA可以自行随时控制更改,但通常交于Oracle 自动完成分配。
Oracle内存自动化管理可参考 https://www.doczj.com/doc/aa8721766.html,/26110315/viewspace-716944/

Oracle 实例SGA缓存结构简介:
a.数据库缓冲区缓存作用?
该缓冲区是用来执行sql的工作区域,因用户会话对数据的操作不是直接操作磁盘数据文件上的数据。所以将sql中使用到的关键数据的数据块首先复制到数据库缓冲区缓存,然后进行更改、插入等操作,缓冲区的数据将保存一定时间或有

新的数据进入后由进程(DBWn)写入到磁盘数据文件中。DBWn进程的执行是不定时,按照一定的算法将数据写入到磁盘数据文件中,也就是实例缓存与数据库文件的同步。所以,缓冲区的大小设置得当,将提高语句的执行效率,否则会导致频繁的将磁盘文件读写到缓冲区,则降低了效率,当缓冲区的数据与磁盘映像数据不同时,此时称缓冲区为"脏缓冲区",最后将脏缓冲的数据写回磁盘映像,此时缓冲区又干净了。缓冲区的得当设置也不可太大,将经常不用的块缓冲在缓冲区中也会降低sql操作效率,过小则更加不行,将会平凡交替"脏块与干净块"。
此处对于块的概念将在存储结构中做解释,以及在导入DBWn进程时会继续讨论该缓存区的作用。
注意点,数据库缓冲区缓存的大小可做动态调整,也可对其进行自动管理,自动管理需启动自动化机制。

b.日志缓冲区作用?
日志缓冲区用于将小型的、用于短期存储准备写入到磁盘上的重做日志的变更向量的临时区域。"变更向量"是应用于某些对象的修改,如 DML的执行更改了数据库缓冲区的数据块,将缓冲区更改前的数据保存至日志缓冲区,最终保存至重做日志文件,这样就确保了变更数据永不丢失,这也是关系型数据库不丢失数据的原则,当需要还原数据时,则通过重做日志,可以做到,此处稍带一提,如果不开启归档日志模式,变更数据还是会丢失的,因为联机重做日志文件写满后会进行新旧替换。
日志缓冲区的数据接近于实时写入磁盘,当会话发出COMMIT语句时,写操作由日志写入进程(LGWR)完成。日志缓冲区的数据一般为默认设置,大小不超过数M,LGWR进程确保日志缓冲区正常工作,此处暂且不对LGWR做讨论,等到介绍进程结构时再做讨。总之笔者认为缓冲区虽为数M,但你更新百M数据时也不会受到影响,因为在你做DML执行操作过程中时,会随即触发LGWR进程,并且DML的速度绝不会超过LGWR进程的速度。

重点注意:
日志缓冲区的大小,在实例启动时被设置为固定值,之后无法对其进行手动更改(无法自动管理设置大小值);
此处略做补录,当执行DML事务操作时,为了保证事务的回转,实例必须将变更数据保存至撤销段中,撤销段将保证事务在提交之前存放变更数据,撤销段中的数据和块段、索引段一起受到重做日志的保护。

c.共享池_缓冲区作用?
共享池分为许多子结构,称为最复杂的SGA结构,这些结构由Oracle 服务器内部管理。
其中4个比较重要的组件,库缓存、数据字典缓存、PL/SQL区、SQL查询和PL/SQL函数结果缓存。
共享池大小是动态的(DBA

可手工调整),可以对其进行自动管理。

c1.库缓存作用?
首先SGA中保留的内存区域,保存最近提交sql代码被分析格式后存储的执行代码。分析sql代码会占用一些时间如 selct * from config_code where codesign='2'; 首先它会确定 from关键字后面的 config_code 是什么对象,表or同义词or视图是否存在?如果是*表示查看所有列,那么该用户对应的权限又是什么,oralce 服务器必须通过数据字典查询出它们,然后做出对应的翻译成执行代码,存放到库缓存。而且基于ASCII原则,select 与 SELECT 也意味着要重新分析。由此可以看出库缓存的作用分析一次语句,之后的反复调用就会节省大量的分析时间(对数据字典的反复查询时间)。

c2.数据字典缓存作用?
又可称为"行缓存"存储最近使用的对象定义,如表、索引、用户和其他元数据的定义。将定义信息存储在SGA内存(数据字典缓存),供所有会话访问,从而省去对磁盘数据文件中字典的重复读取,提高了分析性能。
"行缓存"详细解释为:对一张表访问一次那么该表信息从磁盘数据数据字典就会被读取到缓存中,再次操作访问将读取数据字典缓存。
第一次访问该表:selct sum(amount) from user_amt ;
第二次访问该表:select * from user_amt where user_id='110';
此处存在疑点,第二次访问该表应该不用分析该笔的表结构,而具体的行信息应该不会全部存放到缓存中,如果表很大,不合理的。
据此c1和c2缓冲机制得出结论,共享池的分配合理与否,主要体现对数据字典缓存的分配,因为数据字典缓存直接影响到库缓存的性能。

c3.PL/SQL区缓存作用?
存储已编译的pl/sql对象(过程、函数、触发器、打包函数等),同理避免重复读取磁盘耗费的时间,将一次编译后的pl/sql执行码存入到缓存码,从而最终达到调用pl/sql对象性能的提升。

c4.SQL查询和PL/SQL函数结果缓存作用?
结果缓存是11g版本时新增功能,将pl/sql函数对象函数等调用后产生返回值数据记录到缓存中,当再次调用对象产生返回值将直接取缓存数据,达到性能的提升,当然所有的Oracle缓存机制都具备安全智能的特性,当你的元数据发生了改变,它自然会重新计算参数最新的缓存。该缓存区默认禁用。
注意点:共享池的分配算法为LRU(最近最少使用)。对缓存区的大小设置问题,过大或过小都具备对其性能产生影响。所以,Oracle推崇自动管理或高级DBA管理员测试与预估分配指定大小。查询SGA组件,当前、最大和最小的容量,可通过该动态视图 v$sga_dynamic_components。查看PGA ,通过查看 v$pgastat。

Oracle 实例的进程结构简介:


进程分为5个重要的历史沿用进程,1、系统监视器(system monitor , SMON ) 2、进程监视器 (process monitor ,PMON )3、数据写入器(Database Writer,DBWn)4、日志写入器(Log Writer ,LGWR)5、检查点进程(Checkpoint Process ,CKPT)。还有2个版本更新中的重要进程,可管理性能监视器(Managerability Monitor ,MMON)和 内存管理器(Memory Manager,MMAN),以及两个重要的选用进程: 归档进程 Archier(ARCN)进程和恢复进程 Recoverer(RECO)进程,以及一些其他进程组成。

简介重要进程与SGA内存结构的交互情况?
服务器进程是客户端到服务端的代表,客户端组件由用户会话和用户进程构成。服务器进程与数据文件交互,将数据块读取到缓冲区中,DML操作时变更向量被复制到循环的日志缓冲器中,在此事务过程中还存在将数据反转事务涉及到的数据必须被保存到撤销段中,撤销段数据也会被读到日志缓冲器。再由日志写入器(LGWR)实时写入到联机重做日志文件中,如配置了归档模式,ARCN进程就会将联机重做日志文件复制到归档位置的归档文件,最后由DBWn进程将脏块写入某个数据文件进行实例缓存与数据库同步。
Oracle进程在linux、unix 系统中,每个进程都是独立的,具有各自的编号。但在在 windows 系统上,只有一个进程 就是Oracle.EXE,oralce进程作为此Oracle.EXE进程对应的线程存在。

a.SMON进程的作用(系统监视器进程)?
首先查找和验证数据库控制文件来安装数据库,之后查找和验证数据文件和联机日志文件打开数据库,最后负责执行数据库内部的各种管理。

b.PMON进程的作用(进程监视器进程)?
用户会话是链接到服务器进程的用户进程,该服务器进程在此会话创建时启动,会话结束时销毁,PMON负责监视实例中的所有服务器进程并作出相应处理,如检测会话发生异常中断时及时停止对应的服务器进程,将该会话对应的PGA内存返回给操作系统的空闲内存池,并回滚该会话未完成的事务(任何未提交的事务发生意外情况,都会回滚[撤销])。

c.DBWn进程的作用(数据写入器进程)?
主要将数据库缓冲区缓存中的脏数据块写入到对应的数据文件中,DBWn会尽可能的减少操作,因为对数据文件的写入就会涉及到大量磁盘I/O操作。
有四种情况下,DBWn将执行写操作,没有任何可用缓冲区、脏缓冲区过多、遇到三秒超时,遇到检查点。
其中三秒超时表示DBWn每三秒会对会对脏缓冲区清理一次,但实践证明它对系统影响不大,因为通常DBWn的写操作不是将所有脏块全部写入数据文件,追寻LRU算法,将最久最不适用数据存入到缓存中,如10

万个脏块其中有数百个脏块许久没有人问津,一次DBWn的写入就会只写入这数百个脏区,但是遇到完全检查点(如有序关闭实例)DBWn就会将所有脏区,全部写入到数据文件中,检查点也可分为局部检查点。
alter system checkpoint;
/*随时设置检查点语法,一般不要这么做会严重影响业务使用,此时通常cpu 100%,维系时间因脏区大小而定,做业务的人此时发火哦*/

d.LGWR进程的作用(日志写入器进程)?
将日志缓冲区的内容接近实时写入到联机重做日志文件,该过程称为"日志缓冲区转储"。当会话对数据缓冲区缓存中数据进行DML操作时,在更改应用块前,服务器进程会将未更改的块保存到该事务的撤销段中,然后服务器进程还将该事物影响到的数据段,可能还有索引段,撤销段,按照一定的方式转储到日志缓冲区,再由LGWR进程几乎实时写入到联机重做日志文件中进行保护。
由三种情况下LGWR将执行转储?
d1.会话COMMIT。此处补录,COMMIT命令对DBWn进程没有任何影响。
d2.日志缓冲区占用率达到 1/3 时(通常日志缓冲区为数M,所以几乎接近使用实时触发LGWR )。
d3.DBWn要写入脏区时。
所以说LGWR的速度一定快于DML操作的速度,不然是无法提交完成的。简单说,重做日志的就是提供保护,保护未完成,是不可能完成更改的。

e.CKPT进程的作用(检查点进程)?
在版本8i之前,检查点的设置为每隔一段时间就会设置检查点(完全检查点),以确保实例意外关闭(此处的关闭为无序关闭,类似于shutdown abort; 断电操作)时,重启能够最快的恢复数据库,此处的触发检查点就是由CKPT进程发起。8i开始,DBWn用增量检查点代替了完全检查点,增量检查点机制要求DBWn以固定速率写入脏缓冲区,所以DBWn与LGWR之间的差距就不会很大,这样重启数据库时就能够达到快速恢复。但是DBWn的增量过程中会对性能略有影响。
注意点:CKPT进程的改进(版本更新),由每隔一段时间的完全检查点改进为固定速率的增量检查点。

f.MMON进程的作用(可管理性能监视器进程)?
MMON进程为版本10g引入的进程,负责数据库的自我监视进程和自我调整功能。数据库的性能与活动信息会被收集到SGA中,然后MMON从SGA定期捕获统计数据(默认每小时捕获一次),并将其写入到数据字典中,在数据字典中的存放时间可以调整(默认为存放8天)。MMON收集到的一组统计数据称为快照,然后启动ADDM工具(ADDM工具可做分析数据库活动),ADDM工具观察当前快照与先前快照,然后给出观察结果与建议。

g.MMAN进程的作用(内存管理器)?
MMAN进

程为版本10g引入的进程,主要负责内存分配的自动管理。在Oracle数据库历史中对内存的管理也不是一直很好,如9i之前,会话使用的PGA内存无法转移,服务进程直接取之操作系统内存池,但是不返回内存给操作系统即使使用一小会,SGA的大小实例启动后将不能做改动。9i时做到了可以手工调试PGA和SGA。10g版本实现了SGA大小重调的自动化,由MMAN进程监视,并根据需要做自动重设。11g版本开始,内存管理更加智能,DBA只要设置一定值, MMAN观察PGA内存和SGA内存,可做自动化重新设置。

h.ARCN进程的作用(归档进程)?
ARCN为归档日志进程,为可选进程,主要负责将联机重做日志文件做读取后转移到归档重做日志文件做指定时间段保存,对数据严格管控的大型企业来说是必须要开启的。因为, 联机重做日志文件的数量和大小为固定不变,变满后LGWR将用新的重做数据将其覆盖,所以说联机日志文件一般存放的知识最近的DML产生的变更向量。
结论点:只要开启归档日志模式,那么当数据发生严重损坏时(历史性丢失),也是能够通过从备份生成的所有归档日志文件中提取的变更向量,恢复到最新的数据库。

i.RECO进程的作用(恢复进程 RAC环境中使用的进程)?
RECO进程是存在于分布式事务涉及到的进程,在两个或多个数据库的更新时,负责对两个数据库的协调,如果一个更新成功,另一个更新失败,那么对于整体来说数据是不一致的,RECO进程负责在两个或者多个数据库的更新阶段发生错误时,取消最终提交并回滚所有数据库中的更新状态。

4.数据库的存储结构以及与数据字典应用关系?
存储结构可分:物理存储结构,逻辑存储结构。
物理存储是数据库自创建后的磁盘文件,逻辑存储是从物理存储中完全抽象出来的,数据字典是定义了物理存储与逻辑存储两者之间链接关系。

Oracle 物理存储结构简介:
Oracle数据库必须的文件有控制文件(controlfile)、联机重做日志文件(online redo log file)和数据文件(datafile)。还有一些文件为也是必须的,初始化参数文件、口令文件、归档重做日志文件、日志和跟踪文件,但严格定义来区分他们可不属于Oracle数据文件。

a.控制文件的作用?
一个数据库只有一个控制文件,该文件可有多个副本称为"多路复用控制文件"。控制文件虽小,但作用重大(可通过上面分析的启动实例过程得出)。它包含指向数据库其它文件部分的指针位置,存储着维护数据库完整性所需的信息。副本的最小数量为1,最大数量为8。通常设置3个并将它们存放在不同的设备上,副本的受损,数据库

实例也将立即终止。

b.联机重做日志文件的作用?
重做日志 (redo log)是按照时间顺序存储应用于数据库DML操作产生的一连串变更向量。当发生数据库或实例受损时,则可使用这些变量恢复至受损前的状态。每个数据库至少有两个联机重做日志文件,安全起见可对他们创建多个副本,联机重做日志包含多组联机重做日志文件,文件可称为成员,数据库至少需要两个组,一个组接受当前更改,另一个组是进行归档,每组至少一个成员在运行。其中一个组是当前组,LGWR将日志缓冲区的数据写入到当前组,由于日志文件大小固定,因此,当前组中文件最终会被写满,此时,LGWR将执行"日志切换",将第二个组做为当前组进行写入,而第一个组将会被ARCn进程进行归档,然后第二个组满了再做循环切换。当有多个成员时,LGWR能够确保对所有成员并行写操作。关于联机重做日志文件,在任意时间都能够移动、添加或删除。

c.数据文件的作用?
数据文件是数据的存储仓库,数据文件大小和数量理论上不受限制(实际限制于硬件)。10g之后在创建数据库后至少有两个数据文件,一个用于SYSTEM表空间(用于存放数据字典),另一个用于SYSAUX表空间(存储数据字典辅助数据),实际使用中我们可以更具需求创建任意多个数据文件。从逻辑上讲,数据文件是段的存储库。"段(segment)"是数据的存储结构,典型的段是表和索引等,Oracle数据文件是可以更改的如重命名、移动、删除等,但是需要做停机操作。Oracle的最小存储单位和操作系统一样,也称"块"。但是两者没有任何的联系,但性能上考虑操作系统的块要比Oracle的块小。块的结构为头部分和数据区域和空闲空间,头部分包含诸如行目录的信息,行目录列出块中行数据区域中的位置,还包含DML操作过程中产生的行锁定信息。数据区域包含行本身,如行(表段)或索引键(索引段)。
当用户会话需要对数据进行使用时,服务器进程允许会话找到对应的相关块,由服务器进程读取到缓存区,缓存数据变脏后,由DBWn将块写回到磁盘数据文件。此处注意DBWn的不确定时间增量检查,所以写入的脏数据并不代表一定是提交后的数据,可能将未提交的数据写入也是可能的。数据文件不能进行多路复用保护,受损后只能通过联机重做日志文件与归档重做日志文件中提取相应的变更向量进行恢复。

d.还有些数据文件也是必需的?
d1.实例参数文件(Instance Parameter File)作用为,当启动Oracle 实例时所需的唯一参数文件,SGA 结构据此设置内存,后台进程会据此启动。该文件中具有数百个参数,唯一需要

设置就是DB_NAME参数,其他参数都具有默认值。所以该参数文件可能很小,但必须存在。
d2.口令文件(Password File)作用为,正常情况下用户通过用户名与密码建立会话,提交到数据字典进行身份口令验证,成功后可以登入实例。还有一种情况,是实例没有打开时,启动数据等情况需要使用高级管理员用户登入时,这时外部口令文件就是可以完成的一种方式,它里面存放了少量重要的用户信息如SYSDBA用户。
d3.归档重做日志文件(Archive Redo Log Files)作用为,负责存储满载的联机重做日志文件,进行数据库损坏时的重做恢复。
d4.警报日志和跟踪文件(Alert Log and Trace Files)作用为,警报日志负责记载影响实例与数据库的某些重要操作的相关消息的连续流。如记载启动和关闭、更改数据库的物理结构和更改控制实例参数。跟踪文件是后台进程检测到错误条件时生成的文件,也用于特定的报告事件。


Oracle 逻辑存储结构简介:
物理结构作为存放在操作系统上的文件呈现给系统管理员,目标用户看到的是诸如表的逻辑结构。Oracle逻辑结构中常用"段"描述任何数据的结构,如表段、索引段、撤销段,表段包含的是信息行,索引段是用于快速访问特定行的机制算法,撤销段是数据结构,用于存放事务过程中不需持久化的信息。Oracle 通过表空间(tablespace)的方式,将逻辑存储从物理存储中抽出来,表空间在逻辑上是一个或多个段的集合,在物理上是一个或多个数据文件的集合 。段和数据文件的关系是可以为多对多的关系,就是说一个表段的信息可能存放在多个数据文件中,一个数据文件也可能存放多个表。
段是由多个块组成的,数据文件的格式被设置为多个块,随着块的增加,也就扩大了段的空间。由于块很小管理过于耗时,所以将一系列连续块分组给区间,然后通过新增区间,段得到扩展。
据此总结:逻辑结构为表空间-段-区间-块,物理结构为数据文件-操作系统块。对应关系为是表空间可以对应多个物理数据文件,Oracle块可以对应多个操作系统块。

Oracle 数据字典简介:
数据字典可称为是描述了数据库逻辑存储结构和物理存储结构的对应关系及其内容的元数据。如用户定义、安全信息、完整性约束和性能监视信息都是数据字典内容中描述的一部分,数据字典作为一组段存储在SYSTEM和SYSAUX表空间中。由于定义可以看出数据字典的重要性,所以它与其他段的区别在与,Oracle 不允许对其做任何用户的更改,它由数据库直接管理,创建(实例、表、索引等)时生成对应元数据,删除时Oracle自动维护元数据的管理。

Oracle 提供一组视图对元素据进行访问可分为三种形式,前缀为DBA_、ALL_、USER_。分别代表相应的权限是,拥有DBA权限用户可查看所有对象字典、该用户可查看的所有权限对象字典、用户自己的对象字典。
对表进行查询sql,执行步骤为1、查询数据字典,查看表是否存在以及构成的列。2、查看发出会话对应用户的权限。3、找到表的物理位置,要求读取段的区间位置,再由区间映射列出构成表的所有区间,详细指明每个区间所在的数据文件,找出区间在数据文件中的开始块,以及连续的块数。

相关主题
文本预览
相关文档 最新文档