SCN可以理解为数据库的内部时间。
查看当前系统的SCN号:
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
56780435
or:
SQL> select current_scn from v$database; \\\10g以后才有
CURRENT_SCN
-----------
56780458
数据文件头会保存一个特殊的SCN(stop scn)。当数据库处于打开状态时,stop scn被设置为最大值0xffff.ffffffff。
在数据库正常关闭的过程中,stop scn被设置为当前系统的最大SCN值。在数据库打开的过程中,Oracle会比较各文件的stop scn
和checkpoint scn ,如果不一致,表明数据库先前没有正常关闭,需要做恢复。
检查点的scn是一个特殊的scn号,小于该号码的块都已经存盘了,数据库的恢复只需要恢复该scn号之一的操作就可以了。
scn号码和物理的时间对照表:
SQL> desc smon_scn_time
Name Null? Type
----------------------------------------- -------- ----------------------------
THREAD NUMBER
TIME_MP NUMBER
TIME_DP DATE
SCN_WRP NUMBER
SCN_BAS NUMBER
NUM_MAPPINGS NUMBER
TIM_SCN_MAP RAW(1200)
SCN NUMBER
ORIG_THREAD NUMBER
SQL> select TIME_MP,TIME_DP,SCN from smon_scn_time where rownum<10;
TIME_MP TIME_DP SCN
---------- ------------ ----------
1430380240 30-APR-15 56622737
1430472313 01-MAY-15 56664969
1430472913 01-MAY-15 56665202
1430473214 01-MAY-15 56665316
1430473814 01-MAY-15 56665561
1430475014 01-MAY-15 56666229
1430292582 29-APR-15 56572596
1430517332 01-MAY-15 56685957
1430517935 01-MAY-15 56686286
9 rows selected.
查看数据库的检查点号:
SQL> col name for a40
SQL> select name ,checkpoint_change# from v$database;
NAME CHECKPOINT_CHANGE#
---------------------------------------- ------------------
ORCL 56770975
查看数据文件的检查点号:
SQL> col name for a40
SQL> select name ,checkpoint_change# from v$datafile;
NAME CHECKPOINT_CHANGE#
---------------------------------------- ------------------
/u01/app/oracle/oradata/orcl/system01.db 56770975
f
/u01/app/oracle/oradata/orcl/sysaux01.db 56770975
f
/u01/app/oracle/oradata/orcl/undotbs01.d 56770975
bf
/u01/app/oracle/oradata/orcl/users01.dbf 56770975
/u01/app/oracle/oradata/orcl/rmantbs01.d 56770975
NAME CHECKPOINT_CHANGE#
---------------------------------------- ------------------
bf
/u01/app/oracle/oradata/orcl/test01.dbf 56770975
/u01/app/oracle/oradata/orcl/hclob01.dbf 56770975
7 rows selected.
SQL> select GROUP#,SEQUENCE#,STATUS,FIRST_CHANGE#,to_char(FIRST_TIME,'yyyy/mm/dd:hh24:mi:ss') time from v$log;
GROUP# SEQUENCE# STATUS FIRST_CHANGE# TIME
---------- ---------- ---------------- ------------- -------------------
1 13 CURRENT 56757295 2015/05/03:23:45:08
2 11 INACTIVE 56664266 2015/05/01:17:00:16
3 12 INACTIVE 56708688 2015/05/02:20:00:06
11号日志记录了56664266到56708688之间的数据库变化,12号日志记录了56708688到56757295的变化,
13号日志记录了56757295到最后scn之间的数据库变化。
查看当前系统的SCN号:
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
56780435
or:
SQL> select current_scn from v$database; \\\10g以后才有
CURRENT_SCN
-----------
56780458
数据文件头会保存一个特殊的SCN(stop scn)。当数据库处于打开状态时,stop scn被设置为最大值0xffff.ffffffff。
在数据库正常关闭的过程中,stop scn被设置为当前系统的最大SCN值。在数据库打开的过程中,Oracle会比较各文件的stop scn
和checkpoint scn ,如果不一致,表明数据库先前没有正常关闭,需要做恢复。
检查点的scn是一个特殊的scn号,小于该号码的块都已经存盘了,数据库的恢复只需要恢复该scn号之一的操作就可以了。
scn号码和物理的时间对照表:
SQL> desc smon_scn_time
Name Null? Type
----------------------------------------- -------- ----------------------------
THREAD NUMBER
TIME_MP NUMBER
TIME_DP DATE
SCN_WRP NUMBER
SCN_BAS NUMBER
NUM_MAPPINGS NUMBER
TIM_SCN_MAP RAW(1200)
SCN NUMBER
ORIG_THREAD NUMBER
SQL> select TIME_MP,TIME_DP,SCN from smon_scn_time where rownum<10;
TIME_MP TIME_DP SCN
---------- ------------ ----------
1430380240 30-APR-15 56622737
1430472313 01-MAY-15 56664969
1430472913 01-MAY-15 56665202
1430473214 01-MAY-15 56665316
1430473814 01-MAY-15 56665561
1430475014 01-MAY-15 56666229
1430292582 29-APR-15 56572596
1430517332 01-MAY-15 56685957
1430517935 01-MAY-15 56686286
9 rows selected.
查看数据库的检查点号:
SQL> col name for a40
SQL> select name ,checkpoint_change# from v$database;
NAME CHECKPOINT_CHANGE#
---------------------------------------- ------------------
ORCL 56770975
查看数据文件的检查点号:
SQL> col name for a40
SQL> select name ,checkpoint_change# from v$datafile;
NAME CHECKPOINT_CHANGE#
---------------------------------------- ------------------
/u01/app/oracle/oradata/orcl/system01.db 56770975
f
/u01/app/oracle/oradata/orcl/sysaux01.db 56770975
f
/u01/app/oracle/oradata/orcl/undotbs01.d 56770975
bf
/u01/app/oracle/oradata/orcl/users01.dbf 56770975
/u01/app/oracle/oradata/orcl/rmantbs01.d 56770975
NAME CHECKPOINT_CHANGE#
---------------------------------------- ------------------
bf
/u01/app/oracle/oradata/orcl/test01.dbf 56770975
/u01/app/oracle/oradata/orcl/hclob01.dbf 56770975
7 rows selected.
SQL> select GROUP#,SEQUENCE#,STATUS,FIRST_CHANGE#,to_char(FIRST_TIME,'yyyy/mm/dd:hh24:mi:ss') time from v$log;
GROUP# SEQUENCE# STATUS FIRST_CHANGE# TIME
---------- ---------- ---------------- ------------- -------------------
1 13 CURRENT 56757295 2015/05/03:23:45:08
2 11 INACTIVE 56664266 2015/05/01:17:00:16
3 12 INACTIVE 56708688 2015/05/02:20:00:06
11号日志记录了56664266到56708688之间的数据库变化,12号日志记录了56708688到56757295的变化,
13号日志记录了56757295到最后scn之间的数据库变化。