2017-04-19 7 views
0

私は約4台のサーバー(test1、test2、test3、test4)と5〜6個のデータベースを持つ各サーバーを持っています。各サーバーには約60のSQLサーバー・エージェント・ジョブがスケジュールされています。検索SQLサーバーエージェントジョブのリンクサーバー名

各サーバー内の各ジョブには、SQL文とSSISパッケージの組み合わせがあります。 SQL文の内部には、別のサーバのテーブルにアクセスするprocsが格納されています。

ここで、他のサーバーのSQL Serverエージェントのジョブで、サーバーtest2が使用されているかどうかを確認します。

私は次のクエリを試みたが、いずれの結果

SELECT Job.name AS JobName, Job.enabled AS ActiveStatus, 
     JobStep.step_name AS JobStepName, JobStep.command AS JobCommand 
FROM sysjobs Job INNER JOIN 
    sysjobsteps JobStep 
    ON Job.job_id = JobStep.job_id 
WHERE JobStep.command LIKE '%test2%' 

が、私はtest1のサーバに手動でチェックインするとき、私はtest2は、サーバが格納されてprocsのとSSISパッケージに使用されて見ることができますに取得することはできません。

これはどのように達成できますか?

+0

SSISパッケージはどこに格納されていますか? SQL Serverまたはファイルシステムでは? SQL Serverの場合は、各サーバーにパッケージがありますか? –

+0

パッケージは、サーバーとファイルシステムに格納されます。はい、すべてのサーバーにパッケージがあります。 – 0537

答えて

0

これは少し難解です。プロシージャ、ファイルシステム、およびSQL Serverを個別に検索する必要があります。ジョブテーブルには、各ステップの定義ではなく、エントリポイントのみが含まれています。 SQL Serverの

SSISパッケージに格納

SSISパッケージは、msdbテーブルsysssispackagesに格納されています。定義は列packagedataに格納されます。データを読み込み/検索するには、データをキャストする必要があります。ファイルシステム

に保存されている

-- How to read package data column. 
SELECT TOP 10 
    [name], 
    packagedata           AS [Before], 
    CAST(CAST(packagedata AS VARBINARY(MAX)) AS XML) AS [After] 
FROM 
    sysssispackages 
; 

SSISパッケージは、これらのXMLテキストファイルです。あなたは好きな方法で検索することができます。独自のソリューションを構築したい場合は.Net has some great file handling ablities

ストアドプロシージャ

システムテーブルからデータを返すすべてが、いくつかの方法があります。 1つの方法は、object definition functionを使用することです。

-- Returns definition of stored procedure. 
SELECT 
    OBJECT_DEFINITION(OBJECT_ID(N'[Your-Schema].[Your-Procedure]')) 
; 

あなたがテーブルsysjobstepsを使用して完全に

これを持参する場合は、指定したサーバー名を検索したパッケージ/アプリを構築することができます。最終製品は、3つの検索方法すべてをサポートする必要があります。サブシステム列を使用して、各ステップで使用する検索方法を選択できます。