是否有任何知道/如果有可能在Sql Server 2008中查看依賴於鏈接服務器的所有表/視圖/存儲過程。基本上就好像上下文菜單「View dependencies」是鏈接服務器可訪問嗎?查看鏈接的服務器依賴關係sql server 2008
任何幫助非常感謝。
感謝
是否有任何知道/如果有可能在Sql Server 2008中查看依賴於鏈接服務器的所有表/視圖/存儲過程。基本上就好像上下文菜單「View dependencies」是鏈接服務器可訪問嗎?查看鏈接的服務器依賴關係sql server 2008
任何幫助非常感謝。
感謝
搜索它
SELECT OBJECT_NAME(object_id), *
FROM sys.sql_modules
WHERE definition LIKE '%myLinkedServer%'
或者使用免費Red gate SQL Search做同樣具有GUI
沒有表或功能的服務器 - 在曲目間的依賴關係高級鏈接服務器對象和數據庫級對象
注意:INFO RMATION_SCHEMA視圖和傳統syscomments會截斷定義,因此在定義搜索時不可靠。
以下@Mitch小麥的建議,這裏有一些SQL運行@ 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
+1感謝您的支持,爲您提供了追蹤所有數據庫中鏈接服務器使用情況所需的全部信息。 – djskinner
我會建議改變查詢的中間部分如下,以確保只有當它在查詢中使用時,你會得到一個命中。 如果沒有,只要提到服務器名稱,就會得到很多誤報。
WHERE
definition LIKE ''%\[' + srv.name + '\].%''
or definition LIKE ''%' + srv.name + '.%''', CHAR(13) + CHAR(10), '') AS Query
你就必須運行在服務器上的每個數據庫中搜索...也許使用sp_msforeachdb –
謝謝,很好地工作,節省時間:) – Peuge
很多這將工作,除非你有存儲之外的查詢SQL Server(例如在報表中)使用鏈接服務器。在這種情況下,你不得不求助於追蹤或擴展事件。 – PseudoToad