Як знайти свій поточний SCN?


14

З огляду на будь-яку версію Oracle:

  • Як знайти свій поточний SCN?
  • Який максимально можливий SCN?

Це питання надихнуло цю статтю . Напевно, дуже багато людей Oracle шукають ці цифри зараз. :)
Нік Чаммас

Схоже, посилання з мого попереднього коментаря зараз порушено. Я вважаю, що сторінку тут перенесли: infoworld.com/article/2618409/…
Нік Чаммас

Відповіді:


16

Поточний SCN

Oracle 9i:

SELECT dbms_flashback.get_system_change_number as current_scn 
FROM DUAL;

Oracle 10 г і вище:

SELECT current_scn
FROM V$DATABASE;

Обмеження SCN

SCN має жорсткий ліміт, накладений своїм форматом, і м'який ліміт, накладений штучно Oracle, як описано тут . Я цитував відповідні частини нижче (акцент додано).

Жорсткий ліміт

Архітектори флагманського додатку бази даних Oracle, мабуть, добре знали, що SCN повинен бути великим цілим числом. Це: 48-бітове число ( 281,474,976,710,656 ). Минуло б еони, щоб база даних Oracle затьмарила таку кількість транзакцій і спричинила проблеми - інакше ви можете подумати.

М'який ліміт

Проміжна межа походить від дуже простого розрахунку, прикріпленого до моменту часу 24 роки тому: візьміть кількість секунд з 00:00:00 01.01.1988 і помножте цю цифру на 16 384. Якщо поточне значення SCN нижче цього, то все добре і обробка триває як звичайна. Простіше кажучи, підрахунок передбачає, що база даних, що працює з 01.01.1988, постійно обробляє 16 384 транзакцій, не може існувати в реальності.

Перевірка межі SCN

Цей сценарій (Oracle 10 г і вище) перевірить, яку частину жорстких і м'яких обмежень ви вичерпали. Завдяки Робу за те, що він запросив м'яку межу.

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
Я бачу, ти маєш свою відповідь. Ви також повинні прочитати статтю Ріяя
Niall Litchfield,

Дякую за довідку! Якщо хтось хоче його прочитати, стаття зараз знаходиться на веб-
Magnus Reftel

6

Ось запит, який я придумав, щоб перевірити мої бази даних щодо надійності щодо проблеми помилки 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;

Більшість моїх баз даних, які використовують посилання на БД, значать 3,5% вичерпаності і можуть продовжуватись за поточною швидкістю 50+ років без проблем. Це не означає, що я захищений від того, щоб хтось тикав помилку SCN, але принаймні ми не знайшли базу даних, яка була набагато вищою за інші або була близькою до межі.


2

281,474,976,710,656 є жорсткою межею. Ви хочете дізнатись, що таке м'яка межа, оскільки це значення, яке ви вперше б'єте головою. М'який межа (приблизно) обчислюється кількістю пройдених секунд з 1 січня 1988 р. X 16384.


Я не знаю, як старі відповіді пропустили м'яку межу (про яку згадується у статті, пов’язаній Ніком) - тому це гарна ідея для додання пропущеної деталі.
dezso
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.