Не могу подключиться к БД через SQL*Plus после создания нового пользователя
Для создания пользователя выполнил следующие команды через SQL*Plus:
SQL> conn / as sysdba;
Connected.
SQL> alter session set container = orclpdb;
Session altered.
SQL> create user admin identified by qq;
User created.
SQL> grant dba to admin;
Grant succeeded.
SQL> connect admin/qq@db12c;
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
Все время получаю такую ошибку:
ORA-01017: invalid username/password; logon denied
Что я делаю не так?
Tакже приложу файл tnsnames.ora:
# tnsnames.ora Network Configuration File: C:\app\admin\product\12.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
PROBA.COM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PROBA)
)
)
LISTENER_DB12C =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
DB12C =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db12c)
)
)
Ответы (1 шт):
TL;DR С вновь созданным пользователем admin надо подключаться по имени сервиса самой БД (PDB), а не контейнера (CDB):
$ sqlplus admin/qq@localhost/orclpdb
Аналогично в других приложениях/инструментах, например через JDBC:
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521/orcldb", "admin", "qq");
В общем случае, разработчик должен знать только имя сервиса подключаемой БД (PDB). После подключения, он работает как с обычной БД, ничем не отличающейся от одиночной БД в ранних версиях. О существовани какого-то контейнера, который эту БД включает, он знать ничего не должен.
Немного вглубь
Начиная с версии 12 введена мултиарендная (multitenant) арxитектура, состоящая из:
Контейнер БД (CDB Container Database): Это оболочка для одной или нескольких БД, служит для их управления и содержит только их общую часть. Ни пользователей приложений, ни их данных, здесь нет.
Подключаемые БД (PDB Pluggable Database): Это сами БД, то есть PDB это синоним того, к чему все привыкли - База Данных. Здесь собственно и содержатся пользователи и данные приложений. PDB делит общую часть CDB с другими PDB, но полностью от них независима.
Первые щаги для перемещения между CDB и PDB.
Без указания имени сервиса, подключение всегда в CDB, далее, переход в заданую PDB и обратно:
$ sqlplus /nolog
SQL> conn / as sysdba
Connected.
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 MOUNTED
SQL> alter session set container=pdb1;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL> alter session set container=cdb$root;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT