oracle 学习总结篇三:SCN的理解

scn(system change number)  系统改变号,这个号码一直是增加不会减少的数字,

可以通过以下sql 查出当前scn 是多少

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                  210923

1.一。SCN与CHECKPOINT
CKPT进程在checkpoint发生时,将当时的SCN号写入数据文件头和控制文件,同时通知DBWR进程将数据块写到
数据文件。
CKPT进程也会在控制文件中记录RBA(redo block address),以标志Recovery需要从日志中哪个地方开始。

与checkpoint相关的SCN号有四个,其中三个存在控制文件中,一个存放在数据文件头中。
这四个分别是:
1.System Checkpoint SCN
当checkpoint完成后,ORACLE将System Checkpoint SCN号存放在控制文件中。
我们可以通过下面SQL语句查询:
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            209006

2.Datafile Checkpoint SCN
当checkpoint完成后,ORACLE将Datafile Checkpoint SCN号存放在控制文件中。
我们可以通过下面SQL语句查询所有数据文件的Datafile Checkpoinnt SCN号。
select name,checkpoint_change# from v$datafile;

SQL> select name,checkpoint_change# from v$datafile;

NAME
-----------------------------------------------------------------

CHECKPOINT_CHANGE#
------------------
D:\ORACLE\ORADATA\PUBTEST\SYSTEM01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\UNDOTBS01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\INDX01.DBF
            209006


NAME
-----------------------------------------------------------------

CHECKPOINT_CHANGE#
------------------
D:\ORACLE\ORADATA\PUBTEST\TOOLS01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\USERS01.DBF
            209006

3.Start SCN号
ORACLE将Start SCN号存放在数据文件头中。
这个SCN用于检查数据库启动过程是否需要做media recovery.
我们可以通过以下SQL语句查询:
SQL> select name,checkpoint_change# from v$datafile_header;

NAME
----------------------------------------------------------------

CHECKPOINT_CHANGE#
------------------
D:\ORACLE\ORADATA\PUBTEST\SYSTEM01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\UNDOTBS01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\INDX01.DBF
            209006


NAME
----------------------------------------------------------------

CHECKPOINT_CHANGE#
------------------
D:\ORACLE\ORADATA\PUBTEST\TOOLS01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\USERS01.DBF
            209006

4.End SCN号
ORACLE将End SCN号存放在控制文件中。
这个SCN号用于检查数据库启动过程是否需要做instance recovery.
我们可以通过以下SQL语句查询:
select name,last_change# from v$datafile;

SQL> select name,last_change# from v$datafile;

NAME
-------------------------------------------------------------

LAST_CHANGE#
------------
D:\ORACLE\ORADATA\PUBTEST\SYSTEM01.DBF


D:\ORACLE\ORADATA\PUBTEST\UNDOTBS01.DBF


D:\ORACLE\ORADATA\PUBTEST\INDX01.DBF

 

NAME
-------------------------------------------------------------

LAST_CHANGE#
------------
D:\ORACLE\ORADATA\PUBTEST\TOOLS01.DBF


D:\ORACLE\ORADATA\PUBTEST\USERS01.DBF

 

SQL>

在数据库正常运行的情况下,对可读写的,online的数据文件,该SCN号为NULL.

可以看到System Checkpoint SCN,Datafile Checkpoint SCN,Start SCN号
这三者值是一致的,这是因为checkpoint发生时同时要写这三个值保持一致

后续还有因为时间关系,下次再补充

 

 

请使用浏览器的分享功能分享到微信等