如何获取 Oracle 的 SID 列表
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/997919/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to obtain the list of Oracle's SIDs
提问by Roman Kagan
I have the host, port, user id and password but missing SID for connecting to Oracle DBMS. How can I find the list of SIDs on that server?
我有主机、端口、用户 ID 和密码,但缺少用于连接到 Oracle DBMS 的 SID。如何找到该服务器上的 SID 列表?
回答by Thomas Jones-Low
A better way is, if you have access to the host machine and the Oracle install is to use the command: lsnrctl status
. This works on both Unix, Linux, and Windows machines. The status command will show you all the listeners (and their associated SIDs).
更好的方法是,如果您可以访问主机并且 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.2.0\server\network\admin\listener.ora
Listener Log File C:\oracle\XE\app\oracle\product.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
In the above example you can connect to the XE database using the Conect Strings XEXDB, XE_XPT or XE.
在上面的示例中,您可以使用 Conect Strings XEXDB、XE_XPT 或 XE 连接到 XE 数据库。
回答by dpbradley
The short answer is that you need access to the host OS:
简短的回答是您需要访问主机操作系统:
For Unix, ps -ef | grep pmon
will show you one or more processes with names like ora_pmon_xxxx
, and xxxx
is the instance name.
对于 Unix,ps -ef | grep pmon
将显示一个或多个名称类似于 的进程ora_pmon_xxxx
,并且xxxx
是实例名称。
In Windows I guess there is a similar signature in the task list.
在 Windows 中,我猜在任务列表中有一个类似的签名。
In practice, this information is usually given to you by whoever administers the database when your connecting account is created.
在实践中,此信息通常由创建连接帐户时管理数据库的人员提供给您。
回答by ik_zelf
The question comes down to : which ORACLE_SID's or services are supported by the listener that is running on host X port Y. Depending on how secure this listener is configured you can see this using the lsnrctl command from a client that has lsnrctl installed. To be able to do this you do need an oracle server installation on that client. When you have that you can issue
问题归结为:在主机 X 端口 Y 上运行的侦听器支持哪些 ORACLE_SID 或服务。根据此侦听器的配置安全性,您可以从安装了 lsnrctl 的客户端使用 lsnrctl 命令查看这一点。为了能够做到这一点,您确实需要在该客户端上安装 oracle 服务器。当你拥有它时,你可以发出
lsnrctl
set current_listener (description=(address=(host=X)(port=Y)(protocol=tcp)))
status
The default setting of the 10g listener fill cause the following result: TNS-01189: The listener could not authenticate the user
10g 侦听器填充的默认设置导致以下结果: TNS-01189:侦听器无法验证用户
This is because from 10g oracle default has Security ON: Local OS Authentication meaning that only the local OS user that started the listener can issue lsnrctl commands to the listener. The listener will refuse to answer any other user.
这是因为从 10g 开始,oracle 默认设置了 Security ON: Local OS Authentication,这意味着只有启动侦听器的本地 OS 用户才能向侦听器发出 lsnrctl 命令。听众将拒绝回答任何其他用户。
回答by Karl
Another option to consider is the file /etc/oratab on Unix or its equivilent on Windows, which I think is a registry hive.
另一个要考虑的选项是 Unix 上的文件 /etc/oratab 或其在 Windows 上的等效文件,我认为它是一个注册表配置单元。
The oratab should list all SIDs on a host, whether currently running or not.
oratab 应列出主机上的所有 SID,无论当前是否正在运行。
回答by mathewguest
There is an nmap script that maybe could help, oracle-sid-brute:
有一个 nmap 脚本可能会有所帮助,oracle-sid-brute:
http://nmap.org/nsedoc/scripts/oracle-sid-brute.html
http://nmap.org/nsedoc/scripts/oracle-sid-brute.html
It was installed with nmap on my system.
它是用 nmap 安装在我的系统上的。
nmap --script oracle-sid-brute -p 1521-1560 [host]
This would only help if the SID can be matched in a list. The default list is here:
这仅在 SID 可以在列表中匹配时才有帮助。默认列表在这里: