현재 SCN을 어떻게 찾습니까?


14

Oracle의 모든 버전이 주어지면 :

  • 현재 SCN을 어떻게 찾습니까?
  • 가능한 최대 SCN은 무엇입니까?

이 질문은 이 기사 에서 영감을 얻었습니다 . 아마 지금이 숫자를 찾는 많은 Oracle 사람들이있을 것입니다. :)
Nick Chammas

이전 의견의 링크가 깨져있는 것 같습니다. : 그 페이지가 여기로 이사했다 생각 infoworld.com/article/2618409/...
닉 Chammas을

답변:


16

현재 SCN

Oracle 9i :

SELECT dbms_flashback.get_system_change_number as current_scn 
FROM DUAL;

Oracle 10g 이상 :

SELECT current_scn
FROM V$DATABASE;

SCN 한계

SCN에는 여기에 설명 된대로 형식에 의해 부과 된 하드 한계와 Oracle에 의해 인공적으로 부과 된 소프트 한계가 있습니다 . 아래에 관련 부분을 인용했습니다 (강조 추가).

하드 한계

오라클의 주력 데이터베이스 애플리케이션 설계자는 SCN이 거대한 정수 여야한다는 것을 잘 알고 있어야합니다. 48 비트 숫자 ( 281,474,976,710,656 )입니다. Oracle 데이터베이스가 그와 같은 수의 트랜잭션을 처리하고 문제를 일으키는 데는 수십 년이 걸릴 것입니다.

소프트 한계

소프트 한계는 24 년 전의 특정 시점에 고정 된 매우 간단한 계산에서 파생됩니다. 00:00:00 01/01/1988 이후의 시간 (초)에 16,384를 곱하십시오. 현재 SCN 값이 이보다 낮 으면 모두 정상이며 처리가 정상적으로 진행됩니다. 간단히 말하면 계산은 초당 16,384 개의 트랜잭션을 처리하는 1988 년 1 월 1 일 이후 지속적으로 실행되는 데이터베이스가 실제로 존재할 수 없다고 가정합니다.

SCN 한계 점검

이 스크립트 (Oracle 10g 이상)는 소진 된 하드 및 소프트 한계의 양을 확인합니다. 소프트 한계를 불러 온 Rob에게 감사합니다.

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
나는 당신이 당신의 대답을 참조하십시오. 당신은 또한에 Riyaj의 기사를 읽어야 orainternals.com/2012/01/20/scn-what-why-and-how
니얼 리치 필드를

참조 주셔서 감사합니다! 다른 사람이 그것을 읽고 싶어하는 경우에, 기사는 지금 orainternals.wordpress.com/2012/01/19/scn-what-why-and-how
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;

DB 링크를 사용하는 대부분의 데이터베이스는 3.5 % 소진되어 50 년 이상 현재 속도로 문제없이 지속될 수 있습니다. 이것은 내가 SCN 버그를 간질이는 사람으로부터 안전하다는 것을 의미하지는 않지만 적어도 다른 사람보다 높거나 한계에 가까운 데이터베이스를 찾지 못했습니다.


2

281,474,976,710,656은 하드 한계입니다. 소프트 리미트가 무엇인지 알고 싶을 것입니다. 소프트 리미트가 처음에 머리에 부딪힌 값이기 때문입니다. 소프트 한계는 (대략) 1988 년 1 월 1 일 이후 경과 된 시간 (초) x 16384로 계산됩니다.


이전 답변이 소프트 한계 (닉이 링크 한 기사에서 언급 됨)를 놓친 방법을 모르겠습니다. 따라서 누락 된 세부 사항을 추가하는 것이 좋습니다.
dezso 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.