oracle 学习总结篇三:SCN的理解
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发生时同时要写这三个值保持一致
后续还有因为时间关系,下次再补充