我是一名 SQL Server 开发人员/DBA 顾问,正在帮助一位最近失去 Oracle DBA 的客户。我在 Oracle 上做过开发,但没有太多 DBA 工作,而且在这样的多宿主环境中也没有。
问题: 我可以使用 SQL Plus 中的“SYS As SYSDBA”进行连接,但不能使用同一系统上的 SQL Developer 进行连接。但是,我可以使用“系统”与 SQL Plus或SQL Developer 进行连接。
细节:
在这台服务器上,在我的 Windows 管理员帐户中(在 Oracle Admin Asst 中也以服务器管理员身份输入),此 DOS 命令有效:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus /@MyDb as sysdba
并且, Select * from V$INSTANCE 表明它在 MyDb 中,并且 tool 和 db 都是 11.2.0.3
这个也是:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus sys/<pwd>@MyDb as sysdba
(另外:输入错误的密码也可以(!))
使用相同(服务器、帐户和主页)中的 SQL-Plus 开始菜单选项,这些也可以工作:
Enter user-name: /@MyDb as sysdba
Enter user-name: sys/<pwd>@MyDb as sysdba
Select * from V$INSTANCE 显示它在 MyDb 中,并且 tool 和 db 都是 11.2.0.3
尝试使用 SQL Developer 访问 MyDb,“system”用户名成功,但“sys”“as sysdba”失败,“ORA-01031:权限不足”。但是,这在连接到其他服务器上的其他数据库时确实有效。
我对此进行了研究,大多数已发布的帮助似乎都是针对根本无法建立连接的情况,而这里并非如此。只是为了避免其中一些:
- 问题不在于没有设置网络,因为 SQL Developer 在本地和远程都适用于“系统”。
- 问题不在于数据库/实例没有启动,因为它再次适用于“系统”
- 不是我连接到错误的数据库,我检查了它的“系统”
- AFAIK,这并不是说我在 SQL Developer 中使用错误的语法连接到数据库“作为 SYSDBA”,因为当我连接到其他数据库上的其他服务器时它可以工作。
我的直觉是
- 有一些设置显示“不允许 SYSDBA 通过网络连接”,或者
- Oracle 网络侦听器中存在一些配置/授权问题,阻止它检查我的 Windows 管理员帐户,此外,sys 密码不是我被告知的那样,最后 Oracle 给出了一个迟钝的错误消息。
对此的任何帮助或指导将不胜感激。
好的,所以使用@BalasPapp 的说明,我能够找到更多以下内容:
- 该数据库由名为 OraDb11g_home3的第二个
D:\Oracle\app\product\11.2.0\dbhome_1D:\Oracle\app\product\11.2.0\dbhome_1
Oracle 11g 主目录提供服务,路径为. - Windows 服务没有显示它的启动参数(当然除了数据库名称)。
- 该命令
show parameter remote_login_passwordfile
显示值“ EXCLUSIVE ”。
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
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)
的输出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>
从 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)
适用于“系统,默认”,“sys,SYSDBA”失败,“权限不足”。我也尝试了许多操作系统身份验证和 Keberos 设置的组合,但无济于事。
最后,这些是目录中仅有的两个.ora
文件/database
:
SNCF<DBNAME>.ORA (18MB)
SPFILE<DBNAME>.ORA (4kb)
它们似乎都是记事本中的二进制文件。
ALSO:select * from v$pwfile_users
不返回任何行。
要通过 sql*net 从客户端使用“as sysdba”进行连接,您需要
密码文件的默认位置是 $ORACLE_HOME/dbs,但从 Oracle v12 开始,它也可以存储在 ASM 中。在这种情况下,您使用 srvctl 找到它