如何获取Oracle的SID列表

15

我有主机名、端口号、用户ID和密码,但是缺少连接到Oracle DBMS所需的SID。如何在该服务器上找到SID列表?

5个回答

21

更好的方法是,如果您可以访问主机并且已安装Oracle,则使用命令:lsnrctl status。这适用于Unix、Linux和Windows机器。状态命令将显示所有侦听器(及其关联的SIDs)。

C:\>lsnrctl status

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 15-JUN-2009 16:16:34
Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
Start Date                13-JUN-2009 12:04:14
Uptime                    2 days 4 hr. 12 min. 19 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           XE
Listener Parameter File   C:\oracle\XE\app\oracle\product\10.2.0\server\network\admin\listener.ora
Listener Log File         C:\oracle\XE\app\oracle\product\10.2.0\server\network\log\listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC_FOR_XEipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ThinkpadT61)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=8080))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
    Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
   Instance "PLSExtProc", status UNKNOWN, 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 "XE_XPT" has 1 instance(s).
   Instance "xe", status READY, has 1 handler(s) for this service...
Service "xe" has 1 instance(s).
   Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully

在上面的例子中,你可以使用连接字符串XEXDB、XE_XPT或XE连接到XE数据库。


我曾考虑过这种方法来回答问题,但从技术上讲,这只适用于默认侦听器。使用lsnrctl的更复杂的方法是首先通过ps-ef|grep lsnr获取侦听器列表,然后为每个侦听器发出STATUS命令。由于可能有99%的安装使用默认侦听器设置,所以不想使答案过于复杂。 - dpbradley

7
简短的回答是您需要访问主机操作系统:
对于Unix系统,ps -ef | grep pmon将向您显示一个或多个名称类似于ora_pmon_xxxx的进程,其中xxxx是实例名称。
在Windows中,我猜任务列表中有类似的标识。
实际上,在创建连接帐户时,通常由管理数据库的人员向您提供此信息。

在Windows中,任务管理器下看不到SID,你需要检查运行的服务(services.msc)来查找SID。 例如:OracleServiceORCL 假设ORCL是SID。 - Sathyajith Bhat
感谢澄清,我在Windows平台上没有经验。 - dpbradley

3
问题归结为:运行在主机X端口Y上的监听器支持哪些ORACLE_SID或服务。根据监听器的安全配置不同,您可以使用具有lsnrctl安装的客户端使用lsnrctl命令查看此信息。要执行此操作,您需要在该客户端上安装Oracle服务器。当您拥有此功能时,可以发出以下命令:
lsnrctl
set current_listener (description=(address=(host=X)(port=Y)(protocol=tcp)))
status

10g监听器的默认设置会导致以下结果:

TNS-01189:监听程序无法验证用户

这是因为从10g开始,Oracle默认启用了本地操作系统身份验证的安全性,意味着只有启动监听器的本地操作系统用户才能向监听器发出lsnrctl命令。监听器将拒绝回答其他任何用户。


2
另一个需要考虑的选项是Unix上的文件/etc/oratab或Windows上相应的注册表。我认为这是一个注册表文件。oratab应该列出主机上所有的SID,无论它们是否正在运行。

来自@saritonin的评论,他没有发表评论的特权:“请注意,如果$ ORACLE_SID参数是通配符“*”,则/etc/oratab可能没有帮助。” - Rob W

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接