ฉันจะค้นหา SCN ปัจจุบันของฉันได้อย่างไร


14

รับออราเคิลทุกรุ่น:

  • ฉันจะค้นหา 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 มีวงเงินยากที่กำหนดโดยรูปแบบและขีด จำกัด นุ่มกำหนดเทียมออราเคิลของตนตามที่อธิบายไว้ที่นี่ ฉันได้อ้างอิงส่วนที่เกี่ยวข้องด้านล่าง (เน้นเพิ่ม)

จำกัด ฮาร์ด

สถาปนิกของแอพพลิเคชั่นฐานข้อมูลหลักของออราเคิลจะต้องทราบดีว่า 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 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
Niall Litchfield

ขอบคุณสำหรับการอ้างอิง! ในกรณีที่คนอื่นต้องการอ่านบทความตอนนี้ที่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 เป็นขีด จำกัด ที่ยาก คุณจะต้องรู้ว่าขีด จำกัด ซอฟต์คืออะไรเพราะนั่นคือค่าที่คุณจะตีหัวของคุณก่อน ขีด จำกัด ซอฟต์คือ (ประมาณ) คำนวณโดยจำนวนวินาทีที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1988 x 16384


ฉันไม่ทราบว่าคำตอบเก่าพลาดขีด จำกัด อ่อนนุ่ม (ซึ่งถูกกล่าวถึงในบทความที่เชื่อมโยงโดย Nick) - ดังนั้นจึงเป็นความคิดที่ดีที่จะเพิ่มรายละเอียดที่ขาดหายไป
dezso
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.