web-dev-qa-db-ja.com

cx_Oracle&Oracle DBへのリモート接続

TOAD SqlDeveloperがIPアドレス、ユーザー名、SID、パスワードだけでデータベースに接続できるように、IPアドレス経由でリモートサーバーに接続するにはどうすればよいですか?

IPアドレスを指定しようとするたびに、ローカルで取得しているようです。

言い換えれば、cx_Oracle.connect()の文字列を非ローカルデータベースにどのようにフォーマットする必要がありますか?

次のコードでcx_Oracleモジュールを介してOracleに接続する回答としてリストされた以前の投稿がありました。

#!/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

私は次のようにそれをするのが好きです:

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)

この方法が好きな主な理由の1つは、通常どこかにTNSNAMES.ORAファイルがあり、dsn_tnsオブジェクトは以下を行うことで正しいことを行います:

print dsn_tns

出力をTNSNAMES.ORAと比較します

54
Kevin Horn

接続文字列でサーバーを指定できます。例:

import cx_Oracle
connstr = 'scott/tiger@server:1521/orcl'
conn = cx_Oracle.connect(connstr)
  • 「サーバー」はサーバー、または必要に応じてIPアドレスです。
  • 「1521」は、データベースがリッスンしているポートです。
  • 「orcl」は、インスタンス(またはデータベースサービス)の名前です。
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)
7
Vlad Bezden

SIDを指定する代わりに、dsnと service_nameを介した接続 を作成できます。

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)

特定のインスタンス識別子(SID)の代わりにサービス名を使用する利点は、RAC環境でも同様に機能することです(SIDを使用しても機能しません)。このパラメーターは cx_Oracleバージョン5.1.1 (2011年8月28日)

2
Gerrat