Blog

Blog

Setter $ORACLE_SID avant de lancer un script (ORA-12162)

Sous Unix, je suis tombée sur un cas assez bizarre : mon script shell devait se connecter à une base via SQL Loader pour faire un import de données mais me sortait une ORA-12162: TNS:net service name is incorrectly specified...

ORA-12162: TNS:net service name is incorrectly specified

La signification de cette erreur est très claire : la variable $ORACLE_SID est mal renseignée... Mais je l'avais bien fait pourtant!

Le phénomène bizarre

Je me suis alors rendue compte que sans export, le script plantait alors qu'avec un export, il ne plantait pas. Exemple : (Ma base s'appelle Matalina)
>lancesqlload.sh
ORACLE_SID=MATALINA
echo $ORACLE_SID : MATALINA
ORA-12162: TNS:net service name is incorrectly specified
>
>lancesqlload_avecExport.sh
export ORACLE_SID=MATALINA
echo $ORACLE_SID : MATALINA
Import Succeed!
>
Je suppose que ce fonctionnement qui me semble bizarre est du au fait qu'un shell s'exécute dans son propre environnement et qu'il a dont besoin de l'export pour prendre en compte les variables ?

Pour aller plus loin

La doc Oracle sur l'ORA-12162 : http://docs.oracle.com/cd/E11882_01/server.112/e17766/net12150.htm#sthref3401

Mais qui bloque ma table ? (ORA-00054)

Grrr rien de pire que de créer une nouvelle table et d'avoir une ORA-00054 au moment de créer les clés trangères...

Recherche des infos sur la session bloquante

Il suffit de jouer cette requête :
SELECT ao.object_id,
  ao.owner,
  ao.object_name,
  lo.session_id,
  s.osuser,
  s.machine,
  s.program
FROM dba_objects ao 
  INNER JOIN v$locked_object lo ON ao.object_id=lo.object_id
  INNER JOIN v$session s ON lo.session_id = s.sid
WHERE object_name='mon_objet';
Il suffit ensuite de décrocher son téléphone et de demander des comptes à la personne qui bloque le truc (si c'est un script, je vous laisse galérer tout seul dans votre coin :-)).