Le fichier tnsnames.ora
Contient le Databases
et leur description (Host
+ port
).
Est-il possible d'établir une connexion en s'appuyant sur le fichier mentionné ci-dessus? (Dites en fournissant uniquement le nom de la base de données):
Pour trouver ce fichier, je dois connaître le répertoire Oracle par défaut dont j'ai besoin pour vérifier dans le registre Windows HKEY_LOCAL_MACHINE\Software\Oracle
, Puis pour avoir tous les fichiers KEY_XXX
, Puis vérifier lequel apparaît en premier. sur le %PATH%
. Existe-t-il un moyen de rechercher automatiquement ce fichier sur l'ordinateur client?
Je ne savais même pas que l'utilisation de tnsnames avec le pilote léger est possible, mais apparemment, il a été ajouté quelque part dans la version 10:
http://docs.Oracle.com/cd/B19306_01/Java.102/b14355/urls.htm#BEIDIJCE
En particulier:
Remarque:
Lorsque vous utilisez TNSNames avec le pilote JDBC Thin, vous devez définir la propriété Oracle.net.tns_admin sur le répertoire qui contient votre fichier tnsnames.ora.
Java -Doracle.net.tns_admin=%Oracle_HOME%\network\admin
Comme mentionné, je n'ai pas vérifié si cela fonctionne réellement .
Je ne pense pas que la logique "trouver le répertoire de configuration réseau réel" soit disponible via une fonction Oracle. Vous devrez le faire manuellement comme indiqué dans votre question, ou peut-être compter sur la variable d'environnement TNS_ADMIN étant présente. Dans ce cas, l'invocation Java serait
Java -Doracle.net.tns_admin=%TNS_ADMIN%
Eh bien, dans certaines interfaces graphiques, la configuration du pilote TNS n'est tout simplement pas implémentée ou ne fonctionne pas (NetBeans par exemple :-))
https://netbeans.org/bugzilla/show_bug.cgi?id=231526
Il existe une solution simple ici. Vous pouvez prendre l'entrée directement à partir du fichier tnsnames.ora et la joindre à la chaîne de pilote jdbc comme suit:
Exemple d'utilisation d'odbc7.jar (pilote JDBC Oracle 12c pour JDK 7) pour se connecter au cluster Oracle 11gR2 RAC:
jdbc: Oracle: thin: @ (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (Host = hostA) (PORT = 1522)) (ADDRESS = (PROTOCOL = TCP) (Host = hostB) (PORT = 1521) )) (SOURCE_ROUTE = oui) (CONNECT_DATA = (SERVICE_NAME = DatabaseService))))
Soyez conscient de mettre les caractères double :: à la fin en tant que Host: port: service, si vous mettez :: à la fin comme ceci:
jdbc: Oracle: thin: @ (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (Host = hostA) (PORT = 1522)) (ADDRESS = (PROTOCOL = TCP) (Host = hostB) (PORT = 1521) )) (SOURCE_ROUTE = oui) (CONNECT_DATA = (SERVICE_NAME = DatabaseService))) ::
Vous vous retrouverez avec l'exception "NL exception a été générée".
Une autre approche consiste à configurer la propriété suivante: System.setProperty ("Oracle.net.tns_admin", "C: /app/product/11.2.0/client_1/NETWORK/ADMIN");
Bien sûr, au lieu d'une valeur codée en dur, vous pouvez par exemple configurer une variable d'environnement dans votre système d'exploitation comme Oracle_TNS_ADMIN puis la référencer:
System.setProperty("Oracle.net.tns_admin",System.getenv("Oracle_TNS_ADMIN"));
ou passez-le à Java processus via le commutateur -D sur linux:
-Doracle.net.tns_admin=$Oracle_TNS_ADMIN
et fenêtres: comme
-Doracle.net.tns_admin=%Oracle_TNS_ADMIN%
Une fois que notre application connaît le fichier de configuration TNS, nous pouvons nous connecter par nom de service de référence dans le fichier TNSNAMES.ora comme dans cet exemple complet:
// tell the driver where to look for the TNSNAMES.ORA file
System.setProperty(
"Oracle.net.tns_admin",
"C:/app/product/11.2.0/client_1/NETWORK/ADMIN");
// ORCL is net service name from the TNSNAMES.ORA file
String dbURL = "jdbc:Oracle:thin:@ORCL";
// load the driver
Class.forName("Oracle.jdbc.OracleDriver");
Connection conn = null;
Statement stmt = null;
try {
conn = DriverManager.getConnection(dbURL,
"your_username",
"your_password");
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT dummy FROM dual");
Assurez-vous d'abord que le logiciel SQL Developer est correctement installé sur votre machine. Si vous utilisez un pilote léger, assurez-vous que votre fichier ojdbcX.jar se trouve dans votre chemin de génération. Les étapes pour se connecter à la source de données Oracle à l'aide du nom d'alias TNS sont les suivantes:
Définissez la propriété système pour Oracle.net.tns_admin
. Cela devrait pointer vers le répertoire contenant votre fichier tnsnames.ORA
System.setProperty("Oracle.net.tns_admin", DIRECTORY_PATH_TO_TNSNAME.ORA_FILE);
Enregistrer un pilote Oracle
DriverManager.registerDriver (nouveau OracleDriver ());
Créer un objet de connexion
Connection conn = DriverManager.getConnection("jdbc:Oracle:thin:username/password@TNS_ALIAS_NAME");
Cela devrait établir la connexion à la base de données.