SELECT dbms_flashback.get_system_change_number as current_scn
FROM DUAL;
Oracle 10g e superior:
SELECT current_scn
FROM V$DATABASE;
Limites de SCN
O SCN tem um limite rígido imposto pelo seu formato e um limite flexível imposto artificialmente pela Oracle, conforme descrito aqui . Citei as partes relevantes abaixo (grifo nosso).
Limite rígido
Os arquitetos do principal aplicativo de banco de dados da Oracle deviam estar bem cientes de que o SCN precisava ser um número inteiro enorme. É: um número de 48 bits ( 281.474.976.710.656 ). Levaria eras para um banco de dados Oracle eclipsar esse número de transações e causar problemas - ou assim você pode pensar.
Limite suave
O limite flexível deriva de um cálculo muito simples ancorado em um ponto no tempo há 24 anos: Pegue o número de segundos desde 00:00:00 01/01/1988 e multiplique esse número por 16.384. Se o valor SCN atual estiver abaixo disso, tudo estará bem e o processamento continuará normalmente. Para simplificar, o cálculo pressupõe que um banco de dados em execução constante desde 01/01/1988, processando 16.384 transações por segundo, não pode existir na realidade.
Verificação de limite de SCN
Este script (Oracle 10g e superior) verificará quanto dos limites rígidos e flexíveis você esgotou. Obrigado a Rob por chamar o limite flexível.
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;
Aqui está uma consulta que criei para verificar meus bancos de dados quanto à sanidade em relação ao problema do bug SCN:
# Show the amount of SCN keyspace we have used so far on this database
# By default the SCN max on a 10g/11g
# instance is a 48-bit integer (281,474,976,710,656)
SELECT NAME,
(current_scn/281474976710656)*100 as PCT_OF_SCN_KEYSPACE_USED,
ROUND(SYSDATE-CREATED) as DAYS_SINCE_DB_CREATION,
ROUND(1/(current_scn/281474976710656)*(SYSDATE-CREATED)) AS EST_DAYS_BEFORE_SCN_EXHAUSTED,
ROUND(1/(current_scn/281474976710656)*(SYSDATE-CREATED)/365) AS EST_YEARS_BEFORE_SCN_EXHAUSTED
FROM v$database;
A maioria dos meus bancos de dados que usam links de banco de dados estão na marca de 3,5% esgotados e podem continuar na taxa atual por mais de 50 anos sem problemas. Isso não significa que estou a salvo de alguém fazendo cócegas no bug do SCN, mas pelo menos não encontramos um banco de dados muito superior aos outros ou próximo do limite.
281.474.976.710.656 é o limite rígido. Você vai querer saber qual é o limite flexível, já que esse é o valor que você acertaria primeiro. O limite flexível é (aproximadamente) calculado pelo número de segundos decorridos desde 1º de janeiro de 1988 x 16384.
SCN atual
Oráculo 9i:
Oracle 10g e superior:
Limites de SCN
O SCN tem um limite rígido imposto pelo seu formato e um limite flexível imposto artificialmente pela Oracle, conforme descrito aqui . Citei as partes relevantes abaixo (grifo nosso).
Limite rígido
Limite suave
Verificação de limite de SCN
Este script (Oracle 10g e superior) verificará quanto dos limites rígidos e flexíveis você esgotou. Obrigado a Rob por chamar o limite flexível.
Aqui está uma consulta que criei para verificar meus bancos de dados quanto à sanidade em relação ao problema do bug SCN:
A maioria dos meus bancos de dados que usam links de banco de dados estão na marca de 3,5% esgotados e podem continuar na taxa atual por mais de 50 anos sem problemas. Isso não significa que estou a salvo de alguém fazendo cócegas no bug do SCN, mas pelo menos não encontramos um banco de dados muito superior aos outros ou próximo do limite.
281.474.976.710.656 é o limite rígido. Você vai querer saber qual é o limite flexível, já que esse é o valor que você acertaria primeiro. O limite flexível é (aproximadamente) calculado pelo número de segundos decorridos desde 1º de janeiro de 1988 x 16384.