Sou novo no Oracle DB (vindo do MS SQL Server).
Para começar, baixei um contêiner do Docker para o Oracle Database 18c XE.
Quando executo esse contêiner, depois de criar um banco de dados conectável, não consigo me conectar com novos usuários que crio:
Até onde posso ver, forneci todos os detalhes necessários para preparar esses usuários. Mas o que estou perdendo? Eu não entendo, mesmo depois de ler dezenas de páginas de documentos e ajuda.
Aqui está a saída de lsnrctl status
, executado no contêiner:
> lsnrctl status
LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 25-MAY-2021 11:57:33
Copyright (c) 1991, 2018, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 18.0.0.0.0 - Production
Start Date 25-MAY-2021 11:11:15
Uptime 0 days 0 hr. 46 min. 17 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/product/18c/dbhomeXE/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/5854b834e19c/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=5854b834e19c)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=127.0.0.1)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/admin/XE/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "XE" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "c323f0bfe62f0aaee053030011ac1ec5" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "c323f7dc51bd0b68e053030011acc9a8" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "mobydick" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "xepdb1" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
The command completed successfully
E este é o tnsnames.ora
conteúdo do meu arquivo:
# tnsnames.ora Network Configuration File:
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
LISTENER_XE =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
XEPDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XEPDB1)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
mobydick =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mobydick)
)
)
Eu criei o banco de dados conectável semelhante a este:
ALTER SESSION SET CONTAINER=CDB$ROOT;
CREATE PLUGGABLE DATABASE "mobydick" ADMIN USER "sa" IDENTIFIED BY "abc123" ROLES=(dba) FILE_NAME_CONVERT=('/opt/oracle/product/18c/dbhomeXE/dbs/mobydick/') STORAGE UNLIMITED
ALTER PLUGGABLE DATABASE mobydick OPEN READ WRITE
Esta é a instrução SQL que o SQL Developer gerou:
Isso torna o nome de usuário sensível a maiúsculas e minúsculas, para que o nome de usuário real possa ser usado como
"test"
.Você tentou fazer login no SQL Developer usando o nome de usuário
test
. Essa não é uma sintaxe que diferencia maiúsculas de minúsculas e é tratada automaticamente como"TEST"
, mas esse usuário não existe.Use a sintaxe que diferencia maiúsculas de minúsculas para nome de usuário, portanto, em vez de
test
, forneça"test"
como nome de usuário.A propósito, quase nunca usamos nomes de usuário ou nomes de objetos que diferenciam maiúsculas de minúsculas. Você poderia simplesmente criar o usuário sem aspas duplas e sua tentativa de conexão funcionaria:
"
é um caractere especial no shell bash, você precisa escapá-lo para usá-lo em argumentos de linha de comando:sqlplus \"test\"/abc123@mobydick
. Oconnect
comando lida bem com aspas duplas:sqlplus /nolog
então, noSQL>
prompt,connect "test"/abc123@mobydick
.