这里摘自郭老师的一篇文章,关于实例恢复的一些查看,跟着做了一下实验,感觉很神奇哦,对于理解oracle内部原理有好处。
摘自:http://blog.csdn.net/guoyjoe/article/details/9034425
什么时候会产生实例恢复呢?当你数据库服务器异常断电,重启数据库就会发生实例恢复。实例恢复是由数据库自动完成的,无须DBA的干涉。当然这里有个前提条件:数据文件、在线日志文件、控制文件不得有损坏。
我们用实验来分析一下实例恢复的整个过程吧!
1、在关闭数据库前,我们先看一下几个检查点的SCN
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1455180
--控制文件中保存的数据库检查点SCN号实际上在所有数据文件头部中最小的检查点SCN
SQL> select file#,checkpoint_change# from v$datafile;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 1455180
2 1455180
3 1455180
4 1455180
5 1455180
6 1455180
--控制文件中保存的数据文件检查点SCN:当一个检查点动作完成之后,Oracle就把每个数据文件的scn单独存放在控制文件中
SQL>select file#,checkpoint_change#
from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 1455180
2 1455180
3 1455180
4 1455180
5 1455180
6 1455180
--每个数据文件的文件头中的检查点SCN
这三个检查点的SCN一致,接下来模拟异常断电,重启机器
2、此命令可以模拟异常断电
SQL> shutdown abort;
ORACLEinstance
shut down.
3、监控告警日志
[oracle@guoyj
trace]$ tail -f alert_bxocp.log
Starting background process VKRM
Tue Dec 11 22:54:41 2012
VKRM started with pid=24, OS id=12500
Tue Dec 11 22:58:11 2012
Shutting down instance (abort)
License high water mark = 3
USER (ospid: 12479): terminating the instance
Instance terminated by USER, pid = 12479
Tue Dec 11 22:58:12 2012
Instance shutdown complete
4、数据库启动到MOUNT状
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area839282688 bytes
Fixed Size 2233000 bytes
Variable Size 524291416 bytes
Database Buffers 310378496 bytes
Redo Buffers 2379776 bytes
Database mounted.
5、再确定一下这个时间的检查点SCN
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
1455180
SQL> SQL>select file#,checkpoint_change# from v$datafile;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 1455180
2 1455180
3 1455180
4 1455180
5 1455180
6 1455180
6 rows selected.
SQL> select file#,checkpoint_change# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 1455180
2 1455180
3 1455180
4 1455180
5 1455180
6 1455180
发现与异常断电前的检查点的SCN一致,这里一致无须介质恢复。
先不着急open数据库,我们做一些dump
6、dump的控制文件
alter session set events 'immediate trace name CONTROLF level 12';
取部分内容:
***************************************************************************
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)
12/07/2012 10:36:14
DB Name "BXOCP"
Database flags = 0x00404000 0x00001000
Controlfile Creation Timestamp12/07/2012 10:36:15
Incmplt recovery scn: 0x0000.00000000
Resetlogs scn: 0x0000.000f30dc Resetlogs Timestamp12/07/2012 10:36:16
Prior resetlogs scn: 0x0000.00000001 Prior resetlogs Timestamp09/17/2011 09:46:04
Redo Version: compatible=0xb200000
#Data files = 6, #Online files = 6
Database checkpoint: Thread=1 scn: 0x0000.0016344c --数据库检查点SCN=16344c转成10进制为1455180
|
Threads: #Enabled=1, #Open=1, Head=1, Tail=1
***************************************************************************
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:55
low cache rba:(0x13.3.0) on disk rba:(0x13.a6.0)
-- low cache rba:(0x13.3.0)实例恢复的起点:19号日志,第3个块,第0个字节
--on disk rba:(0x13.a6.0):实例恢复的终点:19号日志,第166个块,第0个字节
|
on disk scn: 0x0000.0016359c 12/11/2012 22:57:42
resetlogs scn: 0x0000.000f30dc 12/07/2012 10:36:16
heartbeat: 801789080 mount id: 848836772
THREAD #2 - status:0x0 flags:0x0 dirty:0
low cache rba:(0x0.0.0) on disk rba:(0x0.0.0)
on disk scn: 0x0000.00000000 01/01/1988 00:00:00
resetlogs scn: 0x0000.00000000 01/01/1988 00:00:00
heartbeat: 0 mount id: 0
***************************************************************************
DATA FILE RECORDS
***************************************************************************
(size = 520, compat size = 520, section max = 100, section in-use = 6,
last-recid= 43, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 11, numrecs = 100)
DATA FILE #1:
name #7: /oradata/bxocp/system01.dbf
creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:121 scn: 0x0000.0016344c 12/11/2012 22:54:36
--控制文件中保存的数据文件检查点SCN=16344c转成10进制为1455180
Stop scn: 0xffff.ffffffff 12/11/2012 22:53:05
--结束的SCN填无穷大,说明是异常关机的,重启数据库必须做实例恢复
|
Creation Checkpointed at scn:0x0000.00000007 09/17/2011 09:46:08
thread:0 rba:(0x0.0.0)
7、dump数据文件头
alter session set events 'immediate trace name file_hdrs level 10';
显示数据文件头的部分内容:
V10 STYLE FILE HEADER:
Compatibility Vsn = 186646528=0xb200000
Db ID=848459038=0x3292751e, Db Name='BXOCP'
Activation ID=0=0x0
Control Seq=2099=0x833, File size=79360=0x13600
File Number=2, Blksiz=8192, File Type=3 DATA
Tablespace #1 - SYSAUXrel_fn:2
Creation at scn: 0x0000.0000088c 09/17/2011 09:46:16
Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0
reset logs count:0x2fc45da0 scn: 0x0000.000f30dc
prev reset logs count:0x2d6c775c scn: 0x0000.00000001
recovered at 12/11/2012 22:54:36
status:0x4 root dba:0x00000000 chkpt cnt: 121 ctl cnt:120
begin-hot-backup file size: 0
Checkpointed at scn:0x0000.0016344c 12/11/2012 22:54:36
--数据文件的文件头中的检查点SCN=16344c转成10进制为1455180
thread:1 rba:(0x13.2.10)
--重做日志的地址0x13.2.10->
19号日志,第2号块,第16个字节开始恢复
|
注意:
从控制文件中得到重做日志恢复起始地址:
low cache rba:(0x13.3.0):19号日志,第3个块,第0个字节开始恢复
从数据文件头部得到重做日志恢复起始地址:
thread:1 rba:(0x13.2.10):9号日志,第2号块,第16个字节开始恢复
8、最后我们打开数据库,然后监控告警日志alert_bxocp.log日志,看是怎么恢复的
[oracle@guoyj trace]$ tail -f alert_bxocp.log
alter database open
Beginning crash recovery of 1 threads
Started redo scan
Completed redo scan
read 81 KB redo, 55 data blocks need recovery
Started redo application at
Thread 1: logseq 19, block 3 --实例恢复开始的重做日志:19号日志第3个块
|
Recovery of Online Redo Log: Thread 1 Group 1 Seq 19 Reading mem 0
Mem# 0: /oradata/bxocp/redo01.log
Completed redo application of 0.06MB
Completed crash recovery at
Thread 1: logseq 19, block 166, scn 1475516--实例恢复结束点的重做日志:19号日志第166个块
|
55 data blocks read, 55 data blocks written, 81 redo k-bytes read
Tue Dec 11 23:46:42 2012
Thread 1 advanced to log sequence 20 (thread open)
Thread 1 opened at log sequence 20
Current log# 2 seq# 20 mem# 0: /oradata/bxocp/redo02.log
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
[12867] Successfully onlined Undo Tablespace 2.
Undo initialization finished serial:0 start:20725234 end:20725294 diff:60 (0 seconds)
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
Tue Dec 11 23:46:42 2012
SMON: enabling cache recovery
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
Tue Dec 11 23:46:43 2012
QMNC started with pid=21, OS id=13839
Completed: alter database open
Tue Dec 11 23:46:44 2012
Starting background process CJQ0
Tue Dec 11 23:46:44 2012
CJQ0 started with pid=22, OS id=13851
Setting Resource Manager plan SCHEDULER[0x318A]:DEFAULT_MAINTENANCE_PLAN via scheduler window
Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter
Tue Dec 11 23:46:47 2012
Starting background process VKRM
Tue Dec 11 23:46:47 2012
VKRM started with pid=23, OS id=13857
9、可以看出,实例恢复的起始的重做日志是以控制文件中的low cache rba:(0x13.3.0):19号日志,第3个块,第0个字节开始恢复,而不是从文件头的thread:1
rba:(0x13.2.10)
--重做日志的地址0x13.2.10-> 19号日志,第2号块,第16个字节开始恢复
10、最后总结一下实例恢复
(1)数据文件、在线日志文件、控制文件不得有损坏
(2)数据库自动恢复,无需DBA干涉
(3)恢复只需在线日志文件,无需归档日志
(4)数据库在open的时候开始实例恢复
实际上我做的这个实例恢实验的还没有写完整,还有最后一步回滚!这个就留给你们思考!
实例恢复三步:前滚--->打开库---->后滚(也叫回滚)
其实:On
Disk RBA不是Instance Recovery的终点!!!
分享到:
相关推荐
本书给出了大量取自实际工作现场的实例,在分析实例的过程中,兼顾深度与广度,不仅对实际问题的现象、产生原因和相关的原理进行了深入浅出的讲解,更主要的是,结合实际应用环境,提供了一系列解决问题的思路和...
深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 出 版 社:人民邮电出版社 出版时间:2009-1-1 页 数:527 内容简介 针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据...
深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 出 版 社:人民邮电出版社 出版时间:2009-1-1 页 数:527 内容简介 针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据...
深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 出 版 社:人民邮电出版社 出版时间:2009-1-1 页 数:527 内容简介 针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据...
演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology 文档。 P2P视频技术源码(含开发文档) 目前的协议有如下一些特点: 1) 客户向服务器发送请求, 每个请求的长度不定. 请求...
最后提出数据库定期维护的必要性,建议了自动备份、性能监控、日志清理等具体维护措施并提供代码实例。内容结构清晰,点评精当。 适合人群: 需要学习数据库管理和维护知识的学习者。文中具体的技术点解析及代码示例...
深入解析:oracle drop table purge内部原理及异常恢复 数据时代万象更新-从数据库技术演进看国产数据库机遇 一次特殊的Oralce 硬解析性能问题的技术分享 CloudQuery 权限管理体系在证券行业的应用 DML操作时索引是...
深入剖析Oracle的网络联机架构与设定,包含各类“网络服务组态文件”;详细介绍Oracle数据库的备份与恢复,并列举多项功能强大的复原管理工具;针对数据库、实体结构与Instance讲解效能调校的重要性,并以实例示范;...
深入剖析Oracle的网络联机架构与设定,包含各类“网络服务组态文件”;详细介绍Oracle数据库的备份与恢复,并列举多项功能强大的复原管理工具;针对数据库、实体结构与Instance讲解效能调校的重要性,并以实例示范;...
深入剖析Oracle的网络联机架构与设定,包含各类“网络服务组态文件”;详细介绍Oracle数据库的备份与恢复,并列举多项功能强大的复原管理工具;针对数据库、实体结构与Instance讲解效能调校的重要性,并以实例示范;...
复制代码 代码如下:<?... //8805sleep(10);... 您可能感兴趣的文章:深入解析PHP中的(伪)多线程与多进程PHP多进程编程实例深入探究PHP的多进程编程方法PHP下操作Linux消息队列完成进程间通信的方法PH
《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》,即将上架发行,此书从Web应用、数据备份与恢复、网络存储应用、运维监控与性能优化、集群高级应用等多个方面深入讲解了如何构建高性能的Linux服务器。...
从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...
从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...
从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...
从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...
从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...
18-配置主机名及服务器hosts文件解析.avi 19-配置服务器间心跳的连接.avi 20-安装heartbeat软件及配置文件讲解.avi 21-heartbeat的主要配置文件参数讲解.avi 22-实战配置heartbeat配置文件.avi 23-启动heartbeat服务...
4.6 HTTP通信 4.6.1 HTTP请求 4.6.2 HTTP应答 4.7 实例总结 第二篇 深入解析高性能服务器编程第5章 Linux网络编程基础API 5.1 socket地址API 5.1.1 主机字节序和网络字节序 5.1.2 通用socket地址 5.1.3 ...
前面的话 错误处理对于web应用程序开发至关重要,不...当代码解析或运行时发生错误,javascript引擎就会自动产生并抛出一个error对象的实例,然后整个程序就中断在发生错误的地方 console.log(t);//Uncaught Referen