【问题标题】:ora-12505 error while connecting via SQL Developer通过 SQL Developer 连接时出现 ora-12505 错误
【发布时间】:2014-10-31 13:42:58
【问题描述】:

我正在尝试使用 SQL Developer 远程连接到 Oracle 12c 数据库。为了从另一台计算机远程连接,在运行 Oracle 的计算机上,我在 Windows 7 防火墙中打开了一个端口。这部分有效,但现在由于这个错误 ORA-12505,听众不让我进入。当我尝试在远程计算机上连接 SQL Developer 时,它无法识别我提供的 SID。我什至尝试将服务名称设置为“编辑器”,但仍然没有。

以下是远程计算机上 SQL Developer 的设置:

在服务器端,这是 listener.ora:

SID_LIST_LISTENER =
(SID_LIST =
  (SID_DESC =
    (SID_NAME = CLRExtProc)
    (ORACLE_HOME = C:\app\Owner\product\12.1.0\dbhome_1)
    (PROGRAM = extproc)
    (ENVS = "EXTPROC_DLLS=ONLY:C:\app\Owner\product\12.1.0\dbhome_1\bin\oraclr12.dll")
  )
)

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (SERVICE_NAME = editor)
    )
 )

 REMOTE_LISTENER =
   (DESCRIPTION_LIST =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.19)(PORT = 1531))
       (SERVICE_NAME = editor)
     )
   )

还有 tnsnames.ora:

EDITOR =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.19)(PORT = 1531))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = editor)
    )
  )

  LISTENER_EDITOR =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = editor)
    )
  )


  ORACLR_CONNECTION_DATA =
    (DESCRIPTION =
      (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

您会注意到默认侦听器在端口 1521 上设置为 localhost。只要保持不变,我就可以使用 SQL Developer 连接服务器。因此,为了远程连接,我为端口 1531 设置了第二个侦听器,并输入了服务器的 IP 地址。防火墙也已设置为允许通过端口 1531 进行连接。如您所见,我确实编辑了 tnsnames.ora 文件以允许连接到 Editor 数据库,但我的编辑似乎没有解决任何问题。我仍然无法在客户端连接 SQL Developer。在服务器上,我尝试使用 Oracle Net Configuration Assistant 来测试编辑器条目并以错误消息结束:

ORA-12514 侦听器当前不知道连接描述符中请求的服务。

2014 年 9 月 9 日更新:

我被要求从命令提示符运行 lsnrctl status。以下是该命令的输出:

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))(SERVICE_NAM
E=editor))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 12.1.0.1.0 - Produ
ction
Start Date                09-SEP-2014 14:33:06
Uptime                    0 days 4 hr. 14 min. 38 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   C:\app\Owner\product\12.1.0\dbhome_1\network\admin\lis
tener.ora
Listener Log File         C:\app\Owner\diag\tnslsnr\Shiers-PC\listener\alert\log
.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc))(SERVIC
E_NAME=editor))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))(SERVICE_NAME=
editor))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=Shiers-PC)(PORT=5500))(Security=(my
_wallet_directory=C:\APP\OWNER\admin\editor\xdb_wallet))(Presentation=HTTP)(Sess
ion=RAW))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "editor" has 1 instance(s).
  Instance "editor", status READY, has 1 handler(s) for this service...
Service "editorXDB" has 1 instance(s).
  Instance "editor", status READY, has 1 handler(s) for this service...
Service "pdborcl" has 1 instance(s).
  Instance "editor", status READY, has 1 handler(s) for this service...
The command completed successfully

好的……那我该怎么办???

【问题讨论】:

  • 我运行了 lsnrctl,它只列出了一个实例。它说:服务“CLRExtProc”有 1 个实例。这就是它列出的全部内容。除了“编辑器”之外,这是我应该使用的吗?为了它,我在服务名称字段中输入了它并尝试测试连接。我遇到了其他错误:网络适配器无法建立连接。
  • 您是否在远程计算机上使用 SQL Developer 进行连接?你有和 localhost 一样的 tnsnames.ora 吗?
  • 我在远程计算机上使用 SQL Developer。上图是我用来尝试连接的对话框。我在远程计算机上查找名为 tnsnames.ora 的文件,但没有找到。
  • 停止Oracle服务,停止监听,启动监听,启动Oracle服务……看看会发生什么。这应该使 Oracle DB 在侦听器中自动注册。如果它不起作用,请以/ as sysdba 的身份通过 SQLPlus 连接到您的 Oracle 服务并运行 alter system register;,退出 SQLPlus,然后尝试按照请求连接到您的 Oracle 服务。如果它仍然不起作用,请将service_name 子条款添加到您的listener.ora,重新启动侦听器,然后看看会发生什么。如果它仍然不起作用,那么......好吧,说出来,我们会看看接下来我们能想出什么好主意。
  • 我想这个问题(来自那里的答案)可能会有所帮助:stackoverflow.com/questions/18192521/…

标签: sql oracle oracle-sqldeveloper


【解决方案1】:

我在远程计算机上使用 SQL Developer。上图是 我用来尝试连接的对话框。我去找文件 在名为 tnsnames.ora 的远程计算机上并没有找到任何东西。 ——艾伦 9 月 7 日 13:58

您需要远程客户端计算机上的 Oracle 客户端与服务器上的 tnsnames.ora 文件相同。

【讨论】:

    【解决方案2】:

    如果我没有正确理解这个问题,请原谅我。是否涉及 3 台机器。客户端、监听器和数据库?如果您只是想在端口 1531 上通告数据库,则修改 listener.ora 文件中的 LISTENER 部分以包含一个额外的端口

    LISTENER =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1531))
    (SERVICE_NAME = editor)
    )
    )
    

    【讨论】:

      【解决方案3】:

      不要使用 SID,使用 SERVICE - 根据您的示例显示,“编辑器”。

      在 12c 上,如果您连接到可插拔设备,那么您将始终需要使用服务。 SID 将解析为容器数据库 (CDB)。

      要确认这是正确的,请在您的服务器上运行“lsnrctl status”命令,然后检查侦听器正在侦听的实际服务。

      【讨论】:

      • 我知道我需要使用 SERVICE 而不是 SID。我已经尝试将“编辑器”作为服务已有一段时间了。我运行了您建议的命令:lsnrctl status。您可以在我的原始帖子中看到上面的读数作为更新。有趣的是,我看到端口 5500 显示。这不是来自 tnsnames.ora 文件。我不知道那是从哪里来的。那么这一切意味着什么呢?我应该在防火墙中为 5500 打开一个端口吗?然后再尝试连接?
      • 您的数据库的服务是 pdborcl。因此,将服务名称更改为连接属性中的名称。此外,您不需要编辑 listener.ora 文件 - 数据库自行注册到侦听器。端口 5500 似乎已设置为通过 tcps 进行安全连接...
      • 我按照你的建议做了,把服务名改成了pdborcl。那不允许连接。我仍然收到错误 ORA-12514。
      • 为了清楚起见,除了 SQL Developer 之外,我不需要在客户端运行其他任何东西来完成这项工作吗?
      • 假设你有一个数据库要连接到某个地方,你只需要 SQL Developer 来连接。我在这里写了一些关于诊断连接问题的文章thatjeffsmith.com/archive/2014/09/…
      猜你喜欢
      • 2013-05-16
      • 2021-02-04
      • 2022-01-02
      • 2013-07-20
      • 2017-12-14
      • 2015-06-18
      • 2017-08-07
      • 2012-10-12
      • 2013-09-01
      相关资源
      最近更新 更多