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()
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
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)
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)
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)