如何获取Oracle的SID列表
更好的方法是,如果您有权访问主机并且Oracle安装使用以下命令:lsnrctl status
。这适用于Unix,Linux和Windows机器。 status命令将显示所有监听器(及其相关的SID)。
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
在上面的例子可以连接到使用CONECT字符串XEXDB,XE_XPT或XE的XE数据库。
简短的回答是,你需要访问主机操作系统:
对于Unix,PS英法| grep的PMON会显示你喜欢的名字ora_pmon_xxxx一个或多个进程,而xxxx是实例名称。
在Windows中,我猜在任务列表中有类似的签名。
实际上,这些信息通常由您在创建连接帐户时管理数据库的人员给您提供。
问题归结为:在主机X端口Y上运行的侦听器支持哪些ORACLE_SID或服务。根据此侦听器配置的安全性,您可以使用lsnrctl命令从具有lsnrctl的客户端安装。为了能够做到这一点,你需要在该客户端安装一个oracle服务器。当你有,你可以发出
lsnrctl
set current_listener (description=(address=(host=X)(port=Y)(protocol=tcp)))
status
各10g监听器的默认设置填充会导致以下结果: TNS-01189:监听器无法验证用户
这是因为从10G甲骨文默认有 安全开启:本地操作系统认证 这意味着只有启动侦听程序的本地操作系统用户才能向侦听程序发出lsnrctl命令。听众将拒绝回答任何其他用户。
另一个需要考虑的选择是Unix上的文件/ etc/oratab或Windows上的equivilent,我认为这是一个注册表配置单元。
oratab应列出主机上的所有SID,无论目前是否在运行。
有一个nmap的脚本,也许能帮上忙,Oracle的SID-蛮力:
http://nmap.org/nsedoc/scripts/oracle-sid-brute.html
它被安装与我的系统上的nmap。
nmap --script oracle-sid-brute -p 1521-1560 [host]
这只会帮助如果SID可以在列表中匹配。默认列表是在这里:
我曾考虑过这种方法作为我的答案,但从技术上讲,这只适用于默认侦听器。使用lsnrctl更复杂的方法是首先通过ps -ef | grep lsnr获取监听器列表,然后为每个监听器发出STATUS命令。不想过分复杂的答案,因为可能99%的安装使用默认侦听器设置 – dpbradley 2009-06-15 20:43:09