重複したコンピュータ名が存在している


マイクロソフト セキュリティ サポートの斉藤です。


WSUS 2.0 SP1 では、データベース内に、同一コンピュータ名を有する複数クライアントのレコードが存在する場合があります。(※)
これに対し、WSUS 3.0 SP1 においては、同一コンピュータ名の複数クライアントの登録を許容しません。
この相違のため、WSUS 2.0 で同一名クライアントが複数存在する場合には、あらかじめそのレコードを削除してからデータを移行することが必要となります。
WSUS 3.0 SP1 のインストーラは内部にこのような処理を組み込んでおり、アップグレード時に重複名クライアントが存在する場合は最新の 1 件だけを残して他を削除し、WSUS 3.0 データベースへインポートを行います。
もし何らかの理由でこの削除が完了せず、重複名レコードが残った状態で後続処理に進むと、テーブルのキー制約違反が発生してアップグレードが失敗に終わる結果となります。


(※) WSUS 2.0 SP1 においては、同一コンピュータ名 (FQDN 名) を持つ複数クライアントの登録が可能です。Active Directory 配下では、物理的に異なる 2 台のコンピュータが同時に同一 FQDN 名を持つことはあり得ません。しかし WSUS はクライアントを一意に識別するために SusClientId というクライアントのレジストリ値を使用します。
クライアントを再セットアップするとこのレジストリが異なる値で再生成されることから、新規クライアントとして WSUS へ追加登録される結果となります。こうした理由で同一 FQDN 名の複数クライアントがデータベース内に存在する場合があります。WSUS 3.0 SP1 においてはこの動作に変更があり、同一FQDN 名の複数レコードを登録しないようになっています。


しかしWSUS 3.0 インストーラの不具合のため、この重複が残ったまま後続処理に進む場合があります。これは次の状況で発生します。


(a) WSUS アップグレードの処理中、稀にデータベース接続に関するエラーが発生して処理が中断されることがあります。
※ この事象は SQL Server 2005 の問題と考えられます。発生条件の詳細については特定できておりません。


(b) 上記事象 (a) が発生した場合は、WSUS インストーラによって必要処理が再試行されます。
しかし再試行の内容に不備があり、重複名クライアントの削除処理が正しく行われません。この結果アップグレードが失敗に終わります。


事象 (a) は SQL Server、また (b) は WSUS インストーラの問題です。このうち (b) は事象 (a) が発生したときにだけ表面化する問題です。
もし事象 (a) が発生しなければ WSUS インストーラは処理の再試行を行わず、重複名クライアントの削除が正常に完了しますので、アップグレードの問題は発生しません。
事象 (a) の発生条件は残念ながら明確になっておりませんが、発生率は比較的低いことが判っており、このため多くの場合は、重複名クライアントが存在しても問題 (b) が表面化せず、アップグレードは成功します。


[回避策]
弊社では、本現象を WSUS 3.0 の不具合として認識しております。
現時点では WSUS 3.0 SP2 にて修正を実施する方向で調整しておりますが、修正公開までの回避策として次の手順をご検討ください。


****************************************************
回避策 1 
・まず WSUS 2.0 (SP1) の環境を復旧します。
・次に、重複名クライアント (またはその可能性のあるクライアント) をすべて WSUS 2.0 (SP1) 上から削除し、その後で WSUS 3.0 SP1
へのアップグレードを再実行します。


回避策 2 
・WSUS 2.0 (SP1) を完全にアンインストールし、WSUS 3.0 SP1 を新規インストールします。
****************************************************


回避策 1 の重複クライアントを削除する手順としては、次のいずれかが考えられます。


・SQL クエリを使用して重複関係にある個々のクライアント名を特定しておき、それらを WSUS 管理画面にて手動で削除する。


・API サンプル ツール "CleanStaleComputers.exe" で、一定期間以上アクセスのないクライアントを一括削除する。実行後 SQL クエリを使用して重複クライアントの有無を確認し、重複が残っている場合はさらにクライアントを削除する。


