【问题标题】:ORA-12505 error when connecting to databases on the same machine that listen through the same port连接到通过同一端口侦听的同一台计算机上的数据库时出现 ORA-12505 错误
【发布时间】:2020-03-02 03:44:44
【问题描述】:

我有一个数据库,它在名为 DB1 和 DB2 的同一台机器上复制。

我正在尝试通过 SQL Developer 连接到这两个数据库。我的 Windows 上没有安装 Oracle 客户端。

tnsnames.ORA 如下所示:

DB1 =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.com)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = DB1)
 )
)

DB2 =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.com)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = DB2)
 )
)

listener.ora 如下所示:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtPROC)
      (ORACLE_HOME = /product/11.2.0.4/)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) 
      (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.com)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DB1)
      (SID_NAME = DB1)
      (ORACLE_HOME = /product/11.2.0.4/)
      (PRESPAWN_MAX = 50)
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = DB2)
      (SID_NAME = DB2)
      (ORACLE_HOME = /product/11.2.0.4/)
      (PRESPAWN_MAX = 50)
    )
  )

我能够连接到 DB2,但不能连接到 DB1。当我从 SQL Developer 连接到 DB1 时,出现 ORA-12505 错误。

当我运行 $ps -ef | grep pmon 时,我得到 2 个进程 - ora_DB1 和 ora_DB2

当我运行 $ps -ef | grep tns 时,我得到 1 个进程 - LISTENER

当我运行 $lsnrctl status LISTENER 时,我得到了输出

服务总结

服务“DB2”有 1 个实例。 实例“DB2”,状态 UNKNOWN,有 1 个用于此服务的处理程序...

为什么我无法连接到“DB1”?

【问题讨论】:

    标签: oracle oracle11g tnsnames


    【解决方案1】:

    为 DB2 创建另一个侦听器并在 listener.ora 文件中将端口更改为 1522,然后您就可以连接了。您的 SID_LIST_LISTENER 名称也相同。您有 2 个 SID_LIST_LISTENER,它们会查找 DB1 和 DB2,但它们的名称相同。将它们的名称更改为 SID_LIST_LISTENER1 和 SID_LIST_LISTENER2。

    别忘了重启监听器

    (可选)您不需要添加另一个 SID_LIST_LISTENER。如果你愿意,你可以像这样在默认的 SID_LIST_LISTENER 中添加一个 SID_DESC ;

    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = DB1)
          (SID_NAME = DB1)
          (ORACLE_HOME = /product/11.2.0.4/)
          (PRESPAWN_MAX = 50)
        )
         (SID_DESC =
          (GLOBAL_DBNAME = DB2)
          (SID_NAME = DB2)
          (ORACLE_HOME = /product/11.2.0.4/)
          (PRESPAWN_MAX = 50)
        )
      )
    

    【讨论】:

      【解决方案2】:

      感谢大家的帮助!

      这与动态注册有关。在 listener.ora 文件的第一行将其设置为 OFF。一旦被注释掉,就很好了。端口保持不变,无需通过其他端口监听。

      另外,显然当我运行 $ lsnrctl status LISTENER 时,我得到了状态 UKNOWN 的输出,因为动态注册已关闭。

      Service "DB2" has 1 instance(s). Instance "DB2", status UNKNOWN, has 1 handler(s) for this service...
      

      因此,可以将同一台机器上的 2 个数据库配置为通过同一个端口进行侦听。

      【讨论】:

        猜你喜欢
        • 2012-10-12
        • 2014-10-31
        • 2017-08-07
        • 1970-01-01
        • 2022-01-02
        • 2019-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多