Oracle原理大图

原理大图

      • 概念
        • 一、Oracle数据库
        • 二、架构
        • 三、系统全局区
        • 四、PGA
        • 五、进程
        • 六、文件
      • 讲解
        • 一、 会话的建立
        • 二、 事务的执行 03:01
          • 2.1 获取SQL文本
          • 2.2 解析
          • 2.3 查找数据块
          • 2.4 同时做三个工作
          • 2.5 提交事务
        • 三、 检查点机制 11:08
        • 四、 实例恢复过程 13:28

概念

Relational Databases Management System(RDBMS)(关系型数据库管理系统)
Oracle数据库服务器

一、Oracle数据库

Oracle数据库系统 = 实例 + 数据库
实例 = 内存结构 + 进程结构
数据库 = 存储结构
在这里插入图片描述

二、架构

本地存储(非集群系统)| 共享存储(集群系统)
一个实例(Instance)可以只能连接一个数据库(Database) | 一个数据库可以被多个实例连接
在这里插入图片描述

三、系统全局区

在这里插入图片描述
在这里插入图片描述

SGA(System Global Area)(系统全局区)
负责RDBMS的管理功能Large pool(大池)  Java poolStreams poolShared pool(共享池)    Libraray CacheShared SQL Area(共享SQL区)Data Dictionary Cache(数据字典)Fixed AreaOtherLRU Lists(最近最少使用列表)CKPT QueueDatabase Buffer CacheRedo Log Buffer
  • SGA分配状态
    在这里插入图片描述
四、PGA
PGA(Program Global Area)(程序全局区)Stack Space(堆栈空间)User Global Area(用户全局区)
五、进程

在这里插入图片描述
在这里插入图片描述

Listener进程结构(后台进程)LERG(监听器注册进程)PMON(进程监控进程)SMON(系统监控进程)CKPT(检查点进程)DBWn(数据库写进程)ARCn(归档进程)LGWR(日志写进程)
六、文件

在这里插入图片描述

+DATASpfile(服务器参数文件) Data Files(数据文件)Control Files(控制文件) Undo Segment(还原段) Online Redo Log Files(联机重做日志文件)+FRA(Flash Recovery Area)(闪回区)备份文件 归档重做日志文件

讲解

在这里插入图片描述

一、 会话的建立

在这里插入图片描述

https://blog.csdn.net/hezuijiudexiaobai/article/details/108693088#3%09_58_59_14
网络驱动 服务器安装时配置好了 客户端需要安装client软件 平时使用中间件
用户进程
客户端网络配置文件tnsname.ora
连接字符串(监听器所在服务的地址、端口号、通信协议、服务器名称)
监听程序 验证是否有效(监听注册进程(LREG)动态刷新信息到监听程序) -> 服务器进程 自动获取实例和数据库权限
监听程序此时会连接到该服务器进程,并将客户端进程的地址等初始化信息传递给它
监听程序断开与客户端进程的连接,继续处理下一个用户进程的访问请求安全验证[共享池][数据字典缓冲]  首先,应用程序远程访问Oracle数据库时,将从客户端网络配置文件tnsnames.ora中读取数据库服务器配置信息(监听器所在服务的地址、端口号、通信协议以及服务名称),然后连接到服务器端的监听程序,这时若应用程序所请求的数据库服务有效,则监听程序会生成一个新的服务器进程来专门处理该客户端应用。
监听注册进程(LREG)定期刷新提供数据库服务信息给监听程序。
服务器进程创建好后,自动获取对数据库和实例的完全访问权限,这时监听程序会连接到该服务器进程,并将客户端进程的地址等初始化信息传递给它,随后,监听程序断开与客户端的连接,继续处理下一个用户进程的请求。
于此同时,服务器进程根据监听程序的信息连接到客户端的应用程序,并对用户进程进行用户名和口令的安全校验,若通过验证,则会话建立,此时用户就可以进行事务处理了。
二、 事务的执行 03:01

在这里插入图片描述

2.1 获取SQL文本
update employees set salary=salary*1.1 where employee_id=101;  

服务器进程在收到客户端应用发送的 SQL 文本

2.2 解析
浅解析合法性([共享池]的[数据字典缓冲对象]定义信息    数据库对象是否存在、语句语法是否满足PL/SQL规范要求)全表扫描 索引[共享池]的[库缓冲]中查找SQL文本的[共享SQL区域]  执行计划  权限 执行分析树 执行计划
深解析最佳访问路径SQL优化指导(检测过时或者缺失统计数据、产生SQL概要文件、添加缺失索引、重构SQL)性能分析程序根据AWR记录构建不同的性能版本 -> 比较后返回SQL 响应时间最短的一个作为该 SQL 语句的执行计划保存执行计划 方便下次使用
2.3 查找数据块

块是数据块操作得最小单位
[行片段]信息
[最近最少使用列表]
有序双向链表
链表头:高速缓存中使用频率最高的数据块信息被记录在链表头 链表尾部:最少使用的记录在链表尾部
高速缓冲区数据块的内存偏移量&块的状态
(ping dirty [clear] free 正在读写的 修改过的 状态一样的 从来没用的)
遍历 clear 命中
逻辑读
物理读
服务器进程就要从数据文件把需要的块读到缓存高速缓冲区
根据最近最少使用算法替换掉高速缓冲区中使用频率最低的数据块,并维护最近最少使用列表

