目前的SCN
Oracle 9i:
SELECT dbms_flashback.get_system_change_number as current_scn
FROM DUAL;
Oracle 10g及更高版本:
SELECT current_scn
FROM V$DATABASE;
SCN限制
SCN具有由其格式施加的硬限制,由Oracle人为地施加软限制,如此处所述。我在下面引用了相关部分(添加了重点)。
硬限制
Oracle旗舰数据库应用程序的架构师必须充分了解SCN必须是一个大整数。它是:一个48位数字(281,474,976,710,656)。Oracle数据库需要不胜枚举才能使数量众多的事务黯然失色并引起问题-也许您会认为。
软极限
软限制来自于一个固定在24年前某个时间点的非常简单的计算:取自1988年1月1日00:00:00以来的秒数,然后将该数字乘以16,384。如果当前SCN值低于该值,则一切正常,处理将继续正常进行。简而言之,该计算假设自1988年1月1日以来一直在运行的数据库,每秒处理16,384个事务,实际上是不存在的。
SCN极限检查
该脚本(Oracle 10g及更高版本)将检查您已经用尽了哪些硬限制和软限制。感谢Rob提出了软限制。
WITH limits AS (
SELECT
current_scn
--, dbms_flashback.get_system_change_number as current_scn -- Oracle 9i
, (SYSDATE - TO_DATE('1988-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')) * 24*60*60 * 16384
AS SCN_soft_limit
, 281474976710656 AS SCN_hard_limit
FROM V$DATABASE
)
SELECT
current_scn
, current_scn/scn_soft_limit*100 AS pct_soft_limit_exhausted
, scn_soft_limit
, current_scn/scn_hard_limit*100 AS pct_hard_limit_exhausted
, scn_hard_limit
FROM limits;