ओरेकल के किसी भी संस्करण को देखते हुए:
- मुझे अपना वर्तमान 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 की एक कठिन सीमा इसके प्रारूप द्वारा और एक नरम सीमा Oracle द्वारा कृत्रिम रूप से लगाई गई है, जैसा कि यहाँ वर्णित है । मैंने नीचे दिए गए प्रासंगिक अंशों को उद्धृत किया है (जोर दिया गया है)।
ओरेकल के फ्लैगशिप डेटाबेस एप्लिकेशन के आर्किटेक्ट को अच्छी तरह से पता होना चाहिए कि SCN को बड़े पैमाने पर पूर्णांक होना चाहिए। यह है: एक 48-बिट संख्या ( 281,474,976,710,656 )। यह एक Oracle डेटाबेस के लिए लेनदेन की संख्या को ग्रहण करने और समस्याओं का कारण बनने के लिए eons ले जाएगा - या तो आप सोच सकते हैं।
नरम सीमा एक बहुत ही सरल गणना से निकलती है जो 24 साल पहले के समय में एक बिंदु तक पहुंच गई थी: 00:00:00 01/01/1988 से सेकंड की संख्या ले लो और उस आंकड़े को 16,384 से गुणा करें। यदि वर्तमान SCN मान इससे कम है, तो सब ठीक है और प्रसंस्करण सामान्य रूप से जारी है। इसे सरल शब्दों में कहें तो गणना मानती है कि 01/01/1988 से लगातार चल रहा एक डेटाबेस, प्रति सेकंड 16,384 लेनदेन को संसाधित करता है, वास्तविकता में मौजूद नहीं हो सकता है।
यह स्क्रिप्ट (Oracle 10g और ऊपर) यह जांच करेगी कि आपने कितनी कठिन और नरम सीमाएँ समाप्त की हैं। नरम सीमा से बाहर कॉल करने के लिए रोब का धन्यवाद।
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;
मेरे अधिकांश डेटाबेस जो डीबी लिंक का उपयोग करते हैं, वे 3.5% थकावट के निशान पर हैं और बिना किसी समस्या के 50+ वर्षों तक वर्तमान दर पर जारी रह सकते हैं। इसका मतलब यह नहीं है कि मैं SCN बग को गुदगुदाने वाले किसी व्यक्ति से सुरक्षित हूं, लेकिन कम से कम हमें एक ऐसा डेटाबेस नहीं मिला जो दूसरों की तुलना में अधिक हो या सीमा के करीब हो।
281,474,976,710,656 कठिन सीमा है। आप जानना चाहेंगे कि नरम सीमा क्या है, क्योंकि यह वह मूल्य है जो आप पहले अपने सिर पर मारेंगे। 1 जनवरी, 1988 x 16384 के बाद से गिरी हुई सेकंड की संख्या से गणना नरम सीमा (लगभग) है।