powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
13 сообщений из 13, страница 1 из 1
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606378
cx_Oracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!

Подскажите, пожалуйста, как можно подключиться из cx_Oracle к PDB без использования tnsnames.ora и TWO_TASK?

cursor.execute и cursor.callproc похоже не поддерживают "alter session set container=".

Цель - запускать из питона различные селекты локально на хосте с БД, при этом полагаться на корректность заполнения tnsnames.ora нельзя, поэтому нужно без него. TWO_TASK тоже использует имя дескриптора из tnsnames.ora

Все спасибо за ответы!
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606382
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cx_OracleПривет!

Подскажите, пожалуйста, как можно подключиться из cx_Oracle к PDB без использования tnsnames.ora и TWO_TASK?

cursor.execute и cursor.callproc похоже не поддерживают "alter session set container=".

Цель - запускать из питона различные селекты локально на хосте с БД, при этом полагаться на корректность заполнения tnsnames.ora нельзя, поэтому нужно без него. TWO_TASK тоже использует имя дескриптора из tnsnames.ora

Все спасибо за ответы!
я с питоном не дружу... а ему нельзя напрямую при подключении скормить connation string как яве?
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606397
master_yoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Q.Tarantinoбез использования tnsnames.ora
cx_Oracle.makedsn
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606399
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
master_yodaQ.Tarantinoбез использования tnsnames.ora
cx_Oracle.makedsn
это не мне, как я понял, а ТСу...
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606407
cx_Oracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл уточнить что коннет требуется как / as sysdba

cx_Oracle.makedsn и easyconnect как я понимаю требуют указания логина/пароля, а прописывать и светить пароли sys очень не хочется
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606415
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cx_OracleЗабыл уточнить что коннет требуется как / as sysdba
С одной стороны, в строке подключения можно передавать не только алиас, но и весь дескриптор.
С другой, подключиться к PDB локально (без пароля), насколько я знаю, несколько затруднительно - по SID к контейнеру подключиться нельзя.
С третьей, если подключиться локально к CDB, то, быть может, alter session set container спасет положение?
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606423
cx_Oracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymouscx_OracleЗабыл уточнить что коннет требуется как / as sysdba
С одной стороны, в строке подключения можно передавать не только алиас, но и весь дескриптор.
Тогда нужно подключаться по логину/паролю, что менее секьюрно

andrey_anonymousС другой, подключиться к PDB локально (без пароля), насколько я знаю, несколько затруднительно - по SID к контейнеру подключиться нельзя.
Да, я тоже не нашел, кроме как через alter session set container или через hostname/pdb_service(easyconnect)

andrey_anonymousС третьей, если подключиться локально к CDB, то, быть может, alter session set container спасет положение?
Возможно я что-то делаю неправильно, но пока что получаю либо
Код: plsql
1.
2.
3.
cursor.execute("alter session set container=CON1")

cx_Oracle.DatabaseError: ORA-24964: ALTER SESSION SET CONTAINER error


, либо 600ку
Код: plsql
1.
2.
3.
4.
5.
$ python /tmp/conn.py 
Traceback (most recent call last):
  File "/tmp/conn.py", line 17, in <module>
    cursor.execute("begin execute immediate 'alter session set container=CON1'; end;")
cx_Oracle.DatabaseError: ORA-00600: internal error code, arguments: [kpoconReNegotiate-old client], [16388], [7], [], [], [], [], [], [], [], [], []



код примерно такой

Код: python
1.
2.
3.
connection = cx_Oracle.connect(mode=cx_Oracle.SYSDBA)
cursor = connection.cursor()
cursor.execute("begin execute immediate 'alter session set container=CON1'; end;")
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606459
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сильно!

Таких ошибок не бывает
:

Какая версия клиента?
попробуй пересобрать с новой библиотекой libclntsh.so.12.1 или libclntsh.so.12.2

По поводу беспарольной авторизации:
1) слиент на одном host с базой?
2) насколько нужен SYSDBA?
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606488
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cx_Oracleandrey_anonymousпропущено...

С одной стороны, в строке подключения можно передавать не только алиас, но и весь дескриптор.
Тогда нужно подключаться по логину/паролю, что менее секьюрно


Если основная проблема - спрятать sys credentials - почему бы не спрятать их в wallet ?

Regards

Maxim
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606499
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cx_Oracle,
локально:
17548064
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606504
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cx_Oracle,

не подойдет?

conn stax@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = tcp.world)(PROTOCOL = TCP)(Host = xxx.xxx.com)(Port = 1521)))(CONNECT_DATA = (SID = ssss)))


.....
stax
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606882
cx_Oracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогло переключение на версию ораклового клиента 12.2 (по дефолту в LB_LIBRARY_PATH подцеплялся старый 12.1) и апгрейд cx_Oracle

С такой комбинацией
Код: plsql
1.
2.
('cx_Oracle:', '6.1')
('Oracle Client:', (12, 2, 0, 1, 0))



код
Код: plsql
1.
cursor.execute('alter session set container=CON1')



отрабатывает!

Всем спасибо за советы!
...
Рейтинг: 0 / 0
Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
    #39606892
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cx_Oracleкод
Код: plsql
1.
cursor.execute('alter session set container=CON1')



отрабатывает!



Однако не путай подключиться к PDB с set container:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> connect /@sol12 as sysdba
Connected.
SQL> create user c##ommon identified by common container = all;

User created.

SQL> grant create session to c##ommon container = all;

Grant succeeded.

SQL> grant set container to c##ommon container = all;

Grant succeeded.



Создаем триггер запрещающий логин к данной PDB

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> connect /@pdb1sol12 as sysdba
Connected.
SQL> create or replace
  2    trigger c##ommon_logon_trigger
  3      after logon
  4      on c##ommon.schema
  5      begin
  6          raise_application_error(-20500,'You are not allowed logging to this PDB.');
  7  end;
  8  /

Trigger created.

SQL>



Подключаемся к CDB и вполняем SET CONTAINER:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> connect c##ommon@sol12
Enter password: ******
Connected.
SQL> alter session set container = pdb1sol12;

Session altered.

SQL>



Как видишь, AFTER LOGON тригер не вызывался. А теперь одключаемся к PDB:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> connect c##ommon@pdb1sol12
Enter password: ******
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20500: You are not allowed logging to this PDB.
ORA-06512: at line 2

Warning: You are no longer connected to ORACLE.
SQL>



Так-что SET CONTAINER != LOGIN.

SY.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как подключиться к PDB 12.2 локально из python (cx_Oracle) БЕЗ tnsnames.ora ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]