Как мне установить tnsping?
Я попытался установить oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
, и я могу использовать некоторые клиентские команды, но nog tnsping.
Клиент экземпляра Oracle не включает приложение tsnping
. Вы должны запустить “Oracle Universal Installer” и включить его.
Я не помню точно, какой вариант вы должны установить, либо это “Oracle Database Utilities”, либо “Oracle Net”
Также см. McTnsping “отдельную программу Windows, для которой не требуется клиент Oracle”. Он переносной и не требует установки.
Usage 1: McTnsping.exe { <tns entry> | <host>:<port> } [<count>]
<tns entry> the net service name in the tnsnames.ora file.
<host>:<port> server name or IP and port (mandatory)
<count> number of times to check target, default is 1.
Если тот, кто доберется до такого места, как я… Вот что сработало для меня:
Мгновенный клиент версии 12.2.0.1 + sqlplus + tnsping (скопирован с другого сервера той же версии)
Структура каталогов и env (как в профиле bash):
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=${ORACLE_BASE}/instant_client122
export PATH=$ORACLE_HOME:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME #since all binaries are in $ORACLE_HOME - no bin or lib are present
export TNS_ADMIN=$ORACLE_HOME/network/admin
скопировать с другого сервера на целевой:
'tnsping' to $ORACLE_HOME
'$ORACLE_HOME/network/mesg/tnsus.msb' to $ORACLE_HOME/network/mesg
Затем поместите правильные значения в $ TNS_ADMIN/tnsnames.ora и загрузите переменные env. После этого он должен иметь возможность выполнить tnsping и показать правильное сообщение в качестве ответа.
Вот что я сделал, чтобы скопировать tnsping
на другую машину. В моем случае клиент oracle установлен на C:\Oracle\product\12.1.0\client_1
.
Это предполагает, что на целевом компьютере уже установлен Instant Client или аналогичный; и что путь оракула и ключи реестра установлены.
(1) Скопируйте tnsping.exe
из источника на конечный аппарат в client_1\bin
.
(2) Скопируйте следующие файлы из client_1\bin
в client_1\bin
:
oraasmclnt12.dll
oracell12.dll
oraclient12.dll
oraclsce12.dll
oracommon12.dll
oracore12.dll
orageneric12.dll
orahasgen12.dll
oraldapclnt12.dll
oran12.dll
orancds12.dll
orancrypt12.dll
oranhost12.dll
oranl12.dll
oranldap12.dll
oranls12.dll
oranro12.dll
orantcp12.dll
orantns12.dll
oraocr12.dll
oraocrb12.dll
oraocrutl12.dll
oraplp12.dll
orapls12.dll
ORASLAX12.DLL
orasnls12.dll
oraunls12.dll
orauts.dll
oravsn12.dll
oraxml12.dll
orazt12.dll
oraztkg12.dll
Это должно быть около 84,6 МБ.
(3) В client_1
на конечном компьютере сделайте резервную копию следующих файлов:
oci.dll
orannzsbb12.dll
oraons.dll
orasql12.dll
orawsec12.dll
Теперь на исходном компьютере найдите эти файлы в client_1\bin
и скопируйте их в client_1\
(без корзины) на конечном компьютере, перезаписав существующие файлы. (Примечание: файл oci.dll меньше на ~ 330 КБ, файл orasql12.dll меньше на ~ 300 КБ. Я не уверен, что потеряно, следовательно, резервное копирование).
(4) На целевом компьютере создайте каталог mesg
в client_1\Network
. Теперь скопируйте следующий файл из источника в место назначения:
client_1\Network\mesg\tnsus.msb
(5) Откройте regedit. Создайте следующий ключ:
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraClient12Home1_32bit
(с другой машины, похоже, что версия x64 называется HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraClient12Home1
, но используемая мной программа tnsping
говорит, что она 64-битная, так что…)
Под ключом создайте строку с именем ORACLE_HOME
со значением C:\Oracle\product\12.1.0\client_1
.
Вы должны сделать это сейчас ($$$
= отредактировано):
C:\Users\$$$>tnsping $$$
TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 03-APR-2
019 08:47:37
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
C:\Oracle\product\12.1.0\client_1\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = $$$)(PORT = $$$))) (CONNECT_DATA = (SERVICE_NAME = $$$
$$$) (SERVER = DEDICATED)))
OK (30 msec)
Устранение
Вот процесс, которым я следовал, разделяя, когда эти шаги неизменно не работают на более поздней версии.
Прежде всего, я просто скопировал tnsping.exe
.
Я не случайно выбрал вышеупомянутые dll, насколько я могу сказать, что всем требуется. Я запустил исполняемый файл, и он выдал ошибку, я скопировал бы dll и попытался бы снова:
Через несколько dll вы столкнетесь с ошибками другого типа:
Если это произойдет, запустите монитор процесса и вставьте фильтр, чтобы ProcessName содержал tnsping
, и попробуйте снова запустить программу. Вы должны увидеть что-то вроде следующего. Главное, на что нужно обратить внимание, это то, что он пытается загрузить (в этом примере) orawsec12.dll
, что успешно, но затем он продолжает пытаться загрузить dll, смотрящую по разным путям, а затем в конце запускает werfault
и Программа заканчивается. Я предполагаю, что он понимает какое-то несоответствие версий и продолжает искать правильную версию.
Отсутствующий раздел реестра будет отображаться следующим образом в мониторе процесса (операция RegOpenKey
, результат NAME NOT FOUND
):
Если файл tnsus.msb
отсутствует, вы должны увидеть что-то вроде следующего в мониторе процесса (операция CreateFile
, результат NAME NOT FOUND
):