हमारे पास एक बहुत बड़ा डेटाबेस (~ 6TB) है, जिसकी लेन-देन लॉग फ़ाइल हटा दी गई थी (जबकि SQL सर्वर बंद हो गया था। हमने कोशिश की है:
- डेटाबेस का पता लगाना और पुन: परीक्षण करना; तथा
- लेन-देन लॉग फ़ाइल को हटाना
... लेकिन अभी तक कुछ भी काम नहीं किया है।
वर्तमान में हम चल रहे हैं:
ALTER DATABASE <dbname> REBUILD
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')
... लेकिन डेटाबेस के आकार को देखते हुए, इसे पूरा होने में शायद कुछ दिन लगेंगे।
प्रशन
क्या ऊपर और निम्न कमांड के बीच अंतर है?
DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
क्या हमें
REPAIR_ALLOW_DATA_LOSS
इसके बजाय क्रियान्वित होना चाहिए ?
यह ध्यान देने योग्य है कि डेटा अन्य स्रोतों से प्राप्त होता है, इसलिए डेटाबेस को फिर से बनाया जा सकता है, हालांकि हमें संदेह है कि डेटाबेस की मरम्मत के लिए सभी डेटा को फिर से पुन: स्थापित करने की तुलना में यह बहुत तेज होगा।
अपडेट करें
स्कोर रखने वालों के लिए: ALTER DATABASE/REBUILD LOG
कमान लगभग 36 घंटे के बाद पूरी हुई और रिपोर्ट की गई:
चेतावनी: डेटाबेस के लिए लॉग 'dbname' को फिर से बनाया गया है। लेन-देन की संगति खो गई है। RESTORE श्रृंखला टूट गई थी, और सर्वर में अब पिछली लॉग फ़ाइलों पर संदर्भ नहीं है, इसलिए आपको यह जानना होगा कि वे क्या थे।
भौतिक संगतता को मान्य करने के लिए आपको DBCC CHECKDB चलाना चाहिए। डेटाबेस को केवल डीबो मोड में रखा गया है। जब आप डेटाबेस को उपयोग के लिए उपलब्ध करने के लिए तैयार हों, तो आपको डेटाबेस विकल्प को रीसेट करने और किसी भी अतिरिक्त लॉग फाइल को हटाने की आवश्यकता होगी।
हमने तब एक DBCC CHECKDB
(लगभग 13hrs लिया) भाग लिया जो सफल रहा। मान लीजिए कि हमने सभी डेटाबेस बैकअप (और परियोजना प्रबंधकों को सर्वर तक पहुंच प्रदान करने ...) का महत्व सीखा है।