2.4 同时做三个工作
维护检查点机队列新的检查点间隔 动态创建 队尾添加新的节点 要修改得数据块的内存偏移量和提交状态(未提交)不断向前推进记录的数据块的顺序 = 重做条目写入重做日志的顺序
重做数据重做条目 - 数据块的修改记录产生修改的事务开始的SCN和时间戳事务ID事务提交时的SCN和时间戳(未提交为空)修改的类型修改的段所属的类型和名称存储暂存重做日志缓冲区日志写进程协调并[整体]刷新到联机重做日志持久化保存任何一个提交缓冲区三分之一满或记录1M缓冲数据联机重做日志组发生切换时数据库写进程执行之前自上次日志写完后三秒钟时
还原数据缓存高速缓冲区中原始的未修改的数据块的副本开始执行事务前,将修改前的原始块复制到还原段,生成还原数据
2.5 提交事务
Oracle 就会通过操作系统的配合在 CPU 通用寄存器进行运算,对 101 员工的薪水列增加 10%涨幅,并用返回结果修改相应数据块中 101 表行 salary 字段值,完成后给客户端应用发送已更新提示。内存块 rollback(还原段中还原数据覆盖高速缓冲区数据) commitcommit检查点机队列中相关数据块的提交状态修改为已提交释放持有的锁资源返回给用户进程提交完成的信息在用户应用看来就执行成功了
修改只是在内存中的修改,还需要写入磁盘文件来持久化保存
三、 检查点机制 11:08
[SCN](https://blog.csdn.net/hezuijiudexiaobai/article/details/108603413#6_Oracle__74)异步 一直在执行驱动机制单向 - 三秒钟 - 间隔SCN 十进制数字序列唯一标识 系统更改号更替 完全检查点数据库写进程(凡是已标记为提交状态的数据块从缓存高速缓冲区读出并写入数据文件中)日志写(确保写入数据文件的提交过的数据块所对应的重做条目都已持久化记录在联机重做日志文件中)控制文件记录的 SCN 把数据库全部的数据文件头的 SCN 字段值刷新一遍一致性数据库标志目的:实例恢复Oracle内部的一个驱动机制。
Oracle按每三秒钟把数据库分成连续的间隔,每个三秒钟间隔用一个十进制的数字序列唯一表示,即称SCN(system change number),一个SCN就是一个检查点间隔,唯一代表了数据库内的一个三秒钟时间段。
在SCN间隔更替时,检查点进程(CKPT)产生新的检查点信息SCN,并在第一时间把新的SCN在控制文件记录下来,然后CKPT一直等待三秒钟结束这一时间点的到来,即称完全检查点,在完全检查点时,CKPT会触发数据库写进程(DBWn),通知DBWn将当前检查点队列中已标记为提交状态的数据块从缓存高速缓冲区读出并写入到数据文件中,DBWn在执行前会首先触发一次日志写,确保写入数据文件的提交过的数据块所对应的的重做条目都已持久化在联机重做日志文件中。
在DBWn把检查点队列记录的所有已提交的数据块全部成功写入数据文件后,CKPT会用控制文件头记录SCN把数据库全部的数据文件头的SCN字段值刷新一遍,刷新完成后,每个数据文件头的的SCN字段值和控制文件保持一致(一致性数据库的标志)。
在Oracle内部,检查点机制在实例启动后就持续不间断地向前推进。
目的:执行实例恢复 
(实例故障时自动执行实例恢复)

在这里插入图片描述

四、 实例恢复过程 13:28

在这里插入图片描述

https://blog.csdn.net/hezuijiudexiaobai/article/details/108802237#3__1212_1216_16shutdown immediate非完全检查点强制检查点 1.5s保证将内存中提交过的所有数据块写入数据文件并刷新数据文件头,这种情况也确保了数据库的一致性,表示没有数据丢失断电、硬件故障、强制关机 导致内存中大量提交过的数据块没有写入数据文件,同时数据文件头也没有刷新实例重启 OPEN阶段系统监视器进程(根据控制文件的记录打开每一个数据文件时就会发现数据库没有同步过)自动执行实例恢复前滚(将重做日志更改(已提交的和未提交的)应用到数据文件)打开每个数据文件时会记录该文件头已同步过的 SCN 值已同步过得最小得SCN 联机重做日志 [逆向匹配] 找到包含该 SCN 的第一条重做条目,然后从下一个 SCN 的第一条重做条目开始把每一条重做记录所对应的事务都重新执行一遍, 重做日志文件[结尾]数据文件 截止到故障点的所有已提交和未提交的数据库修改,但是未提交的更改是不应该写入到数据库的重做条目是在事务开始执行时就产生了,但是同时开始执行的事务不一定同时结束,那些跨故障点的事务虽然没有提交,但重做条目在事务开始执行时就已经按顺序写入重做日志缓冲区并很快写入联机重做日志文件组。回退(已执行但尚未提交的更改会返回到初始状态)只读方式遍历所有刚才前滚得重做条目事务提交时的SCN和时间戳 为空还原数据 覆盖修改相应元数据读写状态
注:12c 专有服务器模式
  • 前滚和回滚


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部