web-dev-qa-db-fra.com

cx_Oracle & Connexion à distance à la base de données Oracle

Comment vous connecter à un serveur distant via une adresse IP de la manière dont TOAD, SqlDeveloper, peut se connecter à des bases de données avec uniquement l'adresse IP, le nom d'utilisateur, le SID et le mot de passe?

À chaque fois que j'essaie de spécifier une adresse IP, il semble que je l'utilise localement.

En d'autres termes, comment la chaîne de cx_Oracle.connect () doit-elle être formatée pour une base de données non locale?

Il y avait un post précédent qui figurait comme une réponse se connectant à Oracle via le module cx_Oracle avec le code suivant:

#!/usr/bin/python

import cx_Oracle
connstr='scott/tiger'
conn = cx_Oracle.connect(connstr)
curs = conn.cursor()

curs.execute('select * from emp')
print curs.description
for row in curs:
    print row
conn.close()
27
dshadower

J'aime le faire de cette façon:

ip = '192.168.0.1'
port = 1521
SID = 'YOURSIDHERE'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)

db = cx_Oracle.connect('username', 'password', dsn_tns)

L'une des principales raisons pour lesquelles j'aime cette méthode est que j'ai généralement un fichier TNSNAMES.ORA qui traîne quelque part, et je peux vérifier que l'objet dsn_tns fera le bon choix en faisant ce qui suit: 

print dsn_tns

et en comparant la sortie à mon TNSNAMES.ORA

52
Kevin Horn

Vous pouvez spécifier le serveur dans la chaîne de connexion, par exemple:

import cx_Oracle
connstr = 'scott/tiger@server:1521/orcl'
conn = cx_Oracle.connect(connstr)
  • "serveur" est le serveur, ou l'adresse IP si vous voulez.
  • "1521" est le port sur lequel la base de données écoute.
  • "orcl" est le nom de l'instance (ou du service de base de données).
27
Jeffrey Kemp
import cx_Oracle

CONN_INFO = {
    'Host': 'xxx.xx.xxx.x',
    'port': 12345,
    'user': 'user_name',
    'psw': 'your_password',
    'service': 'abc.xyz.com',
}

CONN_STR = '{user}/{psw}@{Host}:{port}/{service}'.format(**CONN_INFO)

connection = cx_Oracle.connect(CONN_STR)
4
Vlad Bezden

Au lieu de spécifier le SID, vous pouvez créer un dsn et connect via service_name like: 

import cx_Oracle
ip = '192.168.0.1'
port = 1521
service_name = 'my_service'
dsn = cx_Oracle.makedsn(ip, port, service_name=service_name)

db = cx_Oracle.connect('user', 'password', dsn)

L'utilisation du nom de service au lieu de l'identificateur d'instance spécifique (SID) présente l'avantage de fonctionner également dans un environnement RAC (l'utilisation d'un identificateur de sécurité ne le fera pas). Ce paramètre est disponible à partir de cx_Oracle version 5.1.1 (28 août 2011)

0
Gerrat