本文主要是介绍Oracle数据库的CURRENT SCN,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
数据库的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
这篇关于Oracle数据库的CURRENT SCN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!