Oracle体系结构整理

 

1、Oracle组成前端

oracle分两块,oracle数据库软件和oracle数据库。oracle数据库软件位置经过如下命令能够找到:java

最后ls命令列出了数据库软件的内容。linux

 

oracle数据库的位置web

 

ls命令显示了数据库的内容。sql

 

oracle数据库软件的文件和oracle数据库的文件能够分开存储到两个地方。数据库

 

咱们最常使用的几乎所有的在生产环境里面的存放结构是:oracle数据库软件存放在服务器本地硬盘上而oracle数据库存放在存储上。浏览器

 

oracle数据库讲的就是/u01/app/oracle/oradata/jiagulun目录下的文件。这些文件就组成了oracle数据库。有三类文件,ctl文件、log文件以及dbf文件。缓存

 

2、Oracle实例服务器


 

oracle数据库是实实在在存储在硬盘上的三类文件。oracle数据库能够启动起来,oracle启动起来之后,首先在内存划出一块空间出来,供oracle使用,这块内存叫oracle内存。第二件事情,启动一堆进程,咱们把内存和进程统称oracle实例。网络

 

oracle数据库启动起来之后会产生一个oracle实例。oracle数据库关闭后就没有oracle实例了。oracle实例是oracle数据库内存和进程的总称。

 

实例和数据库通常状况是一个数据库对应一个实例 1:1的关系。固然也有一些特殊状况,一个数据库能够对应多个实例,如两个实例对应一个数据库,通常没有单数,如今生产环境用的比较多的是两个实例对应一个数据库,也有四个实例对应一个数据库,也有八个实例对应一个数据库,有八个的如今用的比较少,虽然oracle支持。

 

例子:

有两台服务器,一台存储。存储中放oracle数据库文件,每台服务器都装oracle数据库软件。每台服务器启动一个实例,两个实例都访问存储中的oracle,这就是1:2的关系一个数据库对应俩实例。两个实例同时均可以访问oracle数据库。

 

一个用户要访问数据库,它链接到的是实例,经过实例来访问数据库。

 

如:一个数据库有两个实例,假设有一百个用户要访问数据库,能够50个用户访问一个实例,另外50个用户访问另一个实例。这是一种负载均衡的概念(使一块儿运行的设备负担的负载达到一个近似相同的状态),

可提升数据库性能和并发性。从理论上讲,数据库性能提升了两倍。实际上在生产环境里面咱们会讲,这个技术就是oracle的RAC技术。

 

通常的学习环境下是一个数据库对应一个实例。

 

下面要用到两个linux命令:

 

1. ps命令

是Process Status的缩写,显示瞬间系统行程 (process) 的动态。它列出了系统中当前运行的进程,结果是个进程的快照,即执行ps命令的那个时刻的进程。

 

2. ipcs命令 

用途:报告进程间通讯设施状态。共有三种设施类型:消息队列、共享内存和信号量 

 

参数:默认列出所有三种设施信息

 

-m 输出有关共享内存(shared memory)的信息

-q 输出有关信息队列(message queue)的信息

-s 输出信号量(semaphore)的信息

 

 

1)数据库启动前

 

查看有没有oracle实例

结果中没有oracle的进程

 

查看内存状态

 

 

没有Oracle使用的内存

2)数据库启动后

结果中有了不少oracle的实例的进程,如ora_pmon_jiagulun 等以ora_开头的进程。

 

内存状态

内存中出现了oracle使用的内存块:

有了一块280M的内存给了oracle。这是oracle启动起来之后在内存里面划了一块比较大的空间。oracle启动起来之后会占用内存和产生进程,这个获得了验证。

 

3、oracle内存结构


 

oracle数据库启动起来之后oracle会在内存里面划出一部分空间,这块空间被oracle所独享所使用。这块内存oracle给它起名叫SGA。通常译为:system global area 或shared global area。

 

当启动Oracle数据库时,系统会先在内存内规划一个固定区域,用来储存用户须要的数据,以及Oracle运行时必备的系统信息。是Oracle Instance的基本组成部分,在实例启动时分配。

 

SGA咱们一般叫系统全局区,或共享全局区。这块内存有六大块。对咱们来说最重要的是三块:共享池、数据库缓冲区高速缓存、重作日志缓冲区。对应的英文名:shared pool,database buffer cache,redo log buffer,这三块空间是咱们着重要讨论和关心的,而这三块最容易出问题的是 shared pool和buffer cache,因此咱们更加关注共享池和数据库缓冲区高速缓存。

 

