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()
私は次のようにそれをするのが好きです:
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と比較します
接続文字列でサーバーを指定できます。例:
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)
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日)