Подтвердить что ты не робот

Cx_Oracle и подключение к Oracle DB удаленно

Как вы подключаетесь к удаленному серверу по IP-адресу так, чтобы TOAD, SqlDeveloper могли подключаться к базам данных только с IP-адресом, именем пользователя, SID и паролем?

Всякий раз, когда я пытаюсь указать и IP-адрес, он, кажется, берет его локально.

Другими словами, как должна форматироваться строка для cx_Oracle.connect() для не локальной базы данных?

Был предыдущий пост, который указан как ответ, соединяющий Oracle с модулем cx_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()
4b9b3361

Ответ 1

Мне нравится делать это следующим образом:

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)

Одной из основных причин, по которой мне нравится этот метод, является то, что у меня обычно есть файл TNSNAMES.ORA, лежащий где-то в другом месте, и я могу проверить, что объект dsn_tns будет поступать правильно:

print dsn_tns

и сравнивая вывод с моим TNSNAMES.ORA

Ответ 2

Вы можете указать сервер в строке соединения, например:

import cx_Oracle
connstr = 'scott/[email protected]:1521/orcl'
conn = cx_Oracle.connect(connstr)
  • "сервер" - это сервер или IP-адрес, если вы хотите.
  • "1521" - это порт, который прослушивает база данных.
  • "orcl" - это имя экземпляра (или службы базы данных).

Ответ 3

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

Вместо указания SID вы можете создать dsn и connect через имя_источника, например:

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 version 5.1.1 (28 августа 2011 г.)

Ответ 5

import cx_Oracle
ip = '172.30.1.234'
port = 1524
SID = 'dev3'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)

conn = cx_Oracle.connect('dbmylike', 'pass', dsn_tns)
print conn.version
conn.close()

Ответ 6

import cx_Oracle
dsn = cx_Oracle.makedsn(host='127.0.0.1', port=1521, sid='your_sid')
conn = cx_Oracle.connect(user='your_username', password='your_password', dsn=dsn)
conn.close()