Назад | Перейти на главную страницу

Произошла неустранимая ошибка во время поиска в базе данных

Укороченная версия: Почему Test-Connection сообщить «Произошла неустранимая ошибка во время поиска в базе данных» для автономного хоста в другой подсети?


Я использую PowerShell для проверки связи удаленного хоста с Test-Connection командлет:

$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-серверы - это контроллеры Windows AD, на которых запущена служба DNS. Я могу преобразовать имя хоста в IP-адрес, используя nslookup:

Name:    computer01.domain.com
Address:  192.168.2.153

На сайте MS говорится следующее:

Это неисправимая ошибка. Это указывает на то, что во время поиска в базе данных произошла какая-то неисправимая ошибка. Это может быть связано с тем, что файлы базы данных (например, 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.

Бег tracert для целевого IP-адреса это подтверждает:

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.

Это сообщение указывает на одну из двух проблем: либо у локальной системы нет маршрута к желаемому пункту назначения, либо удаленный маршрутизатор сообщает, что у него нет маршрута к пункту назначения ...

Если появляется сообщение «Ответ от <IP-адрес>: узел назначения недоступен», то проблема маршрутизации возникла на удаленном маршрутизаторе, адрес которого указан в поле «<IP-адрес>». Используйте соответствующую утилиту или средство для проверки таблицы IP-маршрутизации маршрутизатора, которому назначен IP-адрес <IP-адрес>.

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


Устранение неполадок пт. 2

Я просмотрел пакеты ICMP с помощью WireShark. Я вижу, что ответ от этого роутера:

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

Пункт назначения недоступен генерируется хостом или его входящим шлюзом, чтобы сообщить клиенту, что пункт назначения по какой-то причине недоступен ... Недостижимые порты TCP, в частности, отвечают TCP RST, а не типом Destination Unreachable 3, как можно было бы ожидать.

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

И наконец

У меня также есть отдельное / независимое подтверждение того, что целевой хост находится вне сети, что объясняет, почему маршрутизатор не может «достичь» цели. Мне все еще интересно, почему Test-Connection командлет выдал то, что (для меня) такое вводящее в заблуждение сообщение об исключении.

Спасибо, что поделился. Вы заставили меня посмотреть документы, так как у меня была такая же ошибка.

Похоже, что это «особенность» Test-Connection; они, кажется, знают об этом, поскольку предлагают обходной путь.

Помощь для Test-Connection говорит, что если вы хотите, чтобы он возвращал только логическое значение, вы должны использовать -Quiet switch при вызове, иначе он пытается вернуть объект. Вот дословно:

Когда вы используете параметр AsJob, командлет возвращает объект задания. Когда вы используете параметр Quiet, он возвращает логическое значение. В противном случае этот командлет возвращает объект Win32_PingStatus для каждого запроса связи.

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

Так -Quiet это для меня, а не -ErrorAction SilentlyContinue.

После устранения неполадок, которые я применил к этому, я пришел к выводу, что Test-Connection возвращает очень бесполезное сообщение об ошибке и / или неверно интерпретирует ответ «Целевой хост недоступен», полученный от маршрутизатора.

Если кто-то еще видит это, я бы предложил запустить tracert чтобы подтвердить, есть ли на маршруте какое-либо устройство, которое может возвращать ответ на запрос ping.

Если у вас есть какой-либо другой способ, кроме ping, чтобы определить, находится ли хост в сети или нет, это сделает хорошую проверку работоспособности и поможет вам решить, можете ли вы игнорировать эти ошибки (используя -ErrorAction) при условии, что хост отключен:

$Computer = "COMPUTER01"

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

Кстати, казалось, что единственная разница между ping и Test-Connection заключалось в том, что время жизни (TTL) пакета ICMP различалось между ping (128) и Test-Connection (80). Последний командлет действительно включает -TimeToLive переключитесь, если это кому-то важно; в моем тестировании это не имело никакого значения.