




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
写得非常好的一篇关于Oracle的SCN上一篇 / 下一篇 2011-12-09 15:56:38 / 个人分类:转载他人文章 查看( 75 ) / 评论( 0 ) / 评分( 0 / 0 ) Oracle SCN详解(2008-01-07 15:01)分类:Oraclepre.Oracle中的SCN(system change number)和我们的北京时间的意义是相同的,SCN是Oracle中的时间号。为什么Oracle不用时间来界定呢?我在北京时间8:00的时候执行一条DML语句,然后修改机器上的时间为7:00,再执行一条DML语句。如果用机器上的时间区分的话,那Oracle根本区分不出来这两条DML语句的执行顺序而这一点对于Oracle是很重要的。所以它采用自己产生的SCN来区分所有操作的先后顺序。SCN设计的值很大,所以不用担心达到最大值后怎么办。可以查看系统当前的SCN号:SQL select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER- 464640326也可以查看系统当前保存的SCN号:SQL select checkpoint_change# from v$databaseCHECKPOINT_CHANGE#- 464639929如果此时数据库损坏,当重启时候需要修复的,就是这两个SCN之间的数据。这些数据保存在在线重做日志文件中:SQL select GROUP#, STATUS, FIRST_CHANGE# from v$log; GROUP# STATUS FIRST_CHANGE#- - - 1 INACTIVE 464633029 2 INACTIVE 464637664 3 CURRENT 464638303group1中保存的数据产生的SCN号为 464633029 至 464637664;group2中的SCN号为 464637664 至 464638303;group3中的SCN号为 464638303 至 464640326(当前SCN号)。所以,若此时执行shutdown abort并重启,执行crash recovery时,使用的在线重做日志文件为group3中的member。而通过v$log.status字段也能看到:group3的状态为current。Part I. 透析SCN号ITPUB个人空间4g.?4U2k TSCN是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字。当一笔交易commit时,LGWR会将log buffer写入redo log file,同时也会将该笔交易的SCN同步写入到redo log file内(wait-until-completed)。因此当你commit transaction时,在交易成功的讯息返回之前,LGWR必须先完整的完成上述行为之后,否则你是看不到提交成功的回应讯息。ITPUB个人空间 u7D.sQ可以查询目前系统最新的SCNZ/qfXh0SQLselect dbms_flashback.get_system_change_number from dual;kYFM1i4QUl,R0oi ore7N0可以理解,这里返回的SCN,也是目前redo log file最新的SCN纪录。因为commit后的交易才会有SCN,而一旦commit就会立刻写入redo log file中。ITPUB个人空间+tt+p#0S-FITPUB个人空间.L $0VfBGCHECKPOINT和SCN的关联ITPUB个人空间t_Cd&nQCheckpoint发生的目的就是要把存储在buffer内的已提交交易写回disk,否则一旦发生crash,需要进行recovery时,就必须花很多时间从redo log file内最后的SCN交易开始进行recovery,这样在商业应用上是很浪费时间和没有效率的。:Tv/iK0ITPUB个人空间vxl9Y9!r_3c当commit一笔交易时,只会立刻将redo buffer写入redo log file内,但是并不会马上将该update后的block(dirty block)同步写回disk datafile中,这是为了减少过多disk IO,所以采取batch方式写入。W-Nrv09V6cP#H7R.XR0When a checkpoint occurs. Oracle must update the headers of all datafiles to record the details of the checkpoint.This is done by the CKPT process.The CKPT process does not write blocks to disk; DBWn always performs that work.T$i0m*?%t0ITPUB个人空间_D O WpW hH/Q在shutdown normal or shutdown immediate下,也就是所谓的clean shutdown, checkpoint也会自动触发。当发生checkpoint时,会把SCN写到四个地方去。三个地方在control file 内,一个在datafile header。SJcm2zG0ITPUB个人空间&fsOCControl file三个地方为:y+fW(P9d!Ww&h01、 System checkpoint SCNITPUB个人空间HDDDn hTSQL select to_char(checkpoint_change#, XXXXXXXXXXXX) from v$database;ITPUB个人空间7, bwHFITPUB个人空间A8?;N-PlTO_CHAR(CHECKPOINT_CHANGE#,XXzROr!Ew-n0-ITPUB个人空间7CYgy0I!cH7161D7365DCz/K S(gaH?0ITPUB个人空间#H e HD.T_, aIW2、 Datafile checkpoint SCNITPUB个人空间m:p a9q(aF WSQL select name, to_char(checkpoint_change#,XXXXXXXXXXXX) from v$datafile where name like %gisdts01%;-d7W$j jPW a0+j,K&D+sZs0NAMEITPUB个人空间 V2n Zh:+JAf-ITPUB个人空间 mej/dAgarTO_CHAR(CHECKPOINT_CHANGE#,XX1eb%CB*P#B0-q:eY_!O:vMz3r(s0/gisdata/datafile/gisdts01.dbfITPUB个人空间xfb&u/7161D7365DC:.hoFJ#PU1g#K06zCU*WU303、 Stop SCN/n$h#O&h;e0SQL select name,last_change# from v$datafile where name like %gisdts01%;W pLL:Z;G|,B0NAME #E3_85v+GoR0-ITPUB个人空间:Q#Aj:Ud1/gisdata/datafile/gisdts01.dbf+nGH j fVT9MY3t0正常datafile在read-write mode运作下,last_change#一定是nullITPUB个人空间YZ,b:MHD?)_ITPUB个人空间KNRXN b%xIITPUB个人空间. *O pCy8v还有一个SCN在datafile header内ITPUB个人空间4S4N3yd8CL4、 Start SCNITPUB个人空间;k)B7l?rSQLselect name,to_char(checkpoint_change#,XXXXXXXXXXXX)from v$datafile_header where name like %gisdts01%;n3DOF(T:X%a0LZ1o0NAMEh G UzV0-:gz/A xeI m0TO_CHAR(CHECKPOINT_CHANGE#,XX!iUR(h!n&w0-ITPUB个人空间iC#O2dz5z4y/gisdata/datafile/gisdts01.dbfITPUB个人空间7o4S,L#fT)b:mBD 7161D7365DCITPUB个人空间Ej/+A(bED为什么储存在control file中要分为两个地方(system checkpoint scn, datafile checkpoint scn?)。当把一个tbs设为read-only时,他的scn会冻结停止,此时datafile checkpoint scn是不会再递增改变的,但是整体的system checkpoint scn却仍然会不断递增前进。所以这是为什么需要分别在两个地方储存SCN。+C_;y0oUq.*b0ITPUB个人空间nMZ正常shutdown database后,SCN会发生什么变化?fE G K-K- eIG6e0可以把数据库开在mount modehn6sj0SQL select to_char(checkpoint_change#,XXXXXXXXXXXX) from v$database;d+XHl-Q:|8p_0TO_CHAR(CHECKPOINT_CHANGE#,XXITPUB个人空间:i;QjY)Y-4TdQ*?O+l-07161D7455B9ITPUB个人空间!N;i MaQ5N4g+VSQLselect name,to_char(checkpoint_change#,XXXXXXXXXXXX),to_char(last_change#c %hmMt9RC0,XXXXXXXXXXXX) from v$datafile where name like %gisdts01%;ITPUB个人空间Y2FqLT%n%CNAME7|%GjUaD%n b0-ITPUB个人空间gNzLz!pr&NTO_CHAR(CHECKPOINT_CHANGE#,XX9U loxzl9jg6x0-ITPUB个人空间ic7B0T2d2CTO_CHAR(LAST_CHANGE#,XXXXXXXXITPUB个人空间%NH_,O? g-ITPUB个人空间.dK n5u/gisdata/datafile/gisdts01.dbfITPUB个人空间36px DxrYc7161D7455B9ITPUB个人空间5UP2m9W?y7161D7455B9ZP4PJrs r0可以看到储存在control file中的三个SCN的数值都是相同的,注意此时的stop scn不会是null,而是等于start scn。1:KDA4T0再来查询datafile header中的SCN:ITPUB个人空间af5x(t&F!HXJ:h$vSQL select name, to_char(checkpoint_change#,XXXXXXXXXXXX) from v$datafile_heaITPUB个人空间H7p7Tyder where name like %gisdts01%;A iA(V L.W!dee6I0NAMEI4ODm0gqn6P6E2J.J0-ITPUB个人空间UEl,AY)M,z jTO_CHAR(CHECKPOINT_CHANGE#,XXyA7v5c.T6| V)nm7V,l,Oc0-?2Ka/nn!z0/gisdata/datafile/gisdts01.dbfITPUB个人空间p1LkV7161D7455B9!H(jk o2U7J0ITPUB个人空间;Po9Mu;dV-X$yo当clean shutdown时,checkpoint会进行,并且此时datafile的stop scn和start scn会相同。等我们打开数据库时,oracle会检查datafile header中的start scn和存于control file中的datafile的scn是否相同,如果相同,接着检查start scn和stop scn是否相同,如果仍然相同,数据库会正常启动,否则就需要recovery.等到数据库open后,储存在control file中的stop scn就会恢复为null值,此时表示datafile是open在正常模式下。ITPUB个人空间8kU;6q gX9TA0T如果不正常shutdown(shutdown abort),则mount数据库后,会发现stop scn并不等于其它位置的scn,而是等于null。这表示oracle在shutdown时没有进行checkpoint,下次启动必须进行crash recovery。ITPUB个人空间&M%tCGuRz ?_AJ%gmCON0,v6Q$hIe!d!Z0Part II. Oracle SCN机制解析ITPUB个人空间s?(t4%kwX y&AITPUB个人空间a(H06XU#zSCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。理解SCN的运作机制,可以帮助你更加深入地了解上述功能。在理解SCN之前,我们先看下oracle事务中的数据变化是如何写入数据文件的:1、事务开始;2、在buffer cache中找到需要的数据块,如果没有找到,则从数据文件中载入buffer cache中;3、事务修改buffer cache的数据块,该数据被标识为“脏数据”,并被写入log buffer中;4、事务提交,LGWR进程将log buffer中的“脏数据”写入redo log file中;5、当发生checkpoint,CKPT进程更新所有数据文件的文件头中的信息,DBWn进程则负责将Buffer Cache中的脏数据写入到数据文件中。经过上述5个步骤,事务中的数据变化最终被写入到数据文件中。但是,一旦在上述中间环节时,数据库意外宕机了,在重新启动时如何知道哪些数据已经写入数据文件、哪些没有写呢(同样,在DG、streams中也存在类似疑问:redo log中哪些是上一次同步已经复制过的数据、哪些没有)?SCN机制就能比较完善的解决上述问题。SCN是一个数字,确切的说是一个只会增加、不会减少的数字。正是它这种只会增加的特性确保了Oracle知道哪些应该被恢复、哪些应该被复制。总共有4中SCN:系统检查点(System Checkpoint)SCN、数据文件检查点(Datafile Checkpoint)SCN、结束SCN(Stop SCN)、开始SCN(Start SCN)。其中其面3中SCN存在于控制文件中,最后一种则存在于数据文件的文件头中。在控制文件中,System Checkpoint SCN是针对整个数据库全局的,因而之存在一个,而Datafile Checkpoint SCN和Stop SCN是针对每个数据文件的,因而一个数据文件就对应在控制文件中存在一份Datafile Checkpoint SCN和Stop SCN。在数据库正常运行期间,Stop SCN(通过视图v$datafile的字段last_change#可以查询)是一个无穷大的数字或者说是NULL。在一个事务提交后(上述第四个步骤),会在redo log中存在一条redo记录,同时,系统为其提供一个最新的SCN(通过函数dbms_flashback.get_system_change_number可以知道当前的最新SCN),记录在该条记录中。如果该条记录是在redo log被清空(日志满做切换时或发生checkpoint时,所有变化日志已经被写入数据文件中),则其SCN被记录为redo log的low SCN。以后在日志再次被清空前写入的redo记录中SCN则成为Next SCN。当日志切换或发生checkpoint(上述第五个步骤)时,从Low SCN到Next SCN之间的所有redo记录的数据就被DBWn进程写入数据文件中,而CKPT进程则将所有数据文件(无论redo log中的数据是否影响到该数据文件)的文件头上记录的Start SCN(通过视图v$datafile_header的字段checkpoint_change#可以查询)更新为Next SCN,同时将控制文件中的System Checkpoint SCN(通过视图v$database的字段checkpoint_change#可以查询)、每个数据文件对应的Datafile Checkpoint(通过视图v$datafile的字段checkpoint_change#可以查询)也更新为Next SCN。但是,如果该数据文件所在的表空间被设置为read-only时,数据文件的Start SCN和控制文件中Datafile Checkpoint SCN都不会被更新。那系统是如何产生一个最新的SCN的?实际上,这个数字是由当时的timestamp转换过来的。每当需要产生一个最新的SCN到redo记录时,系统获取当时的timestamp,将其转换为数字作为SCN。我们可以通过函数SCN_TO_TIMESTAMP(10g以后)将其转换回timestamp:SQL select dbms_flashback.get_system_change_number, SCN_TO_TIMESTAMP(dbms_flashback9x(O8t(H0.get_system_change_number) from dual;GET_SYSTEM_CHANGE_NUMBER-SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)- 287707675617-AUG-07 000000000 PM也可以用函数timestamp_to_scn将一个timestamp转换为SCN:SQL select timestamp_to_scn(SYSTIMESTAMP) as scn from dual; SCN-2877078439最后,SCN除了作为反映事务数据变化并保持同步外,它还起到系统的“心跳”作用每隔3秒左右系统会刷新一次系统SCN。下面,在简单介绍一下SCN如何在数据库恢复中起作用。数据库在正常关闭(shutdown immediate/normal)时,会先做一次checkpoint,将log file中的数据写入数据文件中,将控制文件、数据文件中的SCN(包括控制文件中的Stop SCN)都更新为最新的SCN。数据库异常/意外关闭不会或者只更新部分Stop SCN。当数据库启动时,Oracle先检查控制文件中的每个Datafile Checkpoint SCN和数据文件中的Start SCN是否相同,再检查每个Datafile Checkpoint SCN和Stop SCN是否相同。如果发现有不同,就从Redo Log中找到丢失的SCN,重新写入数据文件中进行恢复。具体的数据恢复过程这里就不再赘述。SCN作为Oracle中的一个重要机制,在多个重要功能中起着“控制器”的作用。了解SCN的产生和实现方式,帮助DBA理解和处理恢复、DG、Streams复制的问题。最后提一句,利用SCN机制,在Oracle10g、11g中又增加了一些很实用的功能数据库闪回、数据库负载重现等。ITPUB个人空间bnC,Gb6pjj yqITPUB个人空间dv#FY0y9Jl0Part III. scn(系统改变号)信息与恢复h70d1vN/U0!f!L6g3os%N3Se6Y0control中有三种SCN分别为,system SCN、datafile SCN、last SCN,数据文件头中有一种SCN start SCNITPUB个人空间35x:M vid I!system scn从视图v$database中获得,对应checkpoint_change#字段,datafile scn、last scn分别对应视图v$datafile中的checkpoint_change#,last_change#,而 start scn则从v$datafile_header中checkpoint_change#得到。1 A6MV/cG h0数据库在正常启动后下,system scn,datafile scn,start scn会相等,而last scn会被置于无穷大,这里为null。Zp_ w7D-F3F0正常关闭后(immediate,noraml,translate),上面四个scn会应执行full checkpoint 而相等。&P3V:P:-x+jo0当系统在非正常关闭后,如shutdown abort,这个时候last scn依然为无穷大,那么当重新启动实例时,系统首先会比较start scn与system scn,如果一致,那么再比较start scn 与last scan是否一样大,因为是非正常关闭,这里会不一样大,那么就需要例程恢复。ITPUB个人空间+8L7r%Z5d:U+如果打开数据库时发现system scndatafile scn,那么以为着使用旧的备份数据文件,也就是需要介质恢复ITPUB个人空间a7T!7Z7ez/B2b#K.k如果是system scn select checkpoint_change# from v$database; -控制文件中的scnCHECKPOINT_CHANGE#yyO;?2&FL1y:N0-?&d%0K;n05534071ITPUB个人空间 Y*Hm4hH%D|0T6D3W?SQL select file#,checkpoint_change# from v$datafile_header; -start scnFILE# CHECKPOINT_CHANGE#d+J K-q p.tY5r0- -7zh z1Q a/B G!N01 5534071Z6Cl6XB02 5534071ITPUB个人空间 pB(K:bo3sZ%-w3 5534071C)qqa7m)P04 5534071ITPUB个人空间w+?:y_Mkg5 5534071ITPUB个人空间;|f K3a!GSQL select file#,checkpoint_change#,last_change# from v$datafile; -datafile scn & last scnFILE# CHECKPOINT_CHANGE# LAST_CHANGE#ITPUB个人空间1l.pK+uC j- - -O N&F |9B!S(N&e01 55340711 uCRn7hV02 5534071ITPUB个人空间 T/k*d;c-XO1vv3 55340719is od6S N,p04 5534071ITPUB个人空间4QZ ay&uxB)w5 5534071e$aa| Ib02、正常关闭后,然后在startup mount;t;L,GMT0SQL shutdown immediate;bX#j1Z90数据库已经关闭。ITPUB个人空间5fU%r*V47V9K3L已经卸载数据库。YvY2lDE0ORACLE 例程已经关闭。,qF5Y kr X8N3b0SQL startup mount;qh|C(Z(K V q0ORACLE 例程已经启动。Total System Global Area 319888364 bytesITPUB个人空间1|f4L5/EFixed Size 453612 bytesITPUB个人空间rY*D! Ds8VPmVariable Size 192937984 bytesE-S:tE k0Database Buffers 125829120 bytesl5v_T2CVG m0Redo Buffers 667648 bytesq_4II Hzf4G&0数据库装载完毕。ITPUB个人空间t&N$rN|!qzSQL select file#,checkpoint_change# from v$datafile_header;FILE# CHECKPOINT_CHANGE#M7L J,Qm9zzN0- -ITPUB个人空间 q;G+FKq BI,i1 55344853 HoKbx02 5534485ITPUB个人空间/lAd&rd;c3 5534485|4 bj04 5534485ITPUB个人空间L#nNbJ,e:G)|z5 5534485SQL select checkpoint_change# from v$database;CHECKPOINT_CHANGE#+)on&RW0|0-ITPUB个人空间j/8nWv05534485SQL select file#,checkpoint_change#,last_change# from v$datafile;FILE# CHECKPOINT_CHANGE# LAST_CHANGE#ITPUB个人空间/Y(&cs t F9M- - -ITPUB个人空间+F9Y1B7S I#a1 5534485 55344850Sp0 bga*phE02 5534485 5534485ITPUB个人空间k4PGb c ? 8y3 5534485 5534485ITPUB个人空间r/r (f A-O4 5534485 5534485ITPUB个人空间(l$r,om!Fl*uMP5 5534485 5534485h4Dl(sW v0-发现start scn=last scn,证明系统是正常关闭SQL alter database open;数据库已更改。3、在正常打开状态下进行事务操作ITPUB个人空间&D1?(s kVFz#ryvQSQL create table t(a number);表已创建。SQL insert into t values (1);已创建 1 行。SQL commit;提交完成。SQL insert into t values(2);已创建 1 行。4、非正常关闭ITPUB个人空间S#LE+kI_ qDSQL shutdown abort;NOWM u0ORACLE 例程已经关闭。xXf!f_0SQL5、打开到mount状态下,观看scnZ oRGB0SQL startup mount;ITPUB个人空间 Qhytg/RscORACLE 例程已经启动。Total System Global Area 319888364 bytesITPUB个人空间:p-0r9T#iScdFixed Size 453612 bytesw:eB7E,r J-Qo.d VU0Variable Size 192937984 bytesITPUB个人空间XNJ0|3i0UDDatabase Buffers 125829120 bytesq VUE4Qo1F5U2y0Redo Buffers 667648 bytesITPUB个人空间0pJK+B!4j数据库装载完毕。(tb5l!Qw,NX7S0SQL select file#,checkpoint_change#,last_change# from v$datafile;FILE# CHECKPOINT_CHANGE# LAST_CHANGE#%t t&Y$R(f/p0- - -rL(|y V y0 q$t01 5534486ITPUB个人空间Y TjZL N&e6h2 5534486M,Ba m/n2p03 5534486ITPUB个人空间Ytt:o R4 5534486)RjI-JQ g05 5534486SQL select checkpoint_change# from v$database;CHECKPOINT_CHANGE#Z:S;R$k.0-ITPUB个人空间kA,GfibK5534486SQL select file#,checkpoint_change# from v$datafile_header;FILE# CHECKPOINT_CHANGE#ITPUB个人空间1hv9u C g,K- -ITPUB个人空间(/e6cmC9GT i.A1 5534486ITPUB个人空间pb jh4b1r-2 5534486(fq d!o%_/R.mv03 5534486S pf$F9H9 04 5534486ITPUB个人空间.Tup Jbz5 5534486bw7n#HA#ZNy0-这时发现start scn 与last scn不等,last scn为无穷大,需要例程恢复6、改变数据库状态为open,并查看该阶段运行日志X fp?0SQL select * from wen.t;ITPUB个人空间#8*o v&sselect * from wen.tHN/o4+xVM0*Y9o57z0_a#kj0ERROR 位于第 1 行:+D pBJS/e!? B0ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询,g6qA S3W0SQL alter database open;数据库已更改。ITPUB个人空间 d8hZ#d:OyFSQL select * from wen.t;AITPUB个人空间/X G/pVBz-.G?:P6?SD01v/j-sp(UKvG0-发现没有提交的事务丢失。ITPUB个人空间t s!ru4_Hu l5b9_4Y查看日志如下:ITPUB个人空间E7T| mn&dCompleted: ALTER DATABASE MOUNT&v?l BTkd0Wed May 17 21:35:46 2006ITPUB个人空间tFwjJ halter database openW W G&YQ0Z0Wed May 17 21:35:46 2006ITPUB个人空间G8T|5R4_1L*hq6zeBeginning crash recovery of 1 threads -会自动判断是否需要恢复,这里开始例程恢复 j)Suu0Wed May 17 21:35:46 2006D0XbyI TCn/Df0Started first pass scanE$.t Z X J0Wed May 17 21:35:47 2006%Ly*P(H9f eU,V0Completed first pass scan|z%c:TAk0206 redo blocks read, 90 data blocks need recoveryITPUB个人空间X;ALHyh!O.SWed May 17 21:35:47 2006ITPUB个人空间5Y?T8q RvStarted recovery atITPUB个人空间-D:q&grtUSNThread 1: logseq 167, block 271, scn 0.0,J!g?(Qk8V0Recovery of Online Redo Log: Thread 1 Group 2 Seq 167 Reading mem 0 -恢复用的在线重做日志r0P8P e0Mem# 0 errs 0: D:ORACLEORADATADB1REDO02.LOGITPUB个人空间8I |IY A/Y )HWed May 17 21:35:47 2006ITPUB个人空间WU,HX(KSKkEnded recovery at.k ?|:MA0Thread 1: logseq 167, block 477, scn 0.5554724ITPUB个人空间6xC!J9g%MT1O!wJ90 data blocks read, 90 data blocks written, 206 redo blocks readhzPHVAq0Crash recovery completed successfully -恢复完成W zcB0Wed May 17 21:35:47 2006ITPUB个人空间?6FnD-Y-cLGWR: Primary database is in CLUSTER CONSISTENT mode;0_m F_*NJ70Thread 1 advanced to log sequence 168qp:F90Thread 1 opened at log sequence 168CG r)w4zAR.Ux0Current log# 3 seq# 168 mem# 0: D:ORACLEORADATADB1REDO03.LOG%okCl8?O$t0Successful open of redo thread 1.ITPUB个人空间5%o.l3hDWed May 17 21:35:48 2006i1F#x2X,oxT;U!0SMON: enabling cache recovery5uea41L)I|#a0Wed May 17 21:35:48 2006ITPUB个人空间u*I9i%xTh.a!n#aARC0: Evaluating archive log 2 thread 1 sequence 167ITPUB个人空间HeXL#kARC0: Beginning to archive log 2 thread 1 sequence 167ITPUB个人空间)nOF9WR/N.V_6jOvCreating archive destination LOG_ARCHIVE_DEST_1: D:DBBKARC00167.001ITPUB个人空间!_cnTzd DARC0: Completed archiving log 2 thread 1 sequence 167ITPUB个人空间7i-y%jnZ-p,gWed May 17 21:35:48 2006A+QK$BDB.nl0Undo Segment 1 OnlinedITPUB个人空间*F;U4x2WC8K&p;OUndo Segment 2 Onlinedg*nt,;n#2x0Undo Segment 3 OnlinedITPUB个人空间R1R .IS;KIUndo Segment 4 OnlinedITPUB个人空间6Tq:Z3r.M*m!fUndo Segment 5 OnlinedITPUB个人空间 n+R/o0?g U7X!MgUndo Segment 6 OnlinedITPUB个人空间So1J9t.K f+Rg原文地址/viewdiary.18440035.htmlG0K_6Ce3HFeU9C0 ITPUB个人空间4M:rEU ZP aPart IV. 关于SCN的理解;O$Q&hoG)c/I:2%0 1.oracle正常运行时,control文件的SCN是个很大的数,与redo log文件、数据文件的SCN不同,正常关闭时,做完checkpoint后,三者的SCN值相同;FED6o i0Biti:日志文件中scn有起始和结束2个(高低),在current log中高scn同样为无穷大。ITPUB个人空间 kqbw*he0d4FrC2.当一个事务commit成功时,redo log文件中的SCN+1,当该事务所做的修改写入数据文件后,数据文件的SCN+1;ITPUB个人空间3fJ,F:UdR4oYBiti:commit的时候加1,其他很多时候也会加1,只要数据库发生了变化都会增加。数据写入数据文件时scn不是加1而是由ckpt更新,检查点发生的时候才修改数据文件头的检查点计数并更新scn。9r4|1K n2e,S03.疑问:ITPUB个人空间ikO#v%wq(w$是不是如果一个事务比较大,在事务提交前就发生redo log entries、data buffer的写入,此时断电,则数据文件、redo log文件的SCN没有+1,且相同,但控制文件SCN不同,数据库startup时发生回滚。2a0XzAPb0Biti:数据文件是由ckpt进程更新文件头的,scn不是加1,而是更新为检查点发生那时的scn,回滚是根据回滚段头的事务表状态来进行的。4.数据写入数据文件scn不是加1而是ckpt 更新,检查点发生的时候才修改数据文件头的 检查点计数和更新scn.y G4d.L3 a0是不是应该这么说?:e7R;J L R0当ckpt 更新时发生数据写入,同时修改数据文件头的 检查点计数和更新scn 。当出现其他情况下的数据写入时(如无空闲缓冲等),不发生ckpt ,但SCN会增加。h.HxJ$we.i4z/8K0Biti:这个时候修改的是数据块但不是数据文件头,只有检查点发生的时候才更新数据文件头,也就是说只有ckpt进程更新数据文件头(oracle8以前如果没有ckpt进程就是lgwr更新),dbwr只写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多措并举促进教育培训提质增效的策略及实施路径
- 探索河流水质自然恢复路径的策略及实施路径
- 复杂地形区域土石方施工方案
- BIM与AR技术在建筑施工可视化中的应用研究
- 新能源企业2025年国际化能源互联网平台建设报告
- 2025年车工评级考试试题及答案
- 品牌媒体活动策划方案范文
- 北辰区微信营销方案
- 2025年海洋能发电与海岛地区新能源产业协同发展模式研究报告
- 辽宁财务咨询方案
- 大学英语四级写作技巧及模板
- 18米固定式高杆灯
- 临时起搏器植入术后护理(心血管内科)
- T-SZTIA 003-2020 抗菌口罩标准规范
- 公司付款委托书 模板
- 颈动脉保护装选择
- 设备安装施工方案
- 2023年东台市城市建设投资发展集团有限公司招聘笔试题库及答案解析
- 危险化学品作业场所安全、危险象形图、方向辅助标志、警戒线、警示语句、图形标志尺寸、基本形式
- 可测试性设计DFT课件
- 排污许可证管理培训
评论
0/150
提交评论