Wie finde ich meinen aktuellen SCN?

14

Bei jeder Version von Oracle:

  • Wie finde ich meinen aktuellen SCN?
  • Was ist die maximal mögliche SCN?
Nick Chammas
quelle
Diese Frage wurde von diesem Artikel inspiriert . Es gibt wahrscheinlich viele Oracle-Leute, die diese Zahlen gerade nachschlagen. :)
Nick Chammas
Es sieht so aus, als ob der Link von meinem vorherigen Kommentar jetzt unterbrochen ist. Ich glaube, diese Seite wurde hierher verschoben: infoworld.com/article/2618409/…
Nick Chammas

Antworten:

16

Aktuelle SCN

Oracle 9i:

SELECT dbms_flashback.get_system_change_number as current_scn 
FROM DUAL;

Oracle 10g und höher:

SELECT current_scn
FROM V$DATABASE;

SCN-Grenzen

SCN hat ein hartes Limit, das von seinem Format vorgegeben wird, und ein weiches Limit, das von Oracle künstlich vorgegeben wird, wie hier beschrieben . Ich habe die relevanten Teile unten zitiert (Hervorhebung hinzugefügt).

Harte Grenze

Die Architekten der Oracle-Flaggschiff-Datenbankanwendung müssen wohl gewusst haben, dass der SCN eine massive Ganzzahl sein muss. Dies ist eine 48-Bit-Zahl ( 281.474.976.710.656 ). Es würde eine Ewigkeit dauern, bis eine Oracle-Datenbank diese Anzahl von Transaktionen überschreitet und Probleme verursacht - so könnte man meinen.

Soft Limit

Das weiche Limit ergibt sich aus einer sehr einfachen Berechnung, die bis zu einem Zeitpunkt vor 24 Jahren verankert war: Nehmen Sie die Anzahl der Sekunden seit dem 01.01.1988 und multiplizieren Sie diese Zahl mit 16.384. Wenn der aktuelle SCN-Wert darunter liegt, ist alles in Ordnung und die Verarbeitung wird normal fortgesetzt. Vereinfacht ausgedrückt geht die Berechnung davon aus, dass eine Datenbank, die seit dem 01.01.1988 ständig läuft und 16.384 Transaktionen pro Sekunde verarbeitet, in der Realität nicht existieren kann.

SCN Limit Check

Dieses Skript (Oracle 10g und höher) prüft, wie viele der harten und weichen Limits Sie ausgeschöpft haben. Vielen Dank an Rob für den Aufruf des Softlimits.

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;
Nick Chammas
quelle
2
Ich sehe, du hast deine Antwort. Sie sollten auch Riyajs Artikel unter orainternals.com/2012/01/20/scn-what-why-and-how
Niall Litchfield am
Danke für den Hinweis! Falls jemand anderes es lesen möchte, ist der Artikel jetzt unter orainternals.wordpress.com/2012/01/19/scn-what-why-and-how
Magnus Reftel
6

Hier ist eine Abfrage, mit der ich meine Datenbanken in Bezug auf das SCN-Fehlerproblem auf ihre Richtigkeit überprüft habe:

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

Die meisten meiner Datenbanken, die DB-Links verwenden, sind zu 3,5% erschöpft und können problemlos über 50 Jahre lang mit der aktuellen Rate fortgesetzt werden. Dies bedeutet nicht, dass ich vor jemandem sicher bin, der den SCN-Fehler kitzelt, aber zumindest haben wir keine Datenbank gefunden, die weit über den anderen oder nahe am Limit liegt.

David Mann
quelle
2

281.474.976.710.656 ist die harte Grenze. Sie möchten wissen, wie hoch das Soft-Limit ist, da dies der Wert ist, auf den Sie sich als Erstes stoßen würden. Die weiche Grenze wird (grob) aus der Anzahl der Sekunden berechnet, die seit dem 1. Januar 1988 x 16384 vergangen sind.

rauben
quelle
Ich weiß nicht, wie die alten Antworten die weiche Grenze (die in dem von Nick verlinkten Artikel erwähnt wird) verfehlt haben - daher ist es eine gute Idee, das fehlende Detail hinzuzufügen.
Dezso