it-swarm-eu.dev

Jak najdu aktuální SCN?

Vzhledem k jakékoli verzi Oracle:

  • Jak najdu aktuální SCN?
  • Jaký je maximální možný SCN?
14
Nick Chammas

Aktuální SCN

Oracle 9i:

SELECT dbms_flashback.get_system_change_number as current_scn 
FROM DUAL;

Oracle 10g a vyšší:

SELECT current_scn
FROM V$DATABASE;

Limity SCN

SCN má pevný limit uložený jeho formátem a soft limit uložený uměle společností Oracle, jak je popsáno zde . Níže jsem citoval příslušné části (zvýraznění bylo přidáno).

Tvrdý limit

Architekti stěžejní databázové aplikace Oracle si museli být dobře vědomi, že SCN musí být obrovské celé číslo. Jedná se o: 48bitové číslo ( 281 474 976 710 656 ). Eclipse by zabralo tolik transakcí a způsobilo by problémy - mohlo by si to myslet.

Soft Limit

Měkký limit je odvozen od velmi jednoduchého výpočtu ukotveného k bodu v čase před 24 lety: Vezměte počet sekund od 00:00:00 01/01/1988 a vynásobte toto číslo 16 384 . Pokud je aktuální hodnota SCN pod touto hodnotou, pak je vše v pořádku a zpracování pokračuje normálně. Abychom to zjednodušili, výpočet předpokládá, že databáze běží nepřetržitě od 01.01.1988, zpracování 16 384 transakcí za sekundu, ve skutečnosti nemůže existovat.

Mezní kontrola SCN

Tento skript (Oracle 10g a vyšší) zkontroluje, kolik vyčerpaných tvrdých a měkkých limitů jste vyčerpali. Díky Robovi za vyvolání měkkého limitu.

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;
16
Nick Chammas

Zde je dotaz, s nímž jsem přišel, abych zkontroloval, zda jsou databáze v otázce chyby SCN zdravé.

# 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;

Většina mých databází, které používají odkazy DB, je na 3,5% vyčerpané značce a může pokračovat v současném tempu 50+ let bez problémů. To neznamená, že jsem v bezpečí před někým, kdo lechtá na chybu SCN, ale alespoň jsme nenašli databázi, která byla mnohem vyšší než ostatní nebo blízko limitu.

6
David Mann

281 474 976 710 656 je pevný limit. Budete chtít vědět, jaký je měkký limit, protože to je hodnota, kterou jste nejprve udeřili do hlavy. Soft limit je (zhruba) počítán podle počtu sekund, které uplynuly od 1. ledna 1988 x 16384.

2
Rob