Oracle实例恢复
Oracle实例恢复原理
首先从事物说起,当执行update开启一个事物的时候,首先需要在buffer cache中找到可用的块(block)更新数据,然后构造cr块,将update之前的数据放入到undo中,同时会在log buffer内写日志,log buffer内数据每隔3秒通过lgwr进程将往redo log写日志,在这个过程更改的数据还在内存中,产生脏数据,直到dbwr进程将脏数据写入到磁盘,如果脏数据还未写入磁盘,脏数据中包括提交或未提交的,这个时候由于掉掉或其他原因导致数据库意外宕机,主机恢复后重启数据库,Oracle会由SMON进程自动进行实例恢复为什么会发生实例恢复,这得提到oracle的SCN,在oracle中存在4个scn,system SCN,datafile SCN,结束SCN和datafile header SCN,在Oracle正常关闭的情况下,数据库会产生完全检查点,会通过DBWR进程将脏块写到磁盘,更新着4个SCN值相同,在非正常关闭的情况下,当数据库启动到mount状态时,oracle会发现last scn并不是等于其它3个SCN, 而是等于NULL,这表示Oracle在shutdown时没有进行checkpoint,下次开机必须进行crash recovery(实例恢复)。oracle的SCN什么时候会发生变化,上述在log buffer内写日志的时候,会产生增量检查点,增量检查点并不会去更新数据文件头,以及控制文件中数据库SCN以及数据文件条目的SCN信息,而只是每3秒由CKPT进程去更新控制文件中的low cache rba信息(RBA含义redo block adress),也就是检查点的位置。系统SCN、数据文件SCN、数据文件头部SCN的值真正发生变化的时候是在redo文件由ACTIVE变为INACTIVE时,才会更新,这3个值等于ACTIVE, CURRENT中最老的一个日志文件的头部的first SCN,(redo日志文件各状态解释:CURRENT表示当前正在使用的日志文件,ACTIVE表示日志文件中对应的脏块还没有写到磁盘中,而INACTIVE则表示日志文件中对应的所有脏块都写到了磁盘)Oracle实例恢复的起点与终点,以实验为例说明:
1、首先在测试数据库创建测试数据提交,在buffer cache产生脏块
create table test(id number,name varchar2(22))
insert into test values(1,'hh')
commit
2、做一次控制文件转储
SQL> alter session set events 'immediate trace name controlf level 12';
Session altered.
3、非正常关闭数据库
shutdown abort
4、启动数据库,做一次控制文件转储
SQL> alter session set events 'immediate trace name controlf level 12';
Session altered.
5,检查对比两次转储文件内容
第一次转储信息:
DATABASE ENTRY
(size = 316, compat size = 316, section max = 1, section in-use = 1,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 1, numrecs = 1)
04/06/2017 23:27:11
DB Name "TSS"
Database flags = 0x50404001 0x00001200
Controlfile Creation Timestamp 04/06/2017 23:27:11
Incmplt recovery scn: 0x0000.00000000
Resetlogs scn: 0x0000.00000001 Resetlogs Timestamp 04/06/2017 23:27:11
Prior resetlogs scn: 0x0000.00000000 Prior resetlogs Timestamp 01/01/1988 00:00:00
Redo Version: compatible=0xb200400
#Data files = 8, #Online files = 8
Database checkpoint: Thread=1 scn: 0x0000.0022eb8b
Threads: #Enabled=1, #Open=1, Head=1, Tail=1
可知这时数据库的检查点scn: 0x0000.0022eb8b,转化为10进制:2288523
SQL> select to_number('22eb8b','XXXXXXXX') from dual;
TO_NUMBER('22EB8B','XXXXXXXX')
2288523
CHECKPOINT PROGRESS RECORDS
(size = 8180, compat size = 8180, section max = 11, section in-use = 0,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 2, numrecs = 11)
THREAD #1 - status:0x2 flags:0x0 dirty:65
low cache rba:(0x76.ab2.0) on disk rba:(0x76.b43.0)
on disk scn: 0x0000.0022f1cd 10/27/2017 15:17:00
resetlogs scn: 0x0000.00000001 04/06/2017 23:27:11
heartbeat: 958525302 mount id: 2083188020
检查点进程信息记录了low cache rba及on disk rba的值
low cache rba含义解释:0x76表示sequence号,ab2表示块号,on disk rba内值含义相同
所以此时low cache rba对应的sequence为118 ,block号为2738,on disk rba对应的sequence为118 ,block号为2883
数据库启动后转储的控制文件信息
* 2017-10-27 15:18:08.577
* SESSION ID:(16.3) 2017-10-27 15:18:08.577
* CLIENT ID:() 2017-10-27 15:18:08.577
* SERVICE NAME:() 2017-10-27 15:18:08.577
* MODULE NAME:(sqlplus@single (TNS V1-V3)) 2017-10-27 15:18:08.577
* ACTION NAME:() 2017-10-27 15:18:08.577
Thread 1 checkpoint: logseq 118, block 2, scn 2288523
cache-low rba: logseq 118, block 2738
on-disk rba: logseq 118, block 2884, scn 2290131
start recovery at logseq 118, block 2738, scn 0
数据库的alert信息
ALTER DATABASE OPEN
Beginning crash recovery of 1 threads
Started redo scan
Completed redo scan
read 73 KB redo, 65 data blocks need recovery
**Started redo application at
Thread 1: logseq 118, block 2738**
Recovery of Online Redo Log: Thread 1 Group 1 Seq 118 Reading mem 0
Mem# 0: /home/oracle/oradata/tss/redo01.log
Completed redo application of 0.05MB
**Completed crash recovery at
Thread 1: logseq 118, block 2884, scn 2310131**
65 data blocks read, 65 data blocks written, 73 redo k-bytes read
LGWR: STARTING ARCH PROCESSES
Fri Oct 27 15:18:08 2017
ARC0 started with pid=18, OS id=2400
ARC0: Archival started
LGWR: STARTING ARCH PROCESSES COMPLETE
ARC0: STARTING ARCH PROCESSES
Fri Oct 27 15:18:09 2017
ARC1 started with pid=19, OS id=2402
Thread 1 advanced to log sequence 119 (thread open)
Fri Oct 27 15:18:09 2017
ARC2 started with pid=20, OS id=2404
Thread 1 opened at log sequence 119
Current log# 2 seq# 119 mem# 0: /home/oracle/oradata/tss/redo02.log
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
SMON: enabling cache recovery
ARC1: Archival started
ARC2: Archival started
ARC1: Becoming the 'no FAL' ARCH
ARC1: Becoming the 'no SRL' ARCH
ARC2: Becoming the heartbeat ARCH
Fri Oct 27 15:18:09 2017
ARC3 started with pid=21, OS id=2406
Archived Log entry 98 added for thread 1 sequence 118 ID 0x7b19ed8f dest 1:
[2398] Successfully onlined Undo Tablespace 2.
Undo initialization finished serial:0 start:2048784 end:2048814 diff:30 (0 seconds)
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is ZHS16GBK
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Fri Oct 27 15:18:10 2017
QMNC started with pid=22, OS id=2408
ARC3: Archival started
ARC0: STARTING ARCH PROCESSES COMPLETE
Completed: ALTER DATABASE OPEN
Fri Oct 27 15:28:10 2017
Starting background process SMCO
Fri Oct 27 15:28:10 2017
SMCO started with pid=26, OS id=2509
从上述alert log我们可以知道,Oracle做Instance Recovery的起点是logseq 118, block 2738;终点是logseq 118, block 2884从第一次控制文件的dump文件我们可以看到控制文件里记录的Low Cache RBA是(0x76.ab2.0,转换过来就是Low Cache RBA的logfile sequence是118,logfile block number是2738。”这和alert log里记录的Instance Recovery的起点一致,即Instance Recovery的起点就是Low Cache RBA;数据库启动后控制文件的dump文件信息记录的on-disk rba的 logseq 118, block 2884,与alert日志Completed crash recovery恢复记录的logseq 118, block 2884一致,即Instance Recovery的终点就是on-disk rba
Oracle实例恢复相关推荐
- Oracle 实例恢复--转自沙弥的世界
--======================= -- Oracle 实例恢复 --======================= 一.Oracle实例失败 Oracle实例失败多为实例非一致性关闭 ...
- Oracle 实例恢复时 前滚(roll forward) 后滚(roll back) 问题
在ITPUB 论坛上看到一个有关实例恢复时 前滚(roll forword)和回滚(roll back)的讨论.在这里小整理一下,也理理自己的一个思路. 一. 什么时候需要实例恢复 在shutdown ...
- Oracle 实例恢复时 前滚(roll forward) 后滚(roll back) 问题
在ITPUB 论坛上看到一个有关实例恢复时 前滚(roll forword)和回滚(roll back)的讨论.在这里小整理一下,也理理自己的一个思路. 一. 什么时候需要实例恢复 在shutdown ...
- oracle实例恢复 redo,ORACLE不完全恢复之current或active状态redo损坏(二)
完全恢复:是指介质恢复阶段(即执行recover命令时)必须应用所有的应该应用的重做记录:它们包括从数据文件头中的检查点RBA所指向的重做记录开始,一直到在线的当前的重做日志的最新一条 记录结束,不论 ...
- 实例恢复(Instance Recovery)之前滚(Rolling Forward)和回滚(Rolling Back)
Oracle实例恢复(Instance Recovery)之前滚(Rolling Forward)和回滚(Rolling Back) 关于oracle实例恢复的一些理解,一直都有误区,今天通过查看相关 ...
- Oracle技术之实例恢复的顺序
通过alert仔细观查,发现实例恢复的顺序是: 1.前滚 2.open db 3.rollback(注意:SMON: Parallel transaction recovery tried 在Comp ...
- oracle的故障包括用户或应用程序故障_数据库实例错误,oracle 备份恢复基础
一,与基础 1.,备份简介 备份是数据的一个副本,一般包括控制文件和数据文件等 物理备份与逻辑备份 物理备份指物理文件的副本,逻辑备份是指使用工具抽取逻辑数据(例如,表或存储过程)并保存在二进制文件中 ...
- 将oracle冷备份恢复到另外一个数据库实例中
因更换服务器需要将Oracle数据库转移到另外台Oracle中. 说明: 1.测试环境为:windows server2003 和 oracle 10g. 2.2台服务器安装的程序目录一样,数据目录不 ...
- Oracle 实例崩溃恢复原理剖析 -- 检查点队列的作用与意义
这篇文章是参考甲骨论老相老师的教学视频 http://v.youku.com/v_show/id_XNDAxMzI3NzI4.html 所做的学习笔记 检查点队列的内容已经在上一篇文章里讲过: htt ...
- ora-01092: oracle 实例终止.强制断开连接,undo表空间故障特殊恢复(二)------ORA-01092: ORACLE 实例终止。强制断开连接...
原文出处:http://blog.csdn.net/wyzxg/archive/2010/09/10/5874726.aspx undo表空间故障特殊恢复(二)------ORA-01092: ORA ...
最新文章
- 搭完环境,最后登录时提示“与数据库连接失败,请与管理员联系”
- java 泛型接口 范型类 范型方法_泛型类、泛型方法、泛型接口
- 富文本编辑器中空格转化为a_如何对富文本编辑器(FCK Html Editor)的工具栏进行扩展?...
- mysql unicode转汉字_Mysql数据库表引擎与字符集
- 【thymeleaf 】在 thymeleaf 中使用 shiro 标签
- 银华基金:用小型机的群狼战术保驾护航!
- 5门可能衰落的编程语言
- scala中map添加值_如何在Scala Map中反转键和值
- mysql2008无法登陆_SQL2008不能登录实例
- 前端:JS/20/数组(数组的概念,数组元素,数组索引,数组元素的访问,数组的长度,数组的创建方法,数组的操作,实例:使用数组保存个人信息,实例:求数组所有值的平均值,数组对象的length属性)
- 供应商主数据和客户主数据各个字段进行显示、必输、隐藏和可选输入的配置学习...
- 算法与数据结构 第3章 高级排序算法中 归并算法改进
- bios开发 c语言,BIOS开发环境
- c语言标识符的语法规定,C语言语法规则.doc
- 小米笔记安装双系统linux,小米笔记本电脑怎么安装双系统?-小米win7
- 为flash游戏终极实用提速
- 硬改TP-WR886N v5 路由器刷入源码编译的openWRT/LEDE系统
- 零基础入门CV赛事- 街景字符编码识别
- PRN(20210426):Online Continual Learning with Maximally Interfered Retrieval
- Java jdk14.0.1安装简单步骤
热门文章
- MFC---CComboBox控件添加字符串函数InsertString
- 边缘计算与嵌入式系统
- MATLAB中SVM(支持向量机)的用法
- Machine Learning——Homework 7
- 二维数组,字符串,字符数组
- Python 3 实现插入排序
- mysql中in的问题
- 乐高积木格斗机器人组装拼图_玩积木、组装机器人的多重好处,你一定想不到!(认识机器人)...
- android 子线程的网络请求为什么还会造成界面卡顿_京东数科mPaaS:深度解读京东金融App(Android)的秒开优化实践...
- zookeeper 限制本机ip访问_解Bug之路-dubbo应用无法重连zookeeper