Как подключиться непосредственно к 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 шт):
Такая возможность появилась в версии 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