Sou um desenvolvedor/consultor DBA do SQL Server que está ajudando um cliente que recentemente perdeu seu DBA Oracle. Eu desenvolvi no Oracle, mas não muito trabalho de DBA, e não em ambientes multi-homed como este.
O problema: consigo conectar usando "SYS As SYSDBA" do SQL Plus, mas não do SQL Developer no mesmo sistema. No entanto, posso me conectar usando "sistema" com SQL Plus ou SQL Developer.
Detalhes:
Neste servidor, na minha conta de administrador do Windows (também inserida como administrador do servidor no Oracle Admin Asst.), este comando do DOS funciona:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus /@MyDb as sysdba
e, Selecione * de V$INSTANCE mostra que está em MyDb e que tanto a ferramenta quanto o db são 11.2.0.3
Assim como este:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus sys/<pwd>@MyDb as sysdba
(TAMBÉM: inserir a senha errada também funciona (!))
Usando a opção do menu Iniciar do SQL-Plus do mesmo (servidor, conta e casa), estes também funcionam:
Enter user-name: /@MyDb as sysdba
Enter user-name: sys/<pwd>@MyDb as sysdba
Selecione * de V$INSTANCE mostra que está em MyDb e que a ferramenta e o db são 11.2.0.3
Tentativa de acessar o MyDb do mesmo com o SQL Developer, obtém sucesso para o nome de usuário do "sistema", mas falha para "sys" "as sysdba" com "ORA-01031: privilégios insuficientes". No entanto, isso funciona ao conectar-se a outros bancos de dados em outros servidores.
Eu pesquisei isso, e a maior parte da ajuda postada para isso parece ser destinada a casos em que nenhuma conexão pode ser feita, o que não é o caso aqui. Apenas para evitar alguns deles:
- O problema não é que a rede não esteja configurada, porque o SQL Developer funciona para "sistema" local e remotamente.
- O problema não é que o banco de dados/instância não foi iniciado, porque, novamente, funciona para "sistema"
- Não é que estou me conectando ao banco de dados errado, verifiquei se havia "sistema"
- AFAIK, não é que estou usando a sintaxe errada no SQL Developer para conectar a um banco de dados "As SYSDBA" porque funciona quando me conecto a outros servidores em outros bancos de dados.
Minha intuição é que ou
- há alguma configuração que diz " não permitir SYSDBA por meio de uma conexão de rede " ou
- há algum problema de configuração/autorização no ouvinte de rede Oracle que o está impedindo de verificar minha conta de administrador do Windows e, além disso, a senha sys não é o que me foi dito e, finalmente, o Oracle está dando uma mensagem de erro obtusa para isso.
Qualquer ajuda ou orientação sobre isso seria muito apreciada.
OK, então usando as instruções de @BalasPapp, consegui encontrar mais o seguinte:
- Esse banco de dados é atendido pelo segundo Oracle 11g home chamado OraDb11g_home3 direcionado para
D:\Oracle\app\product\11.2.0\dbhome_1D:\Oracle\app\product\11.2.0\dbhome_1
. - Os serviços do Windows não mostraram parâmetros de inicialização para ele (exceto o nome do banco de dados, é claro).
- o comando
show parameter remote_login_passwordfile
mostra um valor de " EXCLUSIVE ".
Conteúdo do Listener.ora:
# listener.ora Network Configuration File: D:\Oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\Oracle\app\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <SERVERNAME>.<networkname>.local)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = D:\Oracle\app
Conteúdo do sqlnet.ora:
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES = (NTS)
A saída de lsnrctl status
:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.3.0 - Production on 23-DEC-2015 12:03:55
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<SERVERNAME>.<networkname>.local)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 11.2.0.3.0 - Production
Start Date 02-DEC-2015 16:25:41
Uptime 20 days 19 hr. 38 min. 17 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File D:\Oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File D:\Oracle\app\diag\tnslsnr\<SERVERNAME>\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<SERVERNAME>.<networkname>.local)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "<DBNAME>" has 1 instance(s).
Instance "<DBNAME>", status READY, has 1 handler(s) for this service...
The command completed successfully
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>
Parâmetros ao conectar do SQL Developer:
Username: system (or sys)
Password: <...>
Connection
Type: Basic
Role: Default (or SYSDBA)
Hostname: localhost
Port: 1521
SID (or Service name, both work/fail the same):
<dbname>
(Neither OS Authentication nor Kerberos is set)
Funciona para "sistema, padrão", falha para "sys, SYSDBA" com "privilégios insuficientes". Eu tentei muitas combinações de configurações de Autenticação do SO e Keberos, sem sucesso.
Finalmente, estes são os dois únicos .ora
arquivos no /database
diretório:
SNCF<DBNAME>.ORA (18MB)
SPFILE<DBNAME>.ORA (4kb)
Ambos parecem ser arquivos binários no bloco de notas.
TAMBÉM: select * from v$pwfile_users
não retorna nenhuma linha.
Para se conectar usando 'as sysdba' de um cliente via sql*net, você precisa ter o
O local padrão para o arquivo de senha é $ORACLE_HOME/dbs, mas desde o Oracle v12 ele também pode ser armazenado no ASM. Nesse caso, você o encontra usando srvctl