oracle中scn(系统改变号)

系统scn:                 select checkpoint_change# from v$database;

文件scn:                 select name,checkpoint_change# from v$datafile;

结束scn:                 select name,last_change# from v$datafile;

数据文件头部scn:     select name,checkpoint_change# from v$datafile_header;

系统scn、文件scn、结束scn,这三者是在控制文件中,数据文件头部scn在数据文件上。

     数据库正常运行,系统scn、文件scn、数据文件头部scn(也称为开始scn),这三者是相同的,而结束scn是空,即无穷大(因为正常运行,还未关闭啊),这是正常运行的情况,那么当正常关闭时,四者的scn号是相同的。假如发生非正常关闭,结束scn是空值,那么下次启动数据库,oracle发现结束scn是空值,就知道上次是非正常关闭,所以就要进行实例恢复了。实例恢复需要的是redo log,那么oracle是如何确定使用哪个redo log?以及确定之后又该从该redo log哪里进行恢复的呢?下面做个实验。。。

    当前数据库的系统scn号:

这是redo log的一些信息:

      我们主要关注第一次改变编号和状态,我们可以看见,第3号日志组,序列号36的FIRST_CHANGE#和当前数据库的系统scn号一致,为什么呢,FIRST_CHANGE#又是什么呢?从查询结果我们可以看出,1号日志组是最旧的,2号次之,3号是最新的,这是从FIRST_CHANGE#可以看出来的,有FRIST就应该有NEXT啊,其实不难理解,下一个日志组的FIRST_CHANGE#其实就是这当前日志组的NEXT。所以例如1号日知组,FIRST_CHANGE#是1372964,NEXT是1395875。FIRST_CHANGE#的意义是该日志文件的第一条日志内容的scn号,NEXT就是该日志文件的最后一条内容的scn号了。那么如果此时数据库崩溃,数据文件的scn号是1398359,而3号日志文件的FIRST_CHANGE#也是1398359,且当3号日志组的状态是current,恢复就只要恢复3号日志组文件的内容就可以了,因为其他日志文件所记录的内容已写入到数据文件中。

      还有一种情况,如果三个日志组的状态是active、active、current,那么数据文件的scn号就会和比较旧的active的日志组的FIRST_CHANGE#一致,这时如果崩溃后恢复,那么三个日志组都会用到。

      结论:现在可以理解了,scn号的目的是为了保证数据库状态的一致性,而scn和redo log的FIRST_CHANGE#作用是,当实例恢复的时候,确定了该跑哪个日志组,才能将脏块重现在buffer cache中。而确定日志组后,又该从该日志组的哪条日志开始,就要从控制文件的LRBA中获取了(在我的上一个随笔检查点队列中有描述)。

转载于:https://www.cnblogs.com/oraclelike/p/6155512.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sicktim571操作手册_SICK激光传感器TIM310操作说明书

SICK激光传感器TIM310操作说明书最近更新时间:2015/1/23 13:31:29提 供 商:资料大小:1.2MB文件类型:PDF 文件下载次数:709次资料类型:浏览次数:5192次相关产品:详细介绍:…

Tengine 安装配置全过程

在先前的文章中介绍过Tengine,先前只是使用了运维人员配置好的内容,未自己进行过安装配置。周末闲来无事,对于Tengine进行了尝试性的安装。记录下面方便以后再做改进。Tengine官网上有个非常简单的教程,中间并未涉及到一些常用的设…

【Go】sync.WaitGroup 源码分析

