Oracle原理大图

概念

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

一、Oracle数据库

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

二、架构

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

三、系统全局区

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

SGA(System Global Area)(系统全局区)
负责RDBMS的管理功能
    Large pool(大池)  
    Java pool
    Streams pool
    Shared pool(共享池)    
        Libraray Cache
        	Shared SQL Area(共享SQL区)
        Data Dictionary Cache(数据字典)
        Fixed Area
        Other
    LRU Lists(最近最少使用列表)
    CKPT Queue
    Database Buffer Cache
    Redo Log Buffer
四、PGA
PGA(Program Global Area)(程序全局区)
    Stack Space(堆栈空间)
    User Global Area(用户全局区)
五、进程

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

Listener

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

在这里插入图片描述

+DATA
    Spfile(服务器参数文件) 
    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(还原段中还原数据覆盖高速缓冲区数据) commit

commit
    检查点机队列中相关数据块的提交状态修改为已提交
    释放持有的锁资源
    返回给用户进程提交完成的信息

在用户应用看来就执行成功了
修改只是在内存中的修改,还需要写入磁盘文件来持久化保存
三、 检查点机制 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_16
    shutdown immediate
    非完全检查点
    强制检查点 1.5s
    保证将内存中提交过的所有数据块写入数据文件并刷新数据文件头,这种情况也确保了数据库的一致性,表示没有数据丢失
    
    断电、硬件故障、强制关机 导致内存中大量提交过的数据块没有写入数据文件,同时数据文件头也没有刷新
    实例重启 OPEN阶段
    系统监视器进程(根据控制文件的记录打开每一个数据文件时就会发现数据库没有同步过)
    自动执行实例恢复
        前滚(将重做日志更改(已提交的和未提交的)应用到数据文件)
            打开每个数据文件时会记录该文件头已同步过的 SCN 值
            已同步过得最小得SCN 联机重做日志 [逆向匹配] 
            找到包含该 SCN 的第一条重做条目,然后从下一个 SCN 的第一条重做条目开始
            把每一条重做记录所对应的事务都重新执行一遍, 重做日志文件[结尾]
            数据文件 截止到故障点的所有已提交和未提交的数据库修改,但是未提交的更改是不应该写入到数据库的
                重做条目是在事务开始执行时就产生了,但是同时开始执行的事务不一定同时结束,那些跨故障点的事务虽然没有提交,
                但重做条目在事务开始执行时就已经按顺序写入重做日志缓冲区并很快写入联机重做日志文件组。
        回退(已执行但尚未提交的更改会返回到初始状态)
            只读方式
            遍历所有刚才前滚得重做条目
            事务提交时的SCN和时间戳 为空
                还原数据 覆盖
                修改相应元数据
            读写状态
注:12c 专有服务器模式
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能家居控制系统原理图如下: ![智能家居控制系统原理图](https://img-blog.csdn.net/20180428113641420) 智能家居控制系统主要由以下几部分组成: 1. 智能家居设备:包括温度传感器、湿度传感器、光照传感器、智能插座、智能灯具、智能门锁等设备。这些设备通过物联网协议与控制层进行通信,向控制层提供设备状态和传感器数据。 2. 控制层:控制层是智能家居控制系统的核心,负责智能家居设备的控制和管理。控制层通过物联网协议和智能家居设备进行通信,接收设备状态和传感器数据,并根据用户需求和设备状态进行控制和管理。 3. 移动应用程序:移动应用程序是用户与智能家居控制系统进行交互的主要方式,用户可以通过移动应用程序来控制智能家居设备、管理设备状态和数据。 4. 云平台:云平台是智能家居控制系统的数据中心,负责智能家居设备的远程控制和管理。云平台可以提供大数据分析、机器学习等功能,帮助用户更好地了解设备的使用情况和节能情况。 5. 数据库管理系统:控制层需要使用数据库管理系统来管理和存储智能家居设备的数据和状态,例如MySQL、Oracle、MongoDB等。 综上所述,智能家居控制系统原理图展示了智能家居控制系统的主要组成部分,包括智能家居设备、控制层、移动应用程序、云平台和数据库管理系统等。这些部分共同协作,实现智能家居设备的控制和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值