`
秋天的童话穷
  • 浏览: 78666 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle的体系结构

阅读更多

 

Oracle 的体系结构

 

把这张图分成上下两部分

上面的部分是内存数据: 存在于内存中 在内存中的数据没实体在大方框中的部分我们把这部分称之为实例 实例由 SGA( 共享全局区 ) 和一组后台进程组成,椭圆部分是私有的 ,user process 是客户端进程比如 SQLPLUS,server process 是服务器端进程。

下面的部分是物理数据: 存在于存储介质 ( 通常 FS raw ASM) 上,我们把这部分称之为数据库。

而实例+ 数据库就是大众所谓的数据库通称 , 而实际他们完全是两个概念

一般来讲" 物理的 " 都是参照对象的下层而言的

例如:OS 的物理层 就是硬件

oracle 是基于 OS 的软件 , OS 的部分对 oracle 而言就是物理的 .

 

 

一、实例 instance

实例是访问数据库的正常模式的唯一途径( 排除 DUL 等工具 )

一个实例只能打开一个数据库

一个数据库可以被多个实例访问(RAC)

实例由内存结构和一组后台进程组成

ORACLE INSTANCE是一个数据库文件进行实例化提供的服务,而它也是我们体系结构的核心

 

   实例如何运行:

一个实例运行起来就好比大商场开张

你要开张卖商品 就需要有空间 比如营业厅, 老板办公室 , 经理办公室 , 财务室等等

这些空间在我们系统中就是要申请的内存区域

华宇商场空间的总体使用面积该多大?

当你买下( 租下 ) 这块商场空间时 , 生活中会签合同 合同中表明了他购买的这个面积的范围,之后这个商场空间就随你去规划去使用了 .

那么这里的合同 在数据库中就是参数文件

 

参数文件是实实在在存在于你硬盘或裸设备中的.

参数文件决定着实例初始化的形态

 

 

大商场想开张, 有了商场空间后 , 还缺什么 ? 人!商场里需要不同岗位的人员来维持这个店的正常运转,这些人就相当于后台进程 他们各尽其职。

 

 

 

为什么说是后台进程?

实例运转需要进程来维护, 包括写数据 , 写日志 , 实例恢复等等

你是去商场买商品 你也是一个进程

导购接待你卖商品 导购也是一个进程

所以区分一下他们:

你就是用户进程( 比如 sqlplus)

导购就是属于服务进程(linux ps 可以查到进程名 oracle$ORACLE_SID)

你和导购之间建立起来的就是session( 对于专属模式是进程和会话一对一 , 共享模式一对多 )

维护实例运转的就是后台进程

 

二、 内存结构

 

 

内存由SGA PGA 组成,分别代表系统全局区和私有全局区。

S可以理解成 SYSTEM, 也可以理解成 SHARE

P可以理解成 PROCESS,PRIVATE

1 SGA :系统全局区

每个实例只有一个SGA, 生命周期是实例的启停, SGA 随之创建消亡

用于存储数据库信息的内存区,该信息为数据库所有进程所共享。

SGA中包含的组件 :

shared_pool 共享 SQL PLSQL 的执行计划和数据字典对象等信息

他又分为两部分:

1.data dict cache 也叫 rowcache  加速 SQL 的解析

使用过的字典 就会缓存在这里 再次使用这个字典就直接从内存获取

这些统计的信息在 v$rowcache 中记录

 

 

2.library cache: 加速解析 减少语句重解析

SQL文本 , 解析树和执行计划就在这里

 

db buffer cache 

数据库缓冲缓存区 缓冲被访问的数据块.

每次从磁盘向内存缓冲数据的单位由 db_block_size=8192  决定

这个区域缓冲的数据保持时间也由LRU 算法决定

redo log buffer 

联机( 重做 ) 日志缓冲区 记录数据库的每个改动向量

就是记录有顺序的SQL 条目

这些SQL 条目包括系统的改动和 UNDO 的改动 , 用户数据的改动

将一个人的工资由800 改成 1000  还没提交就断电

这时数据有可能写盘 下次启动时就通过回滚段中的改前镜像和日志进行 恢复

如果提交了数据有可能没写盘 这时断电 下次启动就通过日志重做

主要是为了数据的增删改过程记录日志的 提高数据安全性

large pool(9I引入 )

大池  存放对那些复杂的程序包分析、RMAN UGA( 共享模式 ) 、异步 IO 等相关的数据

java pool(9I引入 )

JAVA池 存放 JAVA 存储过程的分析信息。

stream pool(10g引入 )

流池 为流复制服务提供数据缓冲缓存

其他资源

比如固件,lock,latch  统计数据等等

 

2 PGA: 程序全局区

       整个实例有很多PGA, 对应的是进程 , 一个进程一个 PGA, 生命周期是进程的 创建和消亡

       PGA中主要包含排序区和 UGA( 专有模式 ) 的信息

 

3 UGA: 用户全局区

存储session 信息和解析执行计划的

它的位置比较特殊

如果是专有模式( 默认 进程和会话是一对一的 ,UGA 会存在 PGA

如果是共享模式 进程和会话是一对多的关系,UGA 会存在 large pool

    但large pool 没内存可分时 会存在于 SHARED POOL

PGA UGA 的区别

PGA是服务于进程的,它包含的是进程的信息 .

UGA是服务于会话的,它包含的是会话的信息 .

 

 

 

四、主要的后台进程

维护实例的进程并不是全都开启的,很多都是特定服务才有的特定进程,特定服务启动特定进程才随之出现,在众多实例进程中有5 个必须进程。

 

1.SMON 系统监视进程

1.空间管理 : 定期合并空间 ( 老版本才有 定期回收临时段

2.实例恢复 :( 服务器掉电了 实例意外终止 恢复的方法 : 先前滚 ==> 后回滚 ==> 释放资源

前滚 将数据库中的SQL( 包括提交的和未提交的 ) 全部重新做一遍

回滚 将没提交的SQL 句从数据库中将老的镜像取出覆盖

释放资源 将前滚和回滚中使用到的资源释放

 

 

2.DBWn n指的是 0-9 a-j  多个写进程的区分 将脏块写盘

触发写的条件

1.产生检查点

2.脏数据缓冲区达到阀值 默认 10%

3.扫描整个 data buffer 没有空闲   data buffer 中包含脏的和未脏的 优先写脏数据列表 再写未改的

4.timeout超时 如果 DBWR 没事做 会被每三秒唤醒一次去巡检 写不写不一定

5.集群环境的 ping 请求触发多实例的数据写请求

6.表级别的 truncate drop 也会触发数据写

7.修改表空间的 read only

8.做表空间的 offline( 离线 )

9.热备份  begin backup 命令

 

3.PMON 进程监视器

1.清理与实例非法断开的 server_procese 残留的资源 非正常终止的用户进程产生的垃圾资源

2.负责重启以外死掉的调度器 ( 网络监听中使用的 )

3.将实例的信息注册到监听程序

 

4.CKPT 把新的检查点写入指定位置

1.调度数据写 dbwN

2.将新检查点写数据文件头

3.将新检查点写控制文件中的数据文件头的记录

 

5.LGWR 只有一个进程 不会向数据写进程那么多 因为写要求有顺序 将 redo log buffer 里的条目 写到 redo 文件

触发写的条件

1.commit

2.redo log buffer 1/3

3.redo log buffer 日志缓冲区达到 1M

4.写日志优先

DBWR 要写脏数据时 , 要检查脏数据对应的日志是否写盘 , 如果日志还没写 , 会优先写日志

5.3秒写一次

 

 

 

五、DB 的结构

 

 

从运行中的数据库来看有两大类

1.离线文件 ( 非核心 )

参数文件 密码文件 归档日志

2.在线文件 ( 核心 )

数据文件 控制文件 联机日志文件( 重做日志 )

以后会专门讲每种文件的作用 维护方法

这里只简要描述一下

数据文件  存放系统数据和用户数据的空间

控制文件  描述着数据库结构和形态

重做日志  记录着数据库中的一切改动数据的SQL 条目

参数文件  实例初始化的形态说明

密码文件  sys 管理员的密码验证文件

归档日志  重做日志的备份文件

 

后面我会具体讲解每个部分,这里只是简单的从整体概括。

 

 

 

 

  • 大小: 187.7 KB
  • 大小: 50.6 KB
  • 大小: 10.4 KB
  • 大小: 15 KB
  • 大小: 103.8 KB
  • 大小: 45.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics