web-dev-qa-db-ja.com

データベースのルックアップ中に回復不可能なエラーが発生しました

短いバージョン:なぜTest-Connectionは、別のサブネット上のオフラインホストに対して「データベースの検索中に回復不可能なエラーが発生しました」と報告するのですか?


PowerShellを使用して、Test-Connectionコマンドレットでリモートホストにpingしています。

$Computer = "COMPUTER01"
Test-Connection -ComputerName $Computer -Count 3

次のエラーメッセージが表示されます。

System.Net.NetworkInformation.PingException: Testing connection to computer
'COMPUTER01' failed: A non-recoverable error occurred during a database
lookup ---> System.ComponentModel.Win32Exception: A non-recoverable error
occurred during a database lookup.

私のDNSサーバーは、DNSサービスを実行しているすべてのWindows ADコントローラーです。 nslookupを使用してホスト名をIPアドレスに解決できます。

Name:    computer01.domain.com
Address:  192.168.2.153

MSのWebサイトは次のように述べています。

これは回復不可能なエラーです。これは、データベースのルックアップ中になんらかの回復不可能なエラーが発生したことを示します。これは、データベースファイル(たとえば、BSD互換のHOSTS、SERVICES、またはPROTOCOLSファイル)が見つからなかったか、サーバーからDNS要求が返され、重大なエラーが発生したことが原因である可能性があります。

https://msdn.Microsoft.com/en-us/library/windows/desktop/ms740668(v = vs.85).aspx

質問:どの「データベースルックアップ」が失敗する可能性がありますか?


トラブルシューティングポイント1

同じホストをpingしようとしましたが、これも失敗しますが、より馴染みのあるメッセージが表示されます。

C:\> ping COMPUTER01

Pinging COMPUTER01.domain.com [192.168.2.153] with 32 bytes of data:
Reply from 192.168.0.220: Destination Host unreachable.

ターゲットIPアドレスに対してtracertを実行すると、これが確認されます。

C:\> tracert -d 192.168.2.153

7    40 ms    40 ms    40 ms  192.168.0.220
8  192.168.0.220  reports: Destination Host unreachable.

このメッセージは、ローカルシステムに目的の宛先へのルートがないか、リモートルーターが宛先へのルートがないことを報告するという2つの問題のいずれかを示しています...

メッセージが「<IPアドレス>からの返信:宛先ホストに到達できません」である場合、「<IPアドレス>」フィールドでアドレスが示されているリモートルーターでルーティングの問題が発生しました。適切なユーティリティまたはファシリティを使用して、<IPアドレス>のIPアドレスが割り当てられているルーターのIPルーティングテーブルを確認します。

https://technet.Microsoft.com/en-us/library/cc940095.aspx


トラブルシューティングポイント2

WireSharkを使用してICMPパケットを確認しました。このルーターからの応答は次のとおりです。

Type: 3 (Destination unreachable)
Code: 1 (Host unreachable)

Destination unreachableはホストまたはそのインバウンドゲートウェイによって生成され、何らかの理由で宛先に到達できないことをクライアントに通知します... Unreachable TCP ports特に期待どおりに、宛先到達不能タイプ3ではなくTCP RSTで応答します。

https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Destination_unreachable

そして最後に

また、ターゲットホストがネットワーク外にあることがわかっているという個別の/独立した確認があります。これは、ルーターがターゲットに「到達」できない理由を説明しています。なぜTest-Connectionコマンドレットがそのような誤解を招くような例外メッセージ(私にとって)をスローしたのか、まだ疑問に思っています。

6
Charlie Joynt

私がこれに入れたトラブルシューティングの後、私の結論は、_Test-Connection_が非常に役に立たないエラーメッセージを返しているか、ルーターから受信した "宛先ホストに到達できません"応答を誤って解釈していることです。

他の誰かがこれを見ている場合は、tracertを実行して、ping要求への応答を返す可能性があるデバイスがルートにあるかどうかを確認することをお勧めします。

Ping以外の方法でホストがオンラインかどうかを判断する場合は、適切な健全性チェックが行われ、ホストが次の条件であるという前提でこれらのエラーを無視できるかどうか(_-ErrorAction_を使用)を確認できるオフライン:

_$Computer = "COMPUTER01"

if(Test-Connection -ComputerName $Computer -Count 1 -ErrorAction SilentlyContinue) {
  "Online"
} else {
  "Offline"
}
_

補足として、pingと_Test-Connection_の唯一の違いは、ICMPパケットの存続可能時間(TTL)がping(128)で異なることでした。および_Test-Connection_(80)。後者のコマンドレットには、_-TimeToLive_スイッチが含まれていることが重要です。私のテストでは何の違いもありませんでした。

1
Charlie Joynt

共有いただきありがとうございます。私が同じエラーを抱えていたので、あなたは私にドキュメントを見させました。

これはTest-Connectionの「機能」のようです。彼らは回避策を提供するので、これについて知っているようです。

Test-Connectionのヘルプでは、ブール値のみを返す場合は、-Quietスイッチを使用してオブジェクトを返そうとする必要があります。ここでは逐語的です:

AsJobパラメーターを使用すると、コマンドレットはジョブオブジェクトを返します。 Quietパラメータを使用すると、ブール値が返されます。それ以外の場合、このコマンドレットは、pingごとにWin32_PingStatusオブジェクトを返します。

https://technet.Microsoft.com/en-us/library/hh849808.aspx

したがって、-Quietではなく-ErrorAction SilentlyContinueが私のためです。

1
sdjuan