mardi 9 avril 2013

DBLink et ORA-12154

Si vous tombez sur ce lien après une recherche sur google il est fort probable que avez eu affaire au même problème que moi.
SQL> create public database link MOX_SOXS12.WORLD
  2    connect to MOX$OWNER identified by moxowner
  3    using 'OPARSOXS12';

Database link created.

SQL> desc mox_change@MOX_SOXS12.WORLD
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Après avoir crée un DB link pointant sur une base dont l'alias est OPARSOXS12 je me suis retrouvé dans l'incapacité d'accéder aux données de ma base distante. Il semble que l'alias OPARSOXS12 ne puisse être résolu.
Un tnsping sur cet alias montre pourtant que la résolution s'effectue correctement:
C:\>tnsping oparsoxs12

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 09-APR-2013 15:08:06

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

Used parameter files:
C:\oracle\ora11.2\network\admin\sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (Host = SOXDBGDB01.fr.world.socgen) (Port = 1524))) (CONNECT_DATA = (SID = SOXS12)))
OK (80 msec)

Jettons un oeil dans mon TNSNAMES.ora:
IFILE =S:\_Tools\ora11201\network\admin\tnsnames.ora 

Mon TNSNAMES.ora pointe en fait sur un autre fichier tnsnames grâce à la clause IFILE.
L'alias marche très bien lorsqu'on se connecte via SqlPlus mais ça a l'air de poser problème lorsqu'on utilise un DBLink.

Essayons de mettre directement les informations dans le TNSNAMES.ORA du client (la base où se trouve le dblink que j'ai crée):
IFILE =S:\_Tools\ora11201\network\admin\tnsnames.ora
### MACHINE
OPARSOXS12.WORLD =
        (DESCRIPTION =
                (ADDRESS_LIST =
                        (ADDRESS =
                                (PROTOCOL = TCP)
                                (Host = SOXDBGDB01.fr.world.socgen)
                                (Port = 1524)
                        )
                )
                (CONNECT_DATA =
                        (SID = SOXS12)
                )
        )
Maintenant mon DB link fonctionne correctement:
SQL> desc mox_change@MOX_SOXS12.WORLD
 Name

                                                                                                                                   Null?    Type
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------- -----
--- ------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------

 ID

                                                                                                                                   NOT NULL NUMBER
 JOB_ID

                                                                                                                                            NUMBER
 CHANGETYPE_ID

                                                                                                                                   NOT NULL NUMBER
 CHANGE_USER

                                                                                                                                   NOT NULL VARCHAR2(200)
 CHANGE_DATE

                                                                                                                                   NOT NULL DATE
 CHANGE_COMMENT

                                                                                                                                   NOT NULL VARCHAR2(2000)
En faisant une petite recherche sur google je suis tombé sur la page suivante du site AskTom:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:489021635775

Tom Kyte y dit que la clause IFILE n'est en fait pas supporté pour les fichiers de configuration Oracle Net (*.ORA). A la date où Tom Kyte a écrit ces mots il s'agissait de la version 8i.
La note MOS 1339269.1 semble indiquer qu'en 10g ça n'était toujours pas supporté:
ifiles are not officially supported with Oracle Net admin files
Enhancement request Bug 12676140  Would Like the Use of ifiles to be officially supported for net, is currently outstanding.

Si on effectue une recherche sur la doc Oracle 11g R2 on s'aperçoit que la clause IFILE n'est décrite que pour les fichier de paramétrage d'instance (init.ora).
 

Aucun commentaire:

Enregistrer un commentaire