Oracle基础知识Word格式文档下载.docx
《Oracle基础知识Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Oracle基础知识Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
![Oracle基础知识Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/24/b17a2574-5b1e-4983-9dde-e5e76a21d7f4/b17a2574-5b1e-4983-9dde-e5e76a21d7f41.gif)
FixedSize
2089336bytes
VariableSize
486542984bytes
DatabaseBuffers
570425344bytes
RedoBuffers
6295552bytes
Databasemounted.
alterdatabaseopen;
CrashRecovery将从alterdatabaseopen开始,我们来观察其日志
==================alert.log====================
alterdatabaseopen
TueJun1418:
19:
532011
Beginningcrashrecoveryof1threads
parallelrecoverystartedwith2processes
Startedredoscan
Completedredoscan
0redoblocksread,0datablocksneedrecovery
Startedredoapplicationat
Thread1:
logseq1004,block1124,scn17136185
RecoveryofOnlineRedoLog:
Thread1Group2Seq1004Readingmem0
Mem#0:
/flashcard/oradata/G10R2/onlinelog/o1_mf_2_6v34jokt_.log
Mem#1:
/s01/flash_recovery_area/G10R2/onlinelog/o1_mf_2_6v34jotq_.log
Completedredoapplication
Completedcrashrecoveryat
logseq1004,block1124,scn17156186
0datablocksread,0datablockswritten,0redoblocksread
LGWR:
STARTINGARCHPROCESSES
ARC0:
Archivalstarted
STARTINGARCHPROCESSESCOMPLETE
ARC0startedwithpid=16,OSid=7829
Thread1advancedtologsequence1005(threadopen)
Thread1openedatlogsequence1005
Currentlog#3seq#1005mem#0:
/flashcard/oradata/G10R2/onlinelog/o1_mf_3_6v34jpmp_.log
Currentlog#3seq#1005mem#1:
/s01/flash_recovery_area/G10R2/onlinelog/o1_mf_3_6v34jpyn_.log
Successfulopenofredothread1
Becomingthe'
noFAL'
ARCH
noSRL'
BecomingtheheartbeatARCH
SMON:
enablingcacherecovery
db_recovery_file_dest_sizeof204800MBis6.81%used.Thisisa
user-specifiedlimitontheamountofspacethatwillbeusedbythis
databaseforrecovery-relatedfiles,anddoesnotreflecttheamountof
spaceavailableintheunderlyingfilesystemorASMdiskgroup.
542011
SuccessfullyonlinedUndoTablespace1.
enablingtxrecovery
DatabaseCharactersetisUTF8
OpeningwithinternalResourceManagerplan
whereNUMAPG=1,CPUs=2
replication_dependency_trackingturnedoff(noasyncmultimasterreplicationfound)
StartingbackgroundprocessQMNC
QMNCstartedwithpid=17,OSid=7831
552011
Completed:
alterdatabaseopen
注意上述单实例CrashRecovery到数据库打开的整个过程:
Beginningcrashrecoveryof1threads
Startedredoscan
Completedredoscan
Startedredoapplicationat
Completedredoapplication
Completedcrashrecoveryat
SMON:
SuccessfullyonlinedUndoTablespace1
Completed:
从上述步骤中我们可以看到三种恢复名词,即:
crashrecovery
cacherecovery
txrecovery
这和官方文档所描述的CrashRecovery概念是不一致的,我们现在来理清这几种recovery。
crashrecovery包含对redo的scan和application,显然其完成的是RollingForward前滚的工作,告警日志中出现的crashrecovery等同于官方文档中介绍的”cacherecovery”,我们可以将”Completedcrashrecovery”看做前滚完成的标志。
而txrecovery从字面就可以看出实际上是TransactionRecovery,txrecovery发生在UndoTablespaceonline之后(回滚事务的前提是Undo可用),数据完成打开操作之前(“Completed:
alterdatabaseopen”)。
注意txrecovery并不要求数据库打开前完成,仅仅是在数据库打开之前由smon启动(“SMON:
enablingtxrecovery”)。
剩下的唯一的问题是,这里的cacherecovery是什么?
显然它不是官方文档中所描述的”cacherecovery”,几乎没有任何文档介绍存在这样一个recovery操作,这也是本文重点要介绍的。
我们来看另一个演示,这个演示用以说明cacherecovery还存在于最普通的不包含CrashRecovery的数据库打开过程中:
shutdownimmediate;
Databaseclosed.
Databasedismounted.
Databasealtered.
select*fromv$version;
BANNER
----------------------------------------------------------------
OracleDatabase10gEnterpriseEditionRelease10.2.0.4.0-64bi
PL/SQLRelease10.2.0.4.0-Production
CORE
10.2.0.4.0
Production
TNSforLinux:
Version10.2.0.4.0-Production
NLSRTLVersion10.2.0.4.0-Production
select*fromglobal_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
43:
522011
ARC0startedwithpid=14,OSid=8133
Currentlog#3seq#1005mem#0:
Currentlog#3seq#1005mem#1:
IncrementalcheckpointuptoRBA[0x3ed.624.0],currentlogtailatRBA[0x3ed.944.0]
QMNCstartedwithpid=15,OSid=8135
因为是cleanshutdown,所以这里不存在crashrecovery。
但这里同样出现了”SMON:
enablingcacherecovery”,可见cacherecovery是每次实例启动instancestartup必要执行的一种恢复操作。
但问题是,这个恢复操作到底针对何种对象?
实际上cacherecovery所要恢复的是rowcache,也就是我们常说的字典缓存(dictionarycache)。
关于这个结论,肯定有很多人要问我这样说的依据是什么,对应于这个”cacherecovery”的问题,我们很难从google中得到一些启示,因为它和官方文档所描述的”cacherecovery-rollingforward”存在重名的关系。
为了证明cacherecovery所恢复的是rowcache,我们需要一个实证,从正式的系统中得到验证。
要做到这一点是比较困难的,我们需要Oracle愿意把整个databaseopen的过程变成慢动作来供我们参考,验证要用到一些调试工具,例如gdb或者dbx。
我们首先将实例启动到mount状态,并对执行startup的LOCAL进程做gdb的breakpoint断点调试:
找出LOCAL进程的系统进程号SPID
selectspidfromv$process
2
whereaddrin(
3
selectpaddrfromv$session
4
wheresid=(selectdistinctsidfromv$mystat))
5
/
SPID
------------
8326
在实例startupnomount/mount后共享池的librarycache就是可用的
selectnamespacefromv$librarycachewheregets!
=0;
NAMESPACE
---------------
SQLAREA
TABLE/PROCEDURE
而rowcache则尚未被填充,因为字典缓存来源于自举对象(bootstrap$)和字典基表
selectparameter,count,getsfromv$rowcachewherecount!
norowsselected
另开一个terminal窗口,并执行对LOCAL进程8326的gdbbreakpoint调试
[oracle@rh2~]$gdb$ORACLE_HOME/bin/oracle8326
GNUgdb(GDB)
RedHat
EnterpriseLinux(7.0.1-23.el5)
Copyright(C)2009FreeSoftwareFoundation,Inc.
LicenseGPLv3+:
GNUGPLversion3orlater
Thisisfreesoftware:
youarefreetochangeandredistributeit.
ThereisNOWARRANTY,totheextentpermittedbylaw.
Type"
showcopying"
and"
showwarranty"
fordetails.
ThisGDBwasconfiguredas"
x86_64-RedHat-linux-gnu"
.
Forbugreportinginstructions,pleasesee:
...
Readingsymbolsfrom/s01/db_1/bin/oracle...(nodebuggingsymbolsfound)...done.
Attachingtoprogram:
/s01/db_1/bin/oracle,process8326
Readingsymbolsfrom/s01/db_1/lib/libskgxp10.so...(nodebuggingsymbolsfound)...done.
Loadedsymbolsfor/s01/db_1/lib/libskgxp10.so
Readingsymbolsfrom/s01/db_1/lib/libhasgen10.so...(nodebuggingsymbolsfound)...done.
Loadedsymbolsfor/s01/db_1/lib/libhasgen10.so
Readingsymbolsfrom/s01/db_1/lib/libskgxn2.so...(nodebuggingsymbolsfound)...done.
Loadedsymbolsfor/s01/db_1/lib/libskgxn2.so
Readingsymbolsfrom/s01/db_1/lib/libocr10.so...(nodebuggingsymbolsfound)...done.
Loadedsymbolsfor/s01/db_1/lib/libocr10.so
Readingsymbolsfrom/s01/db_1/lib/libocrb10.so...(nodebuggingsymbolsfound)...done.
Loadedsymbolsfor/s01/db_1/lib/libocrb10.so
Readingsymbolsfrom/s01/db_1/lib/libocrutl10.so...(nodebuggingsymbolsfound)...done.
Loadedsymbolsfor/s01/db_1/lib/libocrutl10.so
Readingsymbolsfrom/s01/db_1/lib/libjox10.so...(nodebuggingsymbolsfound)...done.
Loadedsymbolsfor/s01/db_1/lib/libjox10.so
Readingsymbolsfrom/s01/db_1/lib/libclsra10.so...(nodebuggingsymbolsfound)...done.
Loadedsymbolsfor/s01/db_1/lib/libclsra10.so
Readingsymbolsfrom/s01/db_1/lib/libdbcfg10.so...(nodebuggingsymbolsfound)...done.
Loadedsymbolsfor/s01/db_1/lib/libdbcfg10.so
Readingsymbolsfrom/s01/db_1/lib/libnnz10.so...(nodebuggingsymbolsfound)...done.
Loadedsymbolsfor/s01/db_1/lib/libnnz10.so
Readingsymbolsfrom/usr/lib6