एसक्यूएल सर्वर संस्करण - 2008 R2हो रही एसक्यूएल सर्वर क्रॉस डेटाबेस निर्भरता
मैं रखरखाव पर लेने का एक उद्देश्य के साथ एक डीएमएस समाधान का मूल्यांकन, पर काम कर रहा हूँ। मूल समाधान में एक केंद्रीय डेटाबेस है, जिसमें निर्माता से संबंधित डेटा है। इसमें प्रत्येक डीलर के लिए एक डेटाबेस भी है, जिसका अर्थ है कि बहुत सारे क्रॉस डेटाबेस निर्भरताएं हैं।
समस्याओं:
- कोई DB प्रलेखन
- कोई कोड टिप्पणी
- ढेर बहुत
- कोई मानक वस्तु नामकरण सम्मेलनों
- केंद्रीय डीबी 460+ टेबल और 900 + sprocs है अन्य के अलावा वस्तुओं
- प्रत्येक डीलर डीबी 370+ टेबल और 2350+ sprocs है, additio में अन्य वस्तुओं
पहले कदम के रूप के लिए n, मैं डीबी, जिसके लिए वह पार डेटाबेस निर्भरता भी शामिल वस्तु निर्भरता, समझने के लिए महत्वपूर्ण है की एक पूरी सफाई की सिफारिश कर रहा हूँ। मैंने रेड गेट के समाधान का उपयोग करने की कोशिश की, लेकिन आउटपुट बहुत विशाल है। सभी मैं चाहता हूँ डेटाबेस किसी भी निर्भरता की जरूरत नहीं है कि में वस्तुओं की एक सूची है - वे न तो अन्य वस्तुओं पर निर्भर करते हैं, और न ही वहाँ किसी भी वस्तुओं है कि उन पर निर्भर कर रहे हैं। - निर्भरता - जो में मैं इस परिणाम प्रत्येक डीबी से सेट डालने की जाएगी
SELECT
DB_NAME() referencing_database_name,
OBJECT_NAME (referencing_id) referencing_entity_name,
ISNULL(referenced_schema_name,'dbo') referenced_schema_name,
referenced_entity_name,
ao.type_desc referenced_entity_type,
ISNULL(referenced_database_name,DB_NAME()) referenced_database_name
FROM sys.sql_expression_dependencies sed
JOIN sys.all_objects ao
ON sed.referenced_entity_name = ao.name
मैं एक मेज बनाने की जाएगी:
यहाँ स्क्रिप्ट मैं निर्भरता की एक सूची प्राप्त करने के लिए इस्तेमाल किया है। AllObjects- जो डेटाबेस में सभी वस्तुओं की एक सूची में शामिल होंगे - एक अगले कदम के रूप में, मैं भी एक और तालिका बनाने की जाएगी। यहाँ यह करने के लिए स्क्रिप्ट है:
SELECT
DB_NAME() DBName,
name,
type_desc
FROM sys.all_objects
WHERE type_desc IN
(
'VIEW',
'SQL_TABLE_VALUED_FUNCTION',
'SQL_STORED_PROCEDURE',
'SQL_INLINE_TABLE_VALUED_FUNCTION',
'USER_TABLE',
'SQL_SCALAR_FUNCTION'
)
अब, यह मेज, कि निर्भरता तालिका में referenced_entity_name स्तंभ में दिखाई नहीं देते वस्तुओं है कि मैं देख रहा हूँ की एक सूची देना चाहिए से नाम की एक सूची।
SELECT
AO.DBName,
AO.name,
AO.type_desc
FROM AllObjects AO
LEFT OUTER JOIN Dependencies D ON
D.referenced_database_name = AO.DBName AND
D.referenced_entity_name = AO.name AND
D.referenced_entity_type = AO.type_desc
WHERE
D.referenced_database_name IS NULL AND
D.referenced_entity_name IS NULL AND
D.referenced_entity_type IS NULL
अब सवाल:
- कुछ वस्तु निर्भरता उत्पादन में लापता हो रहे हैं। मैं क्या याद आ रही रहा हूँ?
- मैं कैसे सत्यापित करूं कि मेरे निष्कर्ष सही हैं?
- मेरा मतलब है कि ऐसा करने का एक अलग तरीका है, इसलिए मैं परिणामों की तुलना कर सकता हूं और दोबारा जांच कर सकता हूं?
अग्रिम धन्यवाद,
राज
आप भी प्रणाली वस्तुओं की परवाह करते हैं है? –
लेकिन टाइप = 'यू' केवल उपयोगकर्ता टेबल देगा, है ना? मुझे अन्य उपयोगकर्ता निर्मित वस्तुओं पर विचार करने की भी आवश्यकता है। – Raj
क्षमा करें, "और is_ms_shipped = 0" दूसरी क्वेरी के लिए अधिक उपयुक्त हो सकता है। यह सिस्टम विशिष्ट वस्तुओं को बाहर करना चाहिए। –