【解決方法】4 つのサーバー間で SQL サーバー エージェント ジョブを比較する方法

プログラミングQA


こんにちは-

すべて同じデータを保存する必要がある 4 つの SQL Server データベース サーバーがあります。 それらは冗長性のためにあります。 時間が経つにつれて、一部の SQL Server エージェント ジョブが 1 つのサーバーに追加され、他のサーバーには追加されなくなります。 不一致は、時間の経過とともにゆっくりと蓄積されます。 4 つの異なるサーバー間でジョブ名を比較しようとしています。 FULL OUTER JOIN を使用してすべてのジョブを含めましたが、サーバー B、C、および D のジョブはクエリ結果に「整列」しません。 最初のサーバー (サーバー A) はすべてを完全に並べますが、ジョブがサーバー A に存在せず、他の 3 つには存在する場合、結果は簡単に参照できるように並べられません。 他にこれを行う方法がわかりません。

以下は私が得ている結果ですが、望んでいません。 レポート 1、2、3 が見事に並んでいます。 レポート 4 と 5 はサーバー B、C、D に存在しますが、A には存在しません。ただし、サーバー A を除いて、レポート 4 と 5 は同じ行にある必要があります。 ありがとうございました !

SERVER_A	SERVER_B	SERVER_C	SERVER_D
REPORT_1	REPORT_1	REPORT_1	REPORT_1
REPORT_2	REPORT_2	REPORT_2	REPORT_2
REPORT_3	REPORT_3	REPORT_3	REPORT_3
NULL	    REPORT_4	NULL	    NULL
NULL	    REPORT_5	NULL	    NULL
NULL	    NULL	    REPORT_4	NULL
NULL	    NULL	    REPORT_5    NULL
NULL	    NULL	    NULL	    REPORT_4
NULL	    NULL	    NULL	    REPORT_5

私が試したこと:

SELECT A.name, B.name, C.name, D.name
FROM A.msdb.dbo.sysjobs A
FULL JOIN B.msdb.dbo.sysjobs B
ON A.name = B.name 
FULL JOIN C.msdb.dbo.sysjobs C
ON A.name = C.name 
FULL JOIN D.msdb.dbo.sysjobs D
ON A.name = D.name 

解決策 1

あなたの結合はすべて依存しています A.name、 どっちが null ジョブがサーバー A に存在しない場合。

次のようなことを試してください:

SQL
SELECT A.name, B.name, C.name, D.name
FROM A.msdb.dbo.sysjobs A
FULL JOIN B.msdb.dbo.sysjobs B ON B.name = A.name
FULL JOIN C.msdb.dbo.sysjobs C ON C.name = Coalesce(A.name, B.name)
FULL JOIN D.msdb.dbo.sysjobs D ON D.name = Coalesce(A.name, B.name, C.name)

コメント

タイトルとURLをコピーしました