SCN: oracle system change number.表示oracle 系统改变号。
SCN是一个由之间转换过来的数字,可以通过下列语句转换SCN和具体时间。
SELECTDBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER,
SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)FROM DUAL;
常见的SCNSCN遍布数据库的每一个角落。下面列举几个常见和重要的SCN。
SCN名称 | 存在位置 | 获得方式 | 备注 |
系统检查点SCN | 控制文件 | 视图/控制文件 | 一个数据库一个 |
文件检查点SCN | 控制文件 | 视图/控制文件 | 一个文件一个 |
文件最终检查点SCN | 控制文件 | 视图/控制文件 | 一个文件一个 |
文件头部检查点SCN | 数据文件 | 视图/数据文件头 | 一个文件一个 |
RedoFile文件开始SCN | RedoFile | 视图/RedoFile头 | 一个文件一个 |
RedoFile文件结束SCN | RedoFile | 视图/RedoFile头 | 一个文件一个 |
RedoLog条目的SCN | RedoFile | 视图/RedoFile条目 | 一个条目一个 |
1、系统检查点SCN(控制文件数据库条目)
可以通过查询视图获得系统检查点SCN值,该值保存在控制文件中,SELECT CHECKPOINT_CHANGE# FROM V$DATABASE; 表示的是LAST SCNCHECKPOINTED。
可以通过dump出控制文件进行查看:ALTERSESSION SET EVENTS 'IMMEDIATE TRACE NAME CONTROLF LEVEL 12'。
2、文件检查点SCN(控制文件数据文件条目)可以通过查询视图获得文件检查点SCN值,该值保存在控制文件中,SELECTNAME,CHECKPOINT_CHANGE# FROM V$DATAFILE;
可以通过dump出控制文件进行查看:ALTERSESSION SET EVENTS 'IMMEDIATE TRACE NAME CONTROLF LEVEL 12'。
3、文件最终检查点SCN(控制文件数据文件条目)可以通过查询视图获得文件最终检查点SCN值,该值保存在控制文件中,SELECTNAME,LAST_CHANGE# FROM V$DATAFILE;改值在数据库启动时设置为无穷大,该值在数据库正常关闭的情况下设置为关闭时的SCN,非正常关闭依旧为无穷大。
4、数据文件头部的检查点SCN(数据文件头)可以通过查询视图获得文件检查点SCN值,该值保存在数据文件头部,SELECT NAME,CHECKPOINT_CHANGE# FROM V$DATAFILE_HEADER。也可以通过dump数据文件头块进行查看。
5、RedoFile文件开始SCN表示切换到该日志文件的时间点,可以通过查询视图获得文件RedoFile文件开始SCN,该值保存在数据文件头部,SELECT FIRST_CHANGE# FROM V$LOG; 也可以通过dump redoFile文件头块进行查看。当前redoFile的开始SCN就是上一个redoFile的的结束SCN。
6、RedoFile文件结束SCN表示切换到下一个日志文件的时间点,可以通过查询视图获得文件RedoFile文件开始SCN,该值保存在数据文件头部,SELECT NEXT_CHANGE# FROM V$LOG; 也可以通过dump redoFile文件头块进行查看。当前redoFile的结束SCN就是下一个redoFile的的开始SCN。
7、RedoLog条目的SCN表示redo条目对应数据库被修改时间点的CSN。
各检查点之间关系1、数据库正常关闭和启动时,控制文件的系统SCN、控制文件中的数据文件开始SCN和数据文件头部的开始SCN是相等的,文件的最终检查点SCN是无穷大。
2、正常关闭数据库,oracle会做下列操作。
A、将所有的buffer cache写到磁盘上。
B、用关闭的时间点SCN更新系统SCN、文件检查点SCN、文件最终检查点SCN、数据文件头部检查点SCN。此时4中SCN的值相同。
3、数据库非正常关闭(abort),数据库不做写buffercache操作和更新SCN操作。此时文件最终检查点依然为空,数据库需要进行实例恢复。数据库在open的过程中,从控制文件的检查点条目中的每个检查点队列中取得LRBA(检查点队列中第一个脏块的LRBA)和ON DISK RBA(对应REDO FILE的最后一条redolog 条目),然后从LRBA跑日志到ON DISK RBA。
4、数据库正常关闭,用一个备份的数据文件覆盖其中一个数据文件,此时数据文件头部的检查点SCN小于控制文件中的“文件检查点SCN”,此时就需要进行介质恢复。
操作对SCN号的影响操作是否刷新SCN号码
SCN\操作 | 日志切换 | 全量检查点 | 正常关闭 | 增量检查点 | 刷新缓存 | offline
|
系统检查点SCN | ×/√ | √ | √ | × | √ | × |
文件检查点SCN | ×/√ | √ | √ | × | √ | × |
文件最终检查点SCN | × | × | √ | × | × | × |
文件头部检查点SCN | ×/√ | √ | √ | × | √ | √(表空间对应数据文件) |
日志文件开始SCN | √ | × | × | × | × | × |
日志文件结束SCN | √ | × | × | × | × | × |
RedoLog条目SCN | × | × | × | × | × | × |
注:1、曾量检查点会更新控制文件checkpoint 条目的LRBA值。不会改变SCN
2、日志切换,假如切换之后将active类型的日志文件切换为inactive,则会更新系统检查点SCN、文件检查点SCN和文件头部检查点SCN。
3、全量检查点会将buffercache全部写到内容,所以日志状态会发生变化,所以会改变系统检查点CSN。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11693228/viewspace-1061078/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11693228/viewspace-1061078/