2011-06-23 17 views
6

क्या कोई जानता है कि एसक्यूएल सर्वर 2008 में किसी लिंक किए गए सर्वर पर निर्भर सभी टेबल/दृश्य/संग्रहीत प्रक्रियाओं को देखना संभव है या नहीं। मूल रूप से संदर्भ मेनू "निर्भरता देखें" था लिंक किए गए सर्वर के लिए सुलभ?लिंक किए गए सर्वर निर्भरताओं को देखें SQL सर्वर 2008

किसी भी मदद की बहुत सराहना की।

धन्यवाद

उत्तर

16

खोजें यह

SELECT OBJECT_NAME(object_id), * 
FROM sys.sql_modules 
WHERE definition LIKE '%myLinkedServer%' 

या उपयोग के लिए मुक्तRed gate SQL Search एक जीयूआई

कोई तालिका या विशेषता यह है कि सर्वर के बीच निर्भरता पटरियों है साथ भी ऐसा ही करने के लिए स्तर से जुड़े सर्वर ऑब्जेक्ट्स और डेटाबेस-स्तरीय ऑब्जेक्ट्स

नोट: INFO RMATION_SCHEMA विचार और विरासत syscomments परिभाषा को कम करने के लिए परिभाषा खोजों के लिए अविश्वसनीय हैं।

+3

आप सर्वर पर प्रत्येक डेटाबेस के लिए कि खोज चलाने के लिए ... शायद sp_msforeachdb –

+0

धन्यवाद का उपयोग कर, पूरी तरह से काम करना होगा, समय :) – Peuge

+0

की बहुत बचाया यह जब तक आप एक प्रश्न के बाहर संग्रहीत है काम करेंगे SQL सर्वर (उदाहरण के लिए एक रिपोर्ट में) जो एक लिंक किए गए सर्वर का उपयोग करता है। उस स्थिति में, आपको एक ट्रेस या विस्तारित घटनाओं का सहारा लेना होगा। – PseudoToad

4

@ मिच गेहूं के सुझाव के बाद, सर्वर पर सभी डीबी के लिए @ gbn के उत्तर को चलाने के लिए यहां कुछ वर्ग है। शायद यह किसी के लिए थोड़ा सा समय लगेगा।

USE Master; 
GO 

IF OBJECT_ID('tempdb..#Deps') IS NOT NULL 
    BEGIN 
    DROP TABLE #Deps 
    END 

CREATE TABLE #Deps 
    (
    [ServerName] [VARCHAR](500) NOT NULL, 
    [DatabaseName] [VARCHAR](500) NOT NULL, 
    [SchemaName] [VARCHAR](500) NOT NULL, 
    [ObjectName] [VARCHAR](MAX) NULL, 
    [ObjectId] [INT] NOT NULL, 
    [ObjectType] [VARCHAR](500) NOT NULL, 
    [DependsOnLinkedServer] [VARCHAR](500) NOT NULL,  
    [definition] [VARCHAR](MAX) NULL 
) 

IF OBJECT_ID('tempdb..#Queries') IS NOT NULL 
    BEGIN 
    DROP TABLE #Queries 
    END 

SELECT 
    REPLACE('INSERT INTO #Deps 
    (
     [ServerName]  
     ,[DatabaseName] 
     ,[SchemaName] 
     ,[ObjectName] 
     ,[ObjectType] 
     ,[ObjectId] 
     ,[DependsOnLinkedServer] 
     ,[definition] 
    ) 
    SELECT 
     @@SERVERNAME, 
     ''?'' AS DatabaseName, 
     s.name AS SchemaName, 
     o.name AS ObjectName, 
     o.type_desc AS ObjectType, 
     m.object_id AS ObjectId, 
     ''' + srv.name + ''' AS DependsOnLinkedServer, 
     m.definition 
    FROM 
     [?].sys.sql_modules m 
     LEFT OUTER JOIN [?].sys.objects o 
     ON m.object_id = o.object_id 
     LEFT OUTER JOIN [?].sys.schemas s 
     ON o.schema_id = s.schema_id 
    WHERE  
     definition LIKE ''%' + srv.name + '%''', CHAR(13) + CHAR(10), '') AS Query 
INTO 
    #Queries 
FROM 
    sys.servers srv; 
GO 

DECLARE @Query AS VARCHAR(MAX) 
DECLARE LinkedServerCursor CURSOR FAST_FORWARD 
FOR 
    SELECT 
    Query 
    FROM 
    #Queries 

OPEN LinkedServerCursor 
FETCH NEXT FROM LinkedServerCursor INTO @Query; 

WHILE @@FETCH_STATUS = 0 
    BEGIN 
    EXECUTE master.sys.sp_MSforeachdb @Query 

    FETCH NEXT FROM LinkedServerCursor INTO @Query; 
    END 

CLOSE LinkedServerCursor; 
DEALLOCATE LinkedServerCursor; 

GO 

SELECT 
    ServerName, 
    DatabaseName, 
    ObjectName, 
    '[' + ServerName + '].[' + DatabaseName + '].[' + SchemaName + '].[' + ObjectName + ']' AS QualifiedObjectName, 
    DependsOnLinkedServer, 
    ObjectType 
FROM 
    #Deps 
ORDER BY 
    ServerName, 
    DatabaseName, 
    ObjectName 
+0

+1 इसके लिए धन्यवाद, आपको सभी डेटाबेस में लिंक किए गए सर्वरों के उपयोग को ट्रैक करने के लिए आवश्यक सभी जानकारी देता है। – djskinner

0

मैं क्वेरी के मध्य भाग को बदलने सुनिश्चित करने के लिए केवल जब यह एक प्रश्न आप एक हिट पाने में प्रयोग किया जाता है के रूप में नीचे होने की सलाह देते हैं। यदि आप servername का उल्लेख किया जाता है तो आपको बहुत झूठी सकारात्मक नहीं मिलेगी।

WHERE  
definition LIKE ''%\[' + srv.name + '\].%'' 
or definition LIKE ''%' + srv.name + '.%''', CHAR(13) + CHAR(10), '') AS Query