2009-11-30 17 views
12

मुझे पता है कि अब तक (कम से कम MSSQL 2005 तक), सिस्टम डेटाबेस मास्टर, मॉडल, एमएसडीबी और tempdb हैं।एसक्यूएल सर्वर: कैसे एक डेटाबेस डेटाबेस डेटाबेस है या नहीं?

बात है, जहां तक ​​मैं कह सकता हूं, यह भविष्य में संरक्षित होने की गारंटी नहीं है। और न ही sys.databases देखें और sys.sysdatabases मुझे बताएं कि डेटाबेस को सिस्टम डेटाबेस के रूप में माना जाता है या नहीं।

क्या कोई जगह है जहां यह जानकारी (चाहे डेटाबेस को सिस्टम डेटाबेस माना जाता है या नहीं) प्राप्त किया जा सकता है?

उत्तर

16

बस Microsoft.SqlServer.Management.Smo.Database वस्तु में डुबकी लगाई वे बस इस का उपयोग करते हुए निम्नलिखित बयान करते हैं (जो अपने आप माइक्रोसॉफ्ट द्वारा प्रदान की जाती है!):

CAST(case when dtb.name in ('master','model','msdb','tempdb') 
    then 1 
    else dtb.is_distributor end AS bit) AS [IsSystemObject] 

संक्षेप में: अगर एक डेटाबेस master नाम पर है, model, msdb या tempdb, यह एक सिस्टम डीबी है; यह sys.databases दृश्य में क्षेत्र is_distributor = 1 फ़ील्ड डीबी भी है।

आशा इस मदद करता है

जिमी

+0

जिमी ने दूसरों को याद किया। जब आपको प्रतिकृति सक्षम हो जाती है, तो SQL सर्वर 'वितरण' नामक एक अतिरिक्त सिस्टम डेटाबेस जोड़ता है। –

-5

कोई विकल्प नहीं है AFAIK। मुझे लगता है कि आप आईडी को sys.databases.owner_sid = 0x01 देख सकते हैं।

मुझे नहीं लगता कि आपको सिस्टम डीबी नाम बदलने वाले एमएस के बारे में चिंता करने की ज़रूरत है। वे theat आप कम से कम 20 साल के लिए इसके बारे में चिंता करने की ज़रूरत नहीं होगी किया था :)

0

आप DB_ID() फ़ंक्शन पर भरोसा कर सकते < = 4

आप परिवर्तन करने के लिए बहुत कड़ी मेहनत करनी पड़ेगी इस ...

+0

डीबी_आईडी() sys.sysdatabases पर डीबीआईडी ​​कॉलम देता है, है ना? –

+0

@ विंको: हाँ, यह – gbn

+6

करता है यह सच नहीं है। यदि आपके पास वितरक डेटाबेस है, तो उसके पास एक आईडी> 4 होगी और यह एक सिस्टम डीबी है। – Kevin

-3

owner_sid प्रणाली डेटाबेस के लिए सिर्फ 0x01 के बराबर है। तो आप यह पहचानने के लिए इसका उपयोग कर सकते हैं कि डेटाबेस एक सिस्टम डीबी है या नहीं।

select * from sys.databases 
where owner_sid != 0x01 
+5

यह एक अच्छा विचार नहीं है, क्योंकि यह 'sa', सिस्टम या नहीं के स्वामित्व वाले किसी भी डेटाबेस को वापस कर देगा। –

+0

यह एसक्यूएल एज़ूर में काम नहीं करता है, जहां मास्टर डीबी 0x01 के अलावा अन्य सिड होगा। –

संबंधित मुद्दे