IT blok - Michal Šika

kutilovo živobytí

Spuštění příkazu TNSPING na vzdáleném serveru

U jednoho zákazníka jsem řešil skript na monitorování aplikace, který se měl spouštět z pracovní stanice. Skript se pomocí SSH programu plink.exe připojil na vzdálený server, tam spustil skript a zapsal do pracovního souboru, který poté vyhodnotil. Jedním z příkazů měl být tnsping pro ověření funkčnosti Oracle databáze a s tím jsem měl trochu problém.

Prográmek plink.exe je součástí PuTTY a přímo s ním spolupracuje, takže veškeré interaktivní přihlašování, názvy serverů apod. si bere právě z nastavení PuTTY.
Po přihlášení na server měl za úkol spustit skript appcheck, který mimo jiné obsahoval přikaz:

tnsping <server> <DBname>

Objevil se ale následující problém:

C:monitorbin>plink.exe -ssh -pw dmadmin server "./appcheck"

TNS Ping Utility for IBM/AIX RISC System/6000: Version 11.2.0.1.0 - Production on 14-NOV-2011 14:33:58

Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Message 3511 not found; No message file for product=network, facility=TNSMessage 3512 not found; No message file for product=network, facility=TNSMessage 3513 not found; No message file for product=network, facility=TNSMessage 3509 not found; No message file for product=network, facility=TNS

C:monitorbin>

Problém byl v tom, že po klasickém přihlášení pomocí PuTTY nebo Plink.exe se načte soubor .profile, čímž se nastaví proměnné prostředí pro daný uživatelský účet.
Pokud Plink.exe ale volám ze skriptu a ne interaktivně profil uživatele se nenačte. Proto bylo nutné na začátek souboru appcheck přidat následující řádky:

export ORACLE_HOME=/oracle/product/11.2.0/client_1
export ORACLE_SID=DBDEV1
export PATH=$ORACLE_HOME/bin:$PATH

Poté se již zobrazil správný výstup:

C:monitorbin>plink.exe -ssh server "./appcheck"

TNS Ping Utility for IBM/AIX RISC System/6000: Version 11.2.0.1.0 - Production on 14-NOV-2011 14:39:42

Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Used parameter files:
/dms/oracle/product/11.2.0/client_1/network/admin/sqlnet.ora

Used EZCONNECT adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=172.30.25.172)(PORT=1521))
)
OK (10 msec)

C:monitorbin>

Problém byl tedy v tom, že Plink.exe běžící „na pozadí“ nenačítá profil uživatelského účtu, pod kterým se připojuje. Te tedy nutné ručně nastavit proměnné prostředí, aby věděl, kde se vůbec nachází.

Michal Šika