WaitGroup sync.WaitGroup 用于等待一组 goroutine 返回,如: var wg sync.WaitGroup{}func do() {time.Sleep(time.Second)fmt.Println("done")wg.Done() }func main() {go do()go do()wg.Add(2)wg.Wait()fmt.Println("main done"…

什么是响应式设计?为什么要做响应式设计?响应式设计的基本原理是什么?...

页面的设计和开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整。具体的实践方式由多方面组成,包括弹性网格和布局、图片、css media query的使用等。无论用户正在使用笔记本还是iPad,我们的…

三个数相减的平方公式_快收好这份小学数学公式大全!孩子遇到数学难题时肯定用得上...

必背定义、定理公式1.三角形的面积=底高2 公式 S= ah22.正方形的面积=边长边长公式 S= aa3.长方形的面积=长宽公式 S= ab4.平行四边形的面积=底高公式 S= ah5.梯形的面积&#xff1d…

Eclipse 控制console

http://blog.csdn.net/leidengyan/article/details/5686691

【Go】sync.RWMutex源码分析

RWMutex 读写锁相较于互斥锁有更低的粒度,它允许并发读,因此在读操作明显多于写操作的场景下能减少锁竞争的次数,提高程序效率。 type RWMutex struct {w Mutex // held if there are pending writerswriterSem uint32 // sem…

add.attribute向前端传_前端知识-概念篇

1、一次完整的HTTP事务是怎样的一个过程?基本流程:a. 域名解析b. 发起TCP的3次握手c. 建立TCP连接后发起http请求d. 服务器端响应http请求,浏览器得到html代码e. 浏览器解析html代码,并请求html代码中的资源f. 浏览器对页面进行渲…

【数据库】一篇文章搞懂数据库隔离级别那些事(LBCC,MVCC)

MySQL 事务 文章比较长,建议分段阅读 后续如果有改动会在 Junebao.top 之前对事务的了解仅限于知道要么全部执行,要么全部不执行,能背出 ACID 和隔离级别,知其然但不知其所以然,现在觉得非常有必要系统学一下&#xff…

AFNetworking网络请求与图片上传工具(POST)

AFNetworking网络请求与图片上传工具&#xff08;POST&#xff09; .h文件 #import <Foundation/Foundation.h>/** 成功Block */ typedef void(^SuccessBlockType) (id responsData); /** 失败Block */ typedef void(^FaileBlockType) (NSError *error);interface NetD…

api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享

前言&#xff1a;一个整合SSM框架的高并发和商品秒杀项目,学习目前较流行的Java框架组合实现高并发秒杀API源码获取&#xff1a;关注头条号转发文章之后私信【秒杀】查看源码获取方式&#xff01;项目的来源项目的来源于国内IT公开课平台,质量没的说,很适合学习一些技术的基础,…

Golang 定时任务 github/robfig/cron/v3 使用与源码解析

Cron 源码阅读 robfig/cron/v3 是一个 Golang 的定时任务库&#xff0c;支持 cron 表达式。Cron 的源码真实教科书级别的存在&#xff08;可能是我菜 …&#xff09;,真的把低耦合高内聚体现地淋漓尽致&#xff0c;另外其中涉及的装饰器模式&#xff0c;并发处理等都很值得学习…

修改 cmd 字体为 Consolas

windows 下的 cmd 窗口默认的字体有点难看&#xff0c;长时间使用操作 node.js 有点小疲劳&#xff0c;可以修改注册表替换字体为 Consolas&#xff0c;并且可以全屏 cmd 窗口&#xff0c;代码如下&#xff1a; Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Conso…

mac下安装前端模板引擎Jinja2

在mac本上安装Jinja2&#xff0c;搜索网上介绍的经验&#xff0c;都是说使用easy_install或者pip安装&#xff0c;比如 #sudo easy_install Jinja2 #sudo pip install Jinja2 也有直接使用 #easy_install Jinja2的&#xff0c;但是我使用上述命令安装总是不成功&#xff0c;提示…

为什么要用python不用origin_Python告诉你为什么百度已死

Python3爬虫百度一下&#xff0c;坑死你&#xff1f;一、写在前面这个标题是借用的路人甲大佬的一篇文章的标题(百度一下&#xff0c;坑死你)&#xff0c;而且这次的爬虫也是看了这篇文章后才写出来的&#xff0c;感兴趣的可以先看下这篇文章。前段时间有篇文章《搜索引擎百度已…

关于 HTTP 的一切(HTTP/1.1,HTTP/2,HTTP/3,HTTPS, CORS, 缓存 ,无状态)

HTTP 为什么会出现 HTTP 协议&#xff0c;从 HTTP1.0 到 HTTP3 经历了什么&#xff1f;HTTPS 又是怎么回事&#xff1f; HTTP 是一种用于获取类似于 HTML 这样的资源的 应用层通信协议&#xff0c; 他是万维网的基础&#xff0c;是一种 CS 架构的协议&#xff0c;通常来说&…

AS 2.0新功能 Instant Run

Instant Run上手作为一个Android开发者&#xff0c;很多的时候我们需要花大量的时间在bulid&#xff0c;运行到真机&#xff08;虚拟机&#xff09;上&#xff0c;对于ios上的Playground羡慕不已&#xff0c;这种情况将在Android Studio 2.0有了很大改善&#xff0c;使用instan…

爬虫cookie过期_python instagram 爬虫

叶湘伦&#xff1a;【文字篇】如何系统地自学 Python&#xff1f;​zhuanlan.zhihu.com直接介绍一下具体的步骤以及注意点&#xff1a;instagram 爬虫注意点instagram 的首页数据是 服务端渲染的&#xff0c;所以首页出现的 11 或 12 条数据是以 html 中的一个 json 结构存在的…

php 无限循环

<?php header("Content-type:text/html;charsetutf-8"); $arr array( array(1, 0, 语文), array(2, 1, 数学), array(3, 0, 英文), array(4, 3, 美术), ); function xunhuan($pid 0) { global $arr; foreach ($arr as $value) { if ($value[1] $pid) { ech…

MySQL InnoDB 是如何存储数据的

InnoDB 是怎么存储数据的 本文是《MySQL 是怎样运行的 —— 从根儿上理解 MySQL》读书总结&#xff0c;强烈推荐这本书&#xff1b; CSDN 不能显示 SVG&#xff0c;可能有图片加载不出来&#xff0c;可以到 我的博客 上看。 数据目录 众所周之&#xff0c;MySQL 的数据是存储在…