开讲Oracle系列片之前还是要厚脸皮提一下"口碑"的事!没办法,领导施加压力,天天催口碑的事,要完成部门任务,我也没办法!!Holly也想好好静下心研究技术和大家一起分享,但是“口碑任务“完不成,就没法静心搞技术!我每天上10节课,早8:30到晚8:30,下班了,在写微信公众号,整理知识点!有点小辛苦,有点累,但是还是要每天坚持做自己该做的事!教学要做,个人提升要做,团队任务也要完善,毕竟在一个团队了,每个人不能做的事情都是自己喜欢做的,但是这也是我的工作内容的一部分,也需要完成!所以各位小伙伴们,如果你身边有想学java的,UI设计,前端,大数据,.net,记得联系holly老师!

 

(二) Oracle体系结构_数据

 

(二) Oracle体系结构_数据文件_02

(二) Oracle体系结构_数据_03

(二) Oracle体系结构_数据库_04

 

 

Oracle体系结构主要组件

2.1Oracle体系结构概述

 概念:Oracle体系结构是指数据库的组成、工作过程还原理。

 2.1.1 实例

  1.概念

   Oracle实例是后台进程和内存结构的集合。

   oracle本身是一套数据服务,必须拥有对外操作的实例对象(句柄)

   例如:肯德基提供食物服务,但是不能跑到肯德基去要食物,此时你要去找肯德基员工要食物,此时员工就是肯德基的实例

   提问:一个肯德基有很多个员工,那么数据库就有很多个实例!

   肯德基员工是否都叫同一个名字?不是?实例也可以有很多个名字,但是不能重复!为了防止重复,可以在实例后加编号:同java变量

  2.分类:

   (1)单进程实例

    单进程:代表只有一个用户用的是后,会锁定当前实例,其他用户进程不能使用,就是java 单线程

   (2)多进程实例

    比如:多个用户进程操作同一个实例对象,如果需要上锁,需要用户自己上锁。默认是乐观锁(不上锁,谁都能操作),(悲观锁=只有你释放,别人才能用)

  3.注意实现:

   (1)Oralce实例启动时,将分配一个系统全局去(SGA)并启动一系列Oracle后台进程

   (2) 一个实例只能打开并使用一个数据库.

    比如:一个肯德基只管自己模块工作,其他的不归他管

 2.1.2数据库的存储结构

  2.1.4.1 物理结构(数据库文件)

   一.概念:

    主要描述oracle数据库的外部存储结构,即在操作系统中如何组织、管理数据。

    例如:你家有楼99层,你如何知道99层,每个楼板隔开的,真实存在于某个介质空间的文件系统,楼本身是物理结构,文本本身是物理结构

   二.分类:

    1.主要文件

     (1)数据文件

      ①概念:数据文件就是物理存储oracle数据库的文件。比如:.dbf文件

      ②特点:

       <1>  每一个数据库文件只与一个数据库相关联,也就是说一个数据库文件不能同时对应两个数据库。

       <2>数据文件一旦被建立则并不能修改其大小。

       <3>一个表空间可以包含一个或多个数据文件,也就说表空间的大小是它所包含的所有的数据文件的总和。

       <4>一个数据文件只能属于一个表空间。

     (2)日志文件.log

      ①重做日志文件

       <1>概念:重做日志文件用于记录数据库的变化,是用户的事务处理日志。

       <2>解析:

        当进行历程恢复或介质恢复的时候我们需要使用重做日志,如果没有重做日志文件那么用户能够执行的唯一恢复手段就是从最后的完整备份中进行复原。数据库至少要包含两个重做日志组,并且这些重做日志组是循环使用的,我么可以假定数据库中有三个日志组,在初始阶段日志文件写入进程,,会将事务变化写入到日志组1,然后日志组1写满后oracle会自动进行日志切换,并且循环使用这三个日志组。当所有的日志写满后如果需要归档就会生成归档日志。

      ② 归档日志文件

       <1>概念:归档日志是非活动重做日志的备份。

       <2>解析:

              通过使用使用归档日志可以保留所有的重做历史记录。当数据库出现介质损坏时,使用数据文件副本和重做历史记录可以完全恢复数据库。

      概念:记录用户操作的文件

     (3)控制文件.ctl

      ①概念:

       控制文件时Oracle服务器在启动期间用来标示物理文件和数据库解结构的二进制文件。

       每个实例操作sga的关联文件=控制文件告诉实例如何操作sga区

      ②记录内容:

       <1> 数据库文件的位置及大小

       <2>重做日志文件的位置及大小

       <3>数据库名称及创建时间

       <4>日志序列号

    2.其他文件

     (1) 参数文件

      ①作用:

       用于在启动实例的时候配置数据库sga区域一系列参数。

      ②分类及注意事项:

       <1>当建立数据库的时候,用户就可以运行初始化文件(也就是一种参数文件),规定数据库中所使用的各种设置值。

       <2>第一种参数文件的作用:确定存储结构的大小,设置数据库的全部缺省值。设置数据库的范围,设置数据库的各种物理属性,以及优化数据库的性能。

       <3>文本参数文件的名称格式为init<SID >.ora  ,SID为数据库的实例名称

       <4>另一种参数文件是服务器参数文件,服务器参数文件的名称格式为SPFILE.ora,它可以管理数据库参数和值,它是静态文本初始化文件的替代物。

       <5>参数文件中,参数的数据类型包括:整型,字符型、逻辑型

     (2)临时文件

      ①作用:

       Oracle中临时文件(Temporary File)处理方式与标准数据文件稍有不同。这些文件缺失包含数据,但是只用于临时的操作。一旦建立它的会话,完成了操作,就会从数据库中将这些数据完全删除。

      ②解析:

       在增删改操作完成前,先将数据存入临时文件中,等操作完成会释放部分临时文件空间。

      ③例子:在添加数据时,不进行commit关闭界面,重查,发现没有添加成功!此时就放在临时文件,只有进行commit时,才能保存,此时会释放临时文件空间!

     (3)预先分配文件

      在创建文件或修改文件的size时就是在预先分配文件大小

  2.1.4.2 逻辑结构

   一.概念:

    主要描述Oracle数据库的内部存储结构,即从技术概念上描述在Oracle数据库中如何组织、管理数据。由一个或多个表空间组成

    例如:饭店吃饭很多厅,一个个厅,就是表空间,饭店是数据库,每个厅是认为划分的,表空间的大小也是认为控制的,每个厅有自己的名字,所以表空间由自己的名字。一个饭店不能有两个重名的厅,那么数据库里不能有两个同名的表空间、

    例如:某个同学,你家有100层楼(数据库),你只住一层,其他99层,怎么办?租!问另一个同学他家有99层,你能全租下来吗?不能!怎么办?把99层每一层隔成不同小房间,租出去,这时候可以,这个时候小房间是表空间。每一层是一个表空间,每一层开一分割我不同小房间就是小表空间,所以,表空间里还可以分不同小的表空间

   二.分类:

    1.  表空间

     1.3.3.1.概念:

      表空间是oracle数据库存储数据的逻辑单元

      一个表空间向上可以存放各种模式对象。

      一个表空间向下由多个数据文件.dbf组成。

      表空间是最大的逻辑存储结构,它对应一个或多个数据文件 ,表空间的大小是它所对应的数据文件大小的总和。

     表空间的组成:一个表空间由一组段组成。

     1.3.3.6.创建表空间

      1.语法:

       CREATE TABLESPACE  tablespacename  DATAFILE 'filename'  [SIZE  integer [K|M] [AUTOEXTEND  [OFF| ON] ];

      2.语法说明:

       (1)CREATE 创建

       (2)TABLESPACE 表空间

       (3)tablespacename 表空间的名称

       (4)DATAFILE 指定一个或多个表空间的数据文件,当有多个数据文件时用逗号隔开

       (5)filename 是表空间中数据文件的路径和名称,默认以.dbf结尾

       (6) SIZE 用来指定文件大小,K表示指定千字节大小,M用于指定兆字节大小。

       (7)AUTOEXTEND用来启用或禁用数据文件的自动扩展,on为自动扩展

     1.3.3.2.表空间分类:

      (1)永久性表空间:

       一般保存基表、视图、过程和索引等数据。SYSTEM、SYSAUX、USERS、EXAMPLE表空间是默认安装的。

      (2)临时表空间:

       用于保存系统中短期活动的数据,如排序数据等。

      (3)撤销表空间:

       用来帮助回退末提交的事务数据,已经提交的数据再这里是不可以恢复的。一般不需要建立临时表空间和撤销表空间,除非把他们转移其他磁盘中以便提高性能。

     1.3.3.3.表空间的目的:

      (1) 对不同用户分配不同的表空间,对不同的模式对象分配不同的表空间,方便对用户操作,对模式对象管理。

      (2)可以将不同数据库文件创建到不同的磁盘中,有利于管理磁盘空间,有利于提高I/O性能,有利于备份和恢复数据等。

     1.3.3.4.数据库存储结构的组成:

      (1)SYSTEM表空间:

       SYSTEM表空间用于存放ORACLE系统内部表和数据字典的数据,如表名、列名、用户名等。不建议用户创建的表和索引放在该表空间下.

      (2)SYSAUX表空间:

       该表空间下存放系统内部的常用样例用户的对象。一般不存储用户的数据,由ORACLE系统内部自动维护。(辅助系统表空间)用于减少系统负荷,提高系统作业效率,

      (3)撤销表空间:

       该表空间用于存放撤销信息。用来存放增删改操作前的数据。当增删改完成后,会释放该表空间的部分空间,一般创建oracle实例后,会创建一个叫UNDOTBS1的撤销表空间

      (4)USERS表空间:

       建议用户使用该表空间。永久存放用户对象和私有信息,也被称为数据表空间。可以在该表空间创建各种对象、表、索引等。oracle的基本样例用户SCOTT对象就存放在USERS表空间中。

      (5)TEMP表空间:

       存放临时数据的表空间。

     1.3.3.5 表空间特性:

      (1)控制数据库数据磁盘分配

      (2)限制用户在表空间中可以使用的磁盘空间大小

      (3)表空间具有online,offline,readonly,readwrie属性

      (4)完成部分数据库的备份和恢复

      (5)表空间通过数据文件来扩大,表空间的大小等于构成该表空间的所有数据文件的大小之和。

     1.3.3.7 调整表空间大小

      1.语法:

       ALERT DATABASE  DATAFILE '<数据库文件全路径>'  RESIZE <新的大小>

     1.3.3.8 改变表空间的读写状态:

      1.使表空间只读

       ALERT TABLESPACE <表空间> READ ONLY;

      2.使表空间可读写

       ALERT TABLESPACE <表空间> READ WRITE;

     1.3.3.9  删除表空间:

      DROP TABLESPACE  表空间名称;

     示例1:

    2.段

     (1)概念:

      段由一个或多个区组成,段将占用并增长存储空间。

     (2) 分类:

      ① 数据(表)段(Data Segment):存储表中的所有数据

      ②索引段(Index Segment):存储表桑最佳查询的所有索引数据

      ③ 临时段(Temporary Segment):存储表排序操作期间建立的临时表的数据

      ④回滚段(Rollback Segment):存储修改之前的位置和值,是Oracle的撤销机制。

     (3)注意事项:回滚段是负责存储回滚用户对数据库进行的修改所必须的信息,它会进行事务处理所修改之前的数据库副本,当用户回滚事务处理的时候,就可以使用回滚段中的信息撤销用户对数据库的改变。

    3.盘区(Extent区间)

     (1)概念:

      我们知道块是Oracle逻辑存储结构中最小的单位,盘区是由连续的数据块集合构成的,而盘区构成了段,段又构成了表空间,表空间又构成了数据库。

      区不一定是相连的,可能是断开的,区的大小认为决定的,所以区是逻辑概念

     (2)特点:

      ①盘区数量和盘区大小可以在正在建立的对象的storage字句中规定。

      ②initial。设置为对象建立的第一个盘区大小。

      ③next.这是随后的盘区的大小。

      ④minextents。这是立即分配的盘区数量。

      ⑤maxextents。这是能够为这个表建立的盘区的的最大数据。

    4.数据块

     (1)概念:

      块是数据库使用的I/O最小单元,又称逻辑块或ORACLE块。

      块是数据存储的物理单位,也是数据存储的最基础的单位,

      oracel块大小一般是2k,4k,8k,也可以自己在参数文件中改,一般不用改

     (2)数据块的构成

      ①块头:

       数据块标题:在标题中存储着数据类型以及块的物理位置等信息

       表目录:在一个数据块中可以存储多个表的数据。表目录用于记录数据块中存储了那些表。

       行目录:用于记录数据块中各行的物理地址。

      ②存储区:

       空闲区:当第一次分配数据块的时候,它只有空闲区,没有数据行。随着行被插入,空闲区会越来越小。

       行数据区:这是数据块中存储实际行的地方。

 2.1.3 内存结构

  2.1.3.1 概念

   内存结构是Oracle数据库体系中最为重要的一部分,内存也是影响数据库性能的第一因素。

  2.1.2.2 分类:

   1.系统全局区(SGA):计算机电梯内存

    (1) 概念:

     是所有用户都可以访问的实例的共享内存区域。

    (2)特点:

     ①   SGA是Oracle系统为实例分配的一组共享缓冲存储区,用于存放数据库数   据和控制信息,以实现对数据库的管理和操作。

     ②  SGA所包含的数据:缓冲数据块、在数据库上执行的SQL语句、用于执行的存储过程,函数和触发器等

     ③ 创建实例或启动实例时,Oracle为SGA分配内存

     ④终止实例时,释放SGA所占用的内存

     ⑤SGA的组成:DB高速缓存、共享池、重做日志缓存、大型池

     ⑥ 数据库高速缓冲 database buffer cache(DBC)

     ⑦ DBC的作用:保存最近从数据文件中读取的数据块,其中的数据被所有用用户共享

     ⑧影响DBC的两个参数(主要影响读取效率):DB_BLOCK_SIZE 缓冲区数据块大小 DB_BLOCK_BUFFERS 缓冲区数据块个数

     ⑨ DBC工作原理:

      在我们初次访问数据时,Oracle将读取磁盘上的数据文件,将数据放入数据高速缓冲,再处理数据

      如果我们已经位于数据高速缓冲中时,Oracle就可以直接操作数据

    (3)分类

     ☆共享池

      ♣概念:

       共享池保存了最近执行的SQL语句,PL/SQL程序和数据字典信息,是对SQL语句和PL/SQL程序进行语法分析、编译、执行的内存区。

      ♣库缓存区(Library Cache)包括:解析用户进程提交的SQL语句或PL/SQL程序和保存最近解析过的SQL语句或PL/SQL程序。

      ♣数据字典区(Dictionary cache):用于存放数据字典信息行。存放的记录是一条条的,其它缓存区存放的是数据块。

     ☆重做日志高速缓存

      ♣概念:

       重做日志高速缓存就是用于存储重复记录的缓存

      ♣特点:

       ♥重做记录并不直接写入磁盘的重做日志文件,而是先写入重做日志缓存

       ♥当重做日志缓存中的重做记录达到一定数量时,由(日志写入进程)LGWR进程写入重做日志。(先内存后磁盘)

     ☆大型池

      ♣概念:

       大型池用于需要大内存操作提供相对独立的内存空间,以便提高性能。

      ♣使用场合:

       需要大型池的操作有:数据库备份和恢复,用于共享服务进程的会话内存(例如:大量排序的SQL语句),并行化的数据库操作等。

    (4)组成:DB高速缓存、共享池、重做日志缓存和大型池

   2.程序全局区(PGA):

    (1) 概念:

     是一类没有共享的内存,它专用于特定的服务器进程,并且只能够由这个进程访问。

    (2) 作用:PGA是为 单独的服务器进程存储私有数据的内存区域

    (3) 组分分类:

     ① 排序区

      排序区保存执行order by、group by等包含排序操作的SQL语句时产生的临时数据

     ② 会话区

      会话区保存会话所具有的权限、角色、性能统计信息

     ③ 游标区

      游标区保存执行带有游标(Course)的PL/SQL语句时所产生的临时数据

     ④ 堆栈区

      堆栈区保存会话中的绑定变量、会话变量以及SQL语句运行时的内存结构信息

      select * from emp where emp=:a

    (4) PGA与SGA的区别:

     ① PGA与SGA类似,都是Oracle数据库系统为会话在服务器内存中分配的区域。不过两者的作用不同,共享程度也不同。

     ② PGA是非共享的,而SGA是共享的

     ③ PGA大小由操作系统决定,并且分配后保持不变;会话终止时,自动释放PGA所占的内存

     ④ PGA程序全局区则主要是为了某个用于进程所服务的

     ⑤ SGA系统全局区是对系统内的所有进程都是共享的

   3.用户全局区:

    概念:

     这个内存区域会为我们用户进程存储会话状态。

 2.1.4 进程结构

  2.1.4.1 用户进程

   当用户运行应用程序时,操作系统会为用户运行的应用建立一个进程。这个进程就是用户进程。

  2.1.4.2 ORACLE进程分类:

   1.服务器进程

    (1)作用:

     用于处理连接到该实例的用户进程的请求。

    (2)服务器进程执行的任务:

     对应用程序所发出的SQL语句进程语法分析和执行。从磁盘中读入必要的数据块到SGA的共享数据库缓冲区将结果返回给应用程序处理。

   2.后台进程

    后台进程是在实例启动时启动,启动Oracle数据库的实例时会自动启动后台进程。

    主要的后台进程:

     PMON进程监控进程(进程主要职责):

      监控服务器进程,以确保能够销毁发生损坏或者出现故障的进程,释放他们的资源。

      在主机操作系统上使用Oracle监听器注册数据库服务器。

     SMON系统监控进程(进程主要职责):

      在出现实例故障的情况下,SMON负责重新启动系统,执行崩溃恢复。

      SMON将会清除已经分配但还没有释放的临时段。

      SMON也会在表空间管理中执行盘区结合。

     DBWR数据库写入进程(进程主要职责):

      该进程将缓冲区用于所使用的数据写入数据文件。

      使用户进程总是可以得到未用的缓冲区。

     LGWR日志写入进程(进程主要职责):

      是向在线重做日志文件中记录所有数据库的已提交事务处理

      日志写入进程会在以下4中情况执行写入操作:

       事务处理进行提交

       重做日志缓存已经填充了1/3

       重做日志缓存中的数据数量达到了1MB

       每3秒的时间

     ARCH归档进程(进程主要职责):

      将重做日志的事务变化写入到归档日志。

      在重做日志文件中的事务处理被覆盖之前保存重做日志文件

     CKPT检查点(进程主要职责):

      该进程在检查点出现时,对全部数据文件的标题进行修改

      在通常的情况下,检查点进程是不启动的它的工作由日志写入进程LGWR执行,然而,如果检查点明显地降低系统性能时,CKPT进程就会运行,将原来由LGWR进程执行的检查点的工作分离出来,由CKPT进程实现。

     CJQO作业队列协调器(进程主要职责):

      在Oracle中规划将要在数据库后台运行的进程或者作业(job)

      例如:用户可以告诉数据库在每天晚上12:00建立汇总表,通过采用这种方式,就可以在第二天报告汇总信息。

     RECO恢复进程(进程主要职责):

      在分布式数据库环境中恢复进程自动恢复那些失败的分布式事务。

      例如:当每个分布式事务由于网络连接故障或者其他原因而失败时,RECO进程将尝试与该事务相关的所有数据库进行联系,以完成对该失败事务的处理工作。

 进程和内存结构、数据文件的协作关系

 

 

有问题或更好建议可以联系holly老师,让我们共同学习:

每周会不定期的进行: 斗鱼直播讲堂(房间号672217)

直播时间会在前一天的微信公众号通知!

希望大家天天关注微信公众号哦!

博客园: 红酒人生(有大量技术帖子)

想高薪就业 就学习java,安卓,大数据,数据库,web开发,前端开发 ,可以来" 北大青鸟南京中博软件学院" 找 Holly老师 哦!!!Holly老师欢迎您来咨询!

长按下方二维码关注Holly老师公众号,一起学java吧!

(二) Oracle体系结构_数据_05