このために必要な作業手順として以下をご案内申し上げます。
-----
A. SQL クエリで 重複クライアントの有無とそのクライアント名を調査する手順
B. "CleanStaleComputers.exe" ツールでクライアントを一括削除する手順
-----


========================================================================
A. SQL クエリで 重複クライアントの有無とそのクライアント名を調査する手順
========================================================================


A-1. SQL Server 2000 / 2005 をお使いの場合
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1) Microsoft SQL Server Management Studio ( SQL Server 2005 の場合 ) または SQL Server Enterprise Manager ( SQL Server 2000 の場合 ) を起動します。
2) [新しいクエリ] を開き、SUSDB を指定して以下の SQL コマンドを実行します。


select FullDomainName, count(*) from tbComputerTarget group by FullDomainName having count(*) > 1


※この結果、重複しているコンピュータ名とそれぞれの登録レコード件数がリストされます。
※出力結果が 0 件の場合、コンピュータ名の重複はありません。


A-2. WMSDE をお使いの場合
~~~~~~~~~~~~~~~~~~~~~~~~~~
1) コマンド プロンプトを起動します。


2) 下記コマンドを実行してフォルダを移動します。


cd "C:\Program Files\Update Services\Tools\osql"


3) 下記コマンドを実行して SQL 文の結果をテキストファイルに出力します。


osql -S %computername%\WSUS -E -Q "USE SUSDB SELECT FullDomainName, count(*) from tbComputerTarget group by FullDomainName having count(*) > 1" -oC:\temp\dup.txt -w2000


(注)
- -o にて、出力先テキストファイル名を指定します。上記では、C:\temp\dup.txt という名前で出力していますが任意の内容にご変更ください。
- -w2000 にて、改行しない形式で出力します。


※この結果、指定したテキストファイルへ、重複するコンピュータ名とそれぞれの登録レコード件数のリストが出力されます。
※出力結果が 0 件の場合、コンピュータ名の重複はありません。


重複しているコンピュータが確認できたら、管理画面から削除してください。


======================================================================
B. "CleanStaleComputers.exe" ツールでクライアントを一括削除する手順
======================================================================
WSUS の API を使用すると、一定期間以上 WSUS にアクセスしていないクライアントを一括削除する処理が可能です。


この サンプルツール "CleanStaleComputers.exe" が弊社サイトで公開されております。
ツール自体は恐縮ながらサンプルとしての位置づけのため不具合修正などの正式サポートの対象外とはなりますが、多くのお客様にお使いいただいているツールでありご検討頂けますと幸いです。


● WSUS API を使用したサンプル ツールは以下の URL からダウンロード可能です。
- Windows Server Update Services Downloads
<http://download.microsoft.com/download/8/d/0/8d068114-bd66-4fde-a04c-aeaa9d1fe640/Update%20Services%20API%20Samples%20and%20Tools.EXE>


このファイルを実行して展開・インストールしますと下記フォルダ内に "CleanStaleComputers.exe" が展開されます。


"C:\Program Files\Update Services API Samples and Tools\CleanStaleComputers\CleanStaleComputers.exe" を以下の要領でコマンド プロンプトから実行すると、一定期間 WSUS にアクセスがないクライアントのデータを一括して削除することができます。コマンドの構文は下記の通りです。


CLEANSTALECOMPUTERS /DAYS:[1-365] /DELETE:{YES | NO} /PROMPT:{YES | NO}


/DAYS. Days since the computer contacted the server
/DELETE. Delete from the WUS server or move to the Stale computers group
/PROMPT. Prompt before moving/deleting computers


使用例:
30日間アクセスのないコンピュータを削除する場合


CLEANSTALECOMPUTERS /DAYS:30 /DELETE:YES /PROMPT:YES


PROMPT: YES を指定すると、削除開始前に確認メッセージが表示されます。
多数のレコードを削除する場合は、ある程度の処理時間がかかります。
削除完了後は、上述 A の クエリを実行して重複クライアントの有無をご確認ください。まだ重複クライアントが存在する場合には、管理画面から手動で削除するか期間の指定を変えてさらに削除を実行してください。

Comments (0)

Skip to main content