數據庫的CURRENT SCN是Oracle當前最大的SCN,可以通過多種方法獲取該SCN:
1、直接從內存中獲取。由于當前最大SCN存儲在fixed sga中,因此可以通過Oracle debug工具DUMP kcsgscn結構體獲取內存中的最大SCN。在下面的程序中,BA371為16進制顯示,轉換成10進制就是762737:
SQL> oradebug setmypid
Statement processed.
SQL> ORADEBUG DUMPvar SGA kcsgscn_
kcslf kcsgscn_ [200093D0, 200093F0) = 00000000 000BA371 00008E0E 00000000 00000000 00000000 00000000 200091DC/
2、從V D A T A B A S E 視圖中獲取。從 O r a c l e 10 g 開始,內存中的最大 S C N 可以從 V DATABASE視圖中獲取。從Oracle 10g開始,內存中的最大SCN可以從V DATABASE視圖中獲取。從Oracle10g開始,內存中的最大SCN可以從VDATABASE.CURRENT_SCN中查詢,如下所示:
SQL> select current_scn from v$database;
CURRENT_SCN
762843
3、從dbms_flashback.get_system_change_number函數中查詢,該函數從Oracle 9i開始提供,如下所示:
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
762901
由于SCN又叫SYSTEM COMMIT NUMBER,所以SCN的遞增跟事務密切相關,在Oracle 8i版本,可以查詢X K T U X E ( [ K ] e r n e l [ T ] r a n s a c t i o n [ U ] n d o T r a n s a [ x ] t i o n [ E ] n t r y ( t a b l e ) )獲取回滾段事務表中最大的 S C N B a s e 和 S C N W r a p ,然后通過計算出得出最大的 S C N ,如下所示: S Q L > s e l e c t m a x ( k t u x e s c n w ? p o w e r ( 2 , 32 ) + k t u x e s c n b ) S C N f r o m x KTUXE( [K]ernel [T]ransaction [U]ndo Transa[x]tion [E]ntry (table))獲取回滾段事務表中最大的SCN Base和SCN Wrap,然后通過計算出得出最大的SCN,如下所示: SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) SCN from x KTUXE([K]ernel[T]ransaction[U]ndoTransa[x]tion[E]ntry(table))獲取回滾段事務表中最大的SCNBase和SCNWrap,然后通過計算出得出最大的SCN,如下所示:SQL>selectmax(ktuxescnw?power(2,32)+ktuxescnb)SCNfromxktuxe;
SCN
762924