รับออราเคิลทุกรุ่น:
- ฉันจะค้นหา SCN ปัจจุบันของฉันได้อย่างไร
- 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 นั้นจำเป็นต้องมีจำนวนเต็มมาก มันคือ: หมายเลข 48 บิต ( 281,474,976,710,656 ) มันจะใช้เวลานานหลายปีในการที่ฐานข้อมูล Oracle จะทำให้เกิดธุรกรรมจำนวนมากและทำให้เกิดปัญหา - หรือคุณอาจคิดว่า
ขีด จำกัด ซอฟต์มาจากการคำนวณที่ง่ายมากที่ยึดไว้กับจุดในเวลา 24 ปีที่ผ่านมา: ใช้จำนวนวินาทีตั้งแต่ 00:00:00 01/01/1988 และคูณตัวเลขนั้นด้วย 16,384 หากค่า SCN ปัจจุบันต่ำกว่าค่านั้นแสดงว่าทั้งหมดเป็นอย่างดีและการประมวลผลจะดำเนินต่อไปตามปกติ ในการทำให้สิ่งนี้อยู่ในเงื่อนไขง่าย ๆ การคำนวณจะถือว่าฐานข้อมูลทำงานอย่างต่อเนื่องตั้งแต่ 01/01/1988 ซึ่งประมวลผล 16,384 รายการต่อวินาทีไม่สามารถมีอยู่จริง
สคริปต์นี้ (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;
นี่คือแบบสอบถามที่ฉันใช้เพื่อตรวจสอบฐานข้อมูลเกี่ยวกับปัญหาข้อบกพร่องของ 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 แต่อย่างน้อยเราก็ไม่พบฐานข้อมูลที่สูงกว่าคนอื่นหรือใกล้ถึงขีด จำกัด
281,474,976,710,656 เป็นขีด จำกัด ที่ยาก คุณจะต้องรู้ว่าขีด จำกัด ซอฟต์คืออะไรเพราะนั่นคือค่าที่คุณจะตีหัวของคุณก่อน ขีด จำกัด ซอฟต์คือ (ประมาณ) คำนวณโดยจำนวนวินาทีที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1988 x 16384