Как подключиться непосредственно к PDB через Bequeath соединение?

До введения подключаемых БД (pluggable database=PDB) можно было установить Bequeath соединение, установив переменную окружения ORACLE_SID=orcl и подключаться указывая только пользователя и пароль в строке соединения.

Например:

export ORACLE_SID=orcl; . oraenv
sqlplus -l me/me

При этом, процессы с установленным Bequeath соединением выглядели так:

SQL> host ps -ef|grep 32464
oracle   32464 32463  0 16:44 pts/1    00:00:00 <path>/oracle/product/11.2.0/home/bin/sqlplus
oracle   32465 32464  0 16:44 ?        00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

Сервер процесс запущен самим клиентом (в д.сл. SQL*Plus), то есть без участия прослушивателя. Обмен данными между ними по Bequeath протоколу боле эффективен по сравнению с TCP сокетами.

Для соединения с подключаемыми БД необходимо в строке соединения указывать имя сервиса: me/me@server/service, то есть задействовать прослушиватель.

Есть ли возможность в новых версиях установить Bequeath соединение к PDB?


Ответы (1 шт):

Автор решения: 0xdb

Такая возможность появилась в версии 18c. В дополнение к ORACLE_SID можно установить новую переменную окружения ORACLE_PDB_SID (пока не документирована):

$ export ORACLE_PDB_SID=pdb1
$ sqlplus / as sysdba

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> show con_name

CON_NAME
------------------------------
PDB1

SQL> host ps -ef|grep 3975
oracle    3975  3974  0 21:25 pts/1    00:00:00 <path>/19.3.0/home/bin/sqlplus  as sysdba
oracle    3976  3975  0 21:25 ?        00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

Но это работает только для привилегированных пользователей:

$ sqlplus me/me

ERROR:
ORA-01017: invalid username/password; logon denied
→ Ссылка