2010-03-01 10 views
7

में अप्रयुक्त तालिकाओं को कैसे खोजें, क्या डेटा को अंतिम बार तालिका में दर्ज किया गया था, यह जानने का कोई तरीका है? मैं अपने डेटाबेस में अप्रचलित तालिकाओं को खोजने की कोशिश कर रहा हूं और जानना चाहूंगा कि क्या एक साधारण स्क्रिप्ट है जिसे मैं चला सकता हूं?SQL सर्वर

उत्तर

7

आप इस तरह sys.dm_db_index_usage_stats गतिशील प्रबंधन देखें क्वेरी करने के परिणामों की जांच की कोशिश कर सकते:

SELECT * 
FROM sys.dm_db_index_usage_stats 
WHERE [database_id] = DB_ID() 
    AND [object_id] = OBJECT_ID('TableName') 

यह मेज पर अनुक्रमित पर अद्यतन दिनांक last_user_seek तरह बातें वापस आ जाएगी, स्कैन और।

हावेवर, गतिशील प्रबंधन दृश्य के आंकड़ों के रूप में सावधान रहें जब सर्वर पुनरारंभ होता है तो रीसेट हो जाता है। जितना लंबा सर्वर चल रहा है, रिकॉर्ड अगर कोई गतिविधि नहीं दिखाता है तो आप जितना अधिक आत्मविश्वास प्राप्त कर सकते हैं।

मैं व्यक्तिगत रूप से भी प्रश्न में तालिका में संदर्भ के लिए जाँच करने के लिए सभी स्रोत कोड की जाँच सकता है, और संदर्भ के लिए भी खोज कर सभी sprocs/UDFs (आप SQL Search from Red Gate उपयोग कर सकते हैं यह करने के लिए - यह मुफ़्त है) होगा

+0

यह वही है जो मैं ढूंढ रहा था। धन्यवाद! : ओ) –

0

यदि यह आपके एप्लिकेशन (ओं) और/या कंपनी के लिए महत्वपूर्ण है, और टेबल सही ढंग से डिज़ाइन किए गए थे, तो प्रत्येक तालिका में 'LastModifiedTime' जैसे कुछ कॉलम होना चाहिए। आप कौन सी टेबल अप्रचलित हैं यह निर्धारित करने के लिए आप इस तालिका से पूछ सकते हैं।

+0

दुर्भाग्यवश, मैंने प्रारंभिक डेटाबेस तैयार नहीं किया था। तो, मैं सोच रहा था कि sys डेटाबेस टेबल में कुछ है जो मैं यह जानने के लिए क्वेरी कर सकता हूं कि कौन सी टेबल का उपयोग नहीं किया जाता है, या थोड़ी देर में इसका उपयोग नहीं किया जाता है। –

1

हैं कोई भी डेटाबेस में सभी अप्रयुक्त तालिकाओं की तलाश कर रहा है (प्रश्नपत्र की तुलना में शीर्षक का अनुरोध अधिक), this guy डेटाबेस में सभी अनलर्टेड तालिकाओं को लाने के लिए एक अच्छी क्वेरी थी। इस मामले में, "unaltered" sys.dm_db_index_usage_stats में प्रवेश के बिना कोई भी तालिका है (फिर से, AdaTheDev के उत्तर के साथ, केवल अंतिम SQL सर्वर रीबूट के बाद से)।

SELECT OBJECTNAME = Object_name(I.object_id), 
     INDEXNAME = I.name, 
     I.index_id 
FROM sys.indexes AS I 
     INNER JOIN sys.objects AS O 
       ON I.object_id = O.object_id 
WHERE Objectproperty(O.object_id, 'IsUserTable') = 1 
     AND I.index_id NOT IN (SELECT S.index_id 
           FROM sys.dm_db_index_usage_stats AS S 
           WHERE S.object_id = I.object_id 
            AND I.index_id = S.index_id 
            AND database_id = Db_id(Db_name())) 
ORDER BY objectname, 
      I.index_id, 
      indexname ASC