oracle启动起来之后有两大内存结构,一大块叫SGA,一大块叫PGA。SGA是共享的,PGA是给进程使用的。PGA(Program Global Area程序全局区)是一块包含一个服务进程的数据和控制信息的内存区域。sga有六大块组成:shared pool,java pool,large pool,buffer cache,redo log,stream pool.

 

oracle数据库启动起来之后还会启动一堆进程。这些进程分两大类,前台进程和后台进程。

 

如ps命令的结果中:

 

这些是后台进程;

oracle   16298 16154  0 10:59 ?        00:00:00 oraclejiagulun (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

是前台进程。

 

在实际生产中,前台进程的数量要远远大于后台进程的数量。由于对oracle数据库的每个链接都会产生一个前台进程,通常的对数据库来说都有上百个链接,至少前台进程上百个,后台进程就十几个,因此就oracle数据库来说前台进程的数量要远远大于后台进程的数量。

 

对于SGA来说,全部的内存空间对全部的进程来说是共享的,每一个进程能够访问SGA全部的内存空间。因此说SGA是全部进程共享的一个内存空间。

 

实际的工做中,可能有些进程主要使用buffer cache,有些进程主要使用redo log,有一些单个内存池的单独分配。但咱们认为,oracle数据库的全部进程共享内存SGA中的六大空间。

 

对单个进程来说,它除了可以访问这一大块SGA之外,单个进程它有本身的进程空间,也是一块内存空间,这块空间从PGA来。

 

oracle新的版本里面,oracle有一个大的PGA空间,oracle每启一个进程就从这个大的PGA空间拿出一块来给这个进程。对这个进程来说,它会把一些公共的信息写到SGA里面去, 这个进程所独有的私有的信息写到本身的PGA里面去,每一个进程都这样从PGA分一块。

 

4、oracle的进程结构


 

以上所说前台进程就是说的oracle的服务器进程server process,如咱们用ps命令获得的结果中的一个进程:

oracle 22727 22726 0 15:24 ? 00:00:00 oraclejiagulun (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

就是服务器进程,就是前台进程,也叫server process。

 

下面讲一下oracle数据库中的在工做中的一个链接结构。

 

运行环境中,数据库服务器上有 数据库、数据库实例,要链接数据库必须链接实例。

 

运行环境中还有一个应用服务器,如weblogic,websphere,jboss等应用服务器。应用服务器上有用户开发的应用,如基于java的和基于web的应用。

 

咱们的客户端经过ie浏览器链接web服务器,web服务器同时又是一个应用服务器。

 

web服务器是给浏览器提供网页的服务。而应用服务器能够给访问程序提供更多的数据,它能够拥有和访问数据库等资源并能够对本身获得的数据进行处理并返回给访问它须要它的程序。web服务器实际是应用服务器的一个特例,在网络上它使用的最多。

 

在web服务器及应用服务器(如weblogic)启动起来之后,会创建一个到oracle数据库实例的一堆链接。

 

与咱们在客户端使用sqlplus / as sysdba命令创建的链接相似,这个命令就是创建了一个到oracle数据库的链接。如:

客户端执行sqlplus / as sysdba

ps结果中对应的进程为

oracle 22727 22726 0 15:24 ? 00:00:00 oraclejiagulun (DESCRIPTION=(LOC AL=YES)(ADDRESS=(PROTOCOL=beq)))

创建了一个链接,有了一个server process;咱们再模拟几个这样的链接

 

在客户端执行sqlplus system/oracle

 

咱们在看ps的结果会又出现一个新的进程


oracle 25733 25732 0 16:18 ? 00:00:00 oraclejiagulun (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

咱们有两个链接,oracle就起了两个进程。若是是一百个链接就是一百个进程。

 

weblogic启动起来之后,会主动的发起对oracle数据库实例的n个链接,数量能够在weblogic里面设置,这n个链接叫链接池。而后咱们看oracle数据库实例,它针对weblogic的每个链接,这个实例会创建一个相应的进程和它对应。也就是说weblogic向oracle实例创建了一百个链接,这个时候oracle实例就会针对这一百个链接启动一百个oracle前台进程。也就是一百个server process,也就是一百个服务器进程,这时候,oracle实例里面凭空多了一百个server process。

 

oracle在实际工做中的结构中包含链接池。

 

好比咱们访问淘宝网站,咱们经过ie浏览器链接到淘宝的web服务器上,也就是它的应用服务器上。而后咱们要买鞋子,好比要买什么厂商的鞋子,咱们在网上选中搜索条件之后点击搜索。对淘宝来说全部鞋子的信息在数据库里面没有在web服务器上,全部商品包括商品价格、商品的图片 等等全部信息都在数据库里面。

 

web服务器上面没有信息。

 

用户链接到应用服务器上之后,它会进行一些操做,它要搜鞋子,鞋子的信息在数据库里面。当这个用户想要搜鞋子信息的时候,应用服务器会作一件事情,会从应用服务器与数据库创建的这n个链接里面,随机的选择其中的一个链接,应用服务器会产生一条SQL语句,一个对鞋子访问的SQL语句,经过这个链接送到oracle;oracle接到这个SQL语句之后,就会对它解析执行,而后获取数据;而后再经过这个链接返给应用服务器。应用服务器接收到全部的鞋子信息之后,就会以web界面的方式,再返给用户。

 

咱们用户无形中访问了oracle数据库,可是用户没有体会到,用户也不须要oracle数据库的知识。

 

它只须要经过浏览器,链接到web上,根据本身查询的条件,好比它要寻找某个牌子,寻找李宁牌运动鞋,码在37到42之间,类型是篮球运动鞋。

 

浏览器有了这些条件有了之后,一点搜索,web服务器、应用服务器会自动的从众多的链接中找一个空闲的链接,同时会产生一个带条件的,对鞋子访问的一个SQL语句。SQL语句经过链接发到数据库实例。oracle数据库会接到这个SQL语句,而后对SQL语句解析执行,获取到数据,经过链接再传给应用服务器。应用服务器接到之后,而后再传给咱们的消费者。

 

这就是整个的一个过程。

 

若是你站在oracle数据库的上方,你会发现:这一百条链接,就像一百条高速公路同样。高速公路另外一端是应用服务器,你会看到大量的SQL语句,经过链接送过来。同时你低头再看看,你会发现数据库在处理大量的SQL语句。处理完了之后,将全部的结果,经过相应的链接再送回去。

 

也就是说,咱们的oracle数据库,实际上在大量的接受SQL,在解析SQL,而后执行SQL,而后获取数据。把数据再返给应用服务器。这就是从宏观上去看,oracle平常的工做状态。

 

用户进程就是在用户客户端产生的进程,咱们根本不关心这个。咱们只关心oracle数据库里面的最前端的服务器进程,每一个服务器进程都对应一个PGA,咱们还关心SGA和后台进程。可是要知道用户进程是用户端的进程。

 

5、oracle总体的体系结构


 

oracle实例有SGA,SGA中有六个池子,还有五个后台进程。

 

oracle有三大文件,控制文件、数据文件、重作日志文件。还有归档日志文件。

 

oracle有六大内存块,共享池、streams池、大型池、java池、数据库缓冲区高速缓存、重作日志缓冲区。

 

有五大后台进程,检查点(CKPT)、系统监视器(SMON)、进程监视器(PMON)、数据库写进程(DBWn)、日志写进程(LGWR)。如下简单讲五大进程做用。

 

三类文件里面分别放的信息

 

控制文件存放的了不少信息,先简单的讲两类信息:

 

1. 整个数据库的物理结构信息,在控制文件里面记录着。

所谓的物理结构,主要是数据库有多少数据文件,数据文件分别放在什么位置。oracle数据库有多少redolog文件,这些文件分别放在什么位置。

 

2. 控制文件中还记录着数据库当前运行的一些状态信息。

好比说那个数据文件是在线正常的,哪些数据文件是离线不正常的。

oracle数据库当前正在使用着众多重作日志文件的哪个,哪一些日志文件有一些问题。

数据库当前运行的一些状态信息,也记录在控制文件中。

 

控制文件咱们目前主要讲两类信息:

1. 数据库的物理结构信息。

2. 数据库的当前运行的一些状态信息。

 

数据文件里面放的是oracle实在的数据文件数据。oracle数据主要放的是表,表信息就放在数据文件里面,控制文件会很小,可是数据文件会很大。由于oracle全部的数据所有放在数据文件里面。

 

重作日志文件

日志文件里放的是日志。日志记录的是,oracle对数据库、对数据文件所作的全部的修改,所有会以日志的方式记录在日志文件中。它记录的是数据文件的变化过程。

 

这是三大类文件。

 

oracle数据库接收到的是SQL语句,对SQL语句进行处理、执行,执行完之后会获取到数据,再返给用户。

 

出处:https://blog.csdn.net/xinzhan0/article/details/51816369

相关文章
相关标签/搜索