实例恢复相关scn初步分析

Oracle Scn 定义

 

SCN: oracle system change number.表示oracle 系统改变号。

SCN是一个由之间转换过来的数字,可以通过下列语句转换SCN和具体时间。

 

把系统改变号SCN 转换为 时间戳,再把时间戳 转换为 标准时间

SYS @ prod >select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;

 

GET_SYSTEM_CHANGE_NUMBER

------------------------

                 2885954

 

SYS @ prod >select SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) from dual;

 

SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)

---------------------------------------------------------------------------

15-APR-14 03.40.09.000000000 PM

 

SYS @ prod >SELECT TO_CHAR(SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER),'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

 

TO_CHAR(SCN_TO_TIME

-------------------

2014-04-15 15:40:15

 

SYS @ prod >SELECT TO_CHAR(SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER),'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

 

TO_CHAR(SCN_TO_TIME

-------------------

2014-04-15 15:36:45

 

 

 

常见的SCN

 

SCN遍布数据库的每一个角落。下面列举几个常见和重要的SCN。

SCN名称

存在位置

获得方式

备注

系统检查点SCN

控制文件

视图/控制文件

一个数据库一个

文件检查点SCN

控制文件

视图/控制文件

一个文件一个

文件最终检查点SCN

控制文件

视图/控制文件

一个文件一个

文件头部检查点SCN

数据文件头

视图/数据文件头

一个文件一个

RedoFile文件开始SCN

RedoFile

视图/RedoFile

一个文件一个

RedoFile文件结束SCN

RedoFile

视图/RedoFile

一个文件一个

RedoLog条目的SCN

RedoFile

视图/RedoFile条目

一个条目一个

 

 

1系统检查点SCN(控制文件数据库条目)

可以通过查询视图获得系统检查点SCN值,该值保存在控制文件中.

 

SYS @ prod >SELECT CHECKPOINT_CHANGE# FROM V$DATABASE;

 

CHECKPOINT_CHANGE#

------------------

           2884529

 

表示的是LAST SCN    CHECKPOINTED。

 

可以通过dump出控制文件进行查看:ALTERSESSION SET EVENTS 'IMMEDIATE TRACE NAME CONTROLF LEVEL 12'。

 

2、控制文件检查点SCN(控制文件数据文件条目)

 可以通过查询视图获得文件检查点SCN值,该值保存在控制文件中.

 

SYS @ prod >SELECT NAME,CHECKPOINT_CHANGE# FROM V$DATAFILE;

 

NAME                                               CHECKPOINT_CHANGE#

-------------------------------------------------- ------------------

/u01/app/oracle/oradata/prod/system01.dbf                     2884529

/u01/app/oracle/oradata/prod/undotbs01.dbf                    2884529

/u01/app/oracle/oradata/prod/sysaux01.dbf                     2884529

/u01/app/oracle/oradata/prod/users01.dbf                      2884529

/u01/app/oracle/oradata/prod/example01.dbf                    2884529

 

可以通过dump出控制文件进行查看:ALTERSESSION SET EVENTS 'IMMEDIATE TRACE NAME CONTROLF LEVEL 12'。

    

   3、文件最终检查点SCN(控制文件数据文件条目)

   可以通过查询视图获得文件最终检查点SCN值,该值保存在控制文件中,

 

SYS @ prod >SELECT NAME,LAST_CHANGE# FROM V$DATAFILE;

 

NAME                                               LAST_CHANGE#

-------------------------------------------------- ------------

/u01/app/oracle/oradata/prod/system01.dbf

/u01/app/oracle/oradata/prod/undotbs01.dbf

/u01/app/oracle/oradata/prod/sysaux01.dbf

/u01/app/oracle/oradata/prod/users01.dbf

/u01/app/oracle/oradata/prod/example01.dbf

 

 

该值在数据库正常启动时设置为无穷大,该值在数据库正常关闭的情况下设置为关闭时的SCN,非正常关闭依旧为无穷大。

 

   4、数据文件头部的检查点SCN(数据文件头)

可以通过查询视图获得文件检查点SCN值,该值保存在数据文件头部,

 

SYS @ prod >SELECT NAME,CHECKPOINT_CHANGE# FROM V$DATAFILE_HEADER;

 

NAME                                               CHECKPOINT_CHANGE#

-------------------------------------------------- ------------------

/u01/app/oracle/oradata/prod/system01.dbf                     2884529

/u01/app/oracle/oradata/prod/undotbs01.dbf                    2884529

/u01/app/oracle/oradata/prod/sysaux01.dbf                     2884529

/u01/app/oracle/oradata/prod/users01.dbf                      2884529

/u01/app/oracle/oradata/prod/example01.dbf                    2884529

 

也可以通过dump数据文件头块进行查看。

       

  5RedoFile文件开始SCN

示切换到该日志文件的时间点,可以通过查询视图获得文件RedoFile文件开始SCN,该值保存在数据文件头部,

SYS @ prod >SELECT FIRST_CHANGE# FROM V$LOG;

 

FIRST_CHANGE#

-------------

      2884414

      2884529

      2884405

也可以通过dump redoFile文件头块进行查看。当前redoFile的开始SCN就是上一个redoFile的的结束SCN

 

6RedoFile文件结束SCN

示切换到下一个日志文件的时间点,可以通过查询视图获得文件RedoFile文件开始SCN,该值保存在数据文件头部,

 

SELECT NEXT_CHANGE# FROM V$LOG;

 

也可以通过dump redoFile文件头块进行查看。当前redoFile的结束SCN就是下一个redoFile的的开始SCN

 

7RedoLog条目的SCN

表示redo条目对应数据库被修改时间点的CSN

       

 

 各检查点之间关系

1、数据库正常关闭和启动时,控制文件的系统SCN、控制文件中的数据文件开始SCN和数据文件头部的开始SCN是相等的,文件的最终检查点SCN是无穷大。

2、正常关闭数据库,oracle会做下列操作。

         A、将所有的buffer cache写到磁盘上。

         B、用关闭的时间点SCN更新系统SCN、文件检查点SCN、文件最终检查点SCN、数据文件头部检查点SCN。此时4SCN的值相同。

3、 数据库非正常关闭(abort),数据库不做写buffercache操作和更新SCN操作。此时文件最终检查点依然为空,数据库需要进行实例恢复。数据 库在open的过程中,从控制文件的检查点条目中的每个检查点队列中取得LRBA(检查点队列中第一个脏块的LRBA)ON DISK RBA(对应REDO FILE的最后一条redolog 条目),然后从LRBA跑日志到ON DISK RBA

4、数据库正常关闭,用一个备份的数据文件覆盖其中一个数据文件,此时数据文件头部的检查点SCN小于控制文件中的“文件检查点SCN”,此时就需要进行介质恢复。

 

切换日志,查看数据库scn、控制文件检查点号、数据文件检查点号

 查看当前SCN

SYS @ prod >select db.current_scn "db.chk#",ctl.checkpoint_change# "ctl.chk#",dbfile.checkpoint_change# "dbfile.chk#" from v$database db,v$datafile ctl,v$datafile_header dbfile ;

 

   db.chk#   ctl.chk# dbfile.chk#

---------- ---------- -----------

   2887937    2887848     2887848

   2887938    2887848     2887848

   2887939    2887848     2887848

   2887940    2887848     2887848

 

切换日志

SYS @ prod >alter system switch logfile;

 

System altered.

 

查看此时SCN

 

SYS @ prod >select db.current_scn "db.chk#",ctl.checkpoint_change# "ctl.chk#",dbfile.checkpoint_change# "dbfile.chk#" from v$database db,v$datafile ctl,v$datafile_header dbfile ;

 

   db.chk#   ctl.chk# dbfile.chk#

---------- ---------- -----------

   2888088    2888073     2888073

   2888089    2888073     2888073

   2888090    2888073     2888073

   2888091    2888073     2888073

 

 

 

操作对SCN号的影响

SCN\操作

日志切换

全量检查点

正常关闭

增量检查点

刷新缓存

offline

系统检查点SCN

×/

×

×

文件检查点SCN

×/

×

×

文件最终检查点SCN

×

×

×

×

×

文件头部检查点SCN

×/

×

日志文件开始SCN

×

×

×

×

×

日志文件结束SCN

×

×

×

×

×

RedoLog条目SCN

×

×

×

×

×

×

 

计算机生成了可选文字: CN\操作
日志切换
全里检查点
正常关闭
增里桧查点
刷新缓存
offline
系统检查点SCN
x/J
文件检查点SCN
x/了
文件最终检查点SCN
文件头部检查点S〔N
x/了
了(表空间对应数据文件)
日志文件开始SCN
日志文件结束SCN
RedoLOg条目SCN
注:1、曾里检查点会更新控制文件checkpoint条目的LR日A值。不会改变SCN
2、日志切换,假如切换之后将aCtive类型的日志文件切换为inaCtive,则会更新系统检查点SCN、文件检查点SCN和文件头部检查点SCN。
3、全里检查点会将bu什ercache全部写到内吝,所以日志状态会发生变化,所以会改变系统检查点CSN。

注:1、曾量检查点会更新控制文件checkpoint 条目的LRBA值。不会改变SCN

      2、日志切换,假如切换之后将active类型的日志文件切换为inactive,则会更新系统检查点SCN、文件检查点SCN和文件头部检查点SCN

      3、全量检查点会将buffercache全部写到内容,所以日志状态会发生变化,所以会改变系统检查点CSN

 

源文档 <http://www.itpub.net/forum.php?mod=viewthread&tid=1772666>

创建时间:2022-03-30 20:52
浏览量:0