Mevcut SCN'mi nasıl bulabilirim?


Yanıtlar:


16

Mevcut SCN

Oracle 9i:

SELECT dbms_flashback.get_system_change_number as current_scn 
FROM DUAL;

Oracle 10g ve üstü:

SELECT current_scn
FROM V$DATABASE;

SCN Sınırları

SCN'nin biçimi tarafından dayatılan bir sert sınırı ve burada açıklandığı gibi Oracle tarafından yapay olarak uygulanan bir yumuşak sınırı vardır . Aşağıdaki ilgili bölümlerden alıntı yaptım (vurgu eklendi).

Zor Sınır

Oracle'ın amiral gemisi veritabanı uygulamasının mimarları, SCN'nin büyük bir tamsayı olması için gereken farkında olmalıdır. 48 bitlik bir sayıdır ( 281,474,976,710,656 ). Bir Oracle veritabanının bu sayıda işlemi tutması ve sorunlara neden olması eons sürer - ya da düşünebilirsiniz.

Yumuşak Sınır

Yumuşak sınır, 24 yıl önce zamana bağlanan çok basit bir hesaplamadan kaynaklanır: 00:00:00 01/01/1988 tarihinden bu yana geçen saniye sayısını alın ve bu rakamı 16.384 ile çarpın. Mevcut SCN değeri bunun altındaysa, her şey yolunda demektir ve işleme normal şekilde devam eder. Basit bir ifadeyle, hesaplama 01/01/1988 tarihinden beri sürekli çalışan ve saniyede 16,384 işlem gerçekleştiren bir veritabanının gerçekte var olamayacağını varsayar.

SCN Sınır Kontrolü

Bu komut dosyası (Oracle 10g ve üstü), zor ve yumuşak sınırların ne kadarını tükettiğinizi kontrol edecektir. Yumuşak sınırı çağırdığı için Rob'a teşekkürler.

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;

2
Cevabın geldiğini görüyorum. Riyaj'ın orainternals.com/2012/01/20/scn-what-why-and-how adresindeki makalesini de okumalısınız
Niall Litchfield

Referans için teşekkürler! Başkasının okumak istediği takdirde makale şu anda orainternals.wordpress.com/2012/01/19/scn-what-why-and-how
Magnus Reftel

6

İşte SCN hata sorunu ile ilgili aklıma veritabanlarımı kontrol etmek için geldi bir sorgu:

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

DB bağlantıları kullanan veritabanlarımın çoğu% 3,5 bitkin işaretindedir ve 50'den fazla yıl boyunca geçerli hızda sorun yaşamadan devam edebilir. Bu, SCN hatasını gıdıklayan birinden güvenli olduğum anlamına gelmez, ancak en azından diğerlerinden çok daha yüksek veya sınıra yakın bir veritabanı bulamadık.


2

281,474,976,710,656 zor sınırdır. Yumuşak limitin ne olduğunu bilmek isteyeceksiniz, çünkü bu ilk önce başınıza vurduğunuz değerdir. Yumuşak sınır (kabaca) 1 Ocak 1988 x 16384'ten bu yana geçen saniye sayısı ile hesaplanır.


Eski cevapların (Nick tarafından bağlanan makalede bahsedildiği gibi) yumuşak sınırı nasıl kaçırdığını bilmiyorum - bu yüzden eksik ayrıntıyı eklemek için iyi bir fikir.
dezso
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.