【问题标题】:cannot connect oracle database from other computer无法从其他计算机连接 oracle 数据库
【发布时间】:2016-04-04 03:24:10
【问题描述】:

我有两台计算机,计算机 A 的 IP (10.11.11.2) 包含 oracle 数据库 11g R2,计算机 B 的 IP (10.11.11.18)。我搜索了很多并在 Tnsnames.ora 和 listener.ora 文件中进行了一些更改,但无法连接。但是当我从客户端 tnsping 10.11.11.2 时,它给了我好的输出。这意味着可以从客户端访问数据库,但我无法使用 Toad 或 Sqldeveloper 连接数据库。

给出错误: tns 目前不知道请求的服务

我的电脑 A (10.11.11.2) tnsname.ora 和 listener.ora 文件粘贴在下面:

Tnsnames.ora 文件

# tnsnames.ora Network Configuration File:     D:\app\Mobilityusr\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


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

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

listener.ora 文件

# listener.ora Network Configuration File: D:\app\Mobilityusr\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\app\Mobilityusr\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\app\Mobilityusr\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.11.2)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = D:\app\Mobilityusr

我的电脑 B (10.11.11.18) tnsname.ora 和 listener.ora 文件粘贴在下面:

tnsnames.ora 文件

# tnsnames.ora Network Configuration File: D:\app\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


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

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

listener.ora

# listener.ora Network Configuration File: D:\app\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\app\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS =     "EXTPROC_DLLS=ONLY:D:\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )

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

ADR_BASE_LISTENER = D:\app

还附上了tnsping从计算机B到oracle数据库(安装在计算机A上)的图像:

还附上了错误图片

【问题讨论】:

    标签: oracle networking oracle11g oracle-sqldeveloper database-administration


    【解决方案1】:

    在 SQLDeveloper 中,不要指定 SID,而是选择服务名称。

    【讨论】:

      【解决方案2】:

      经过大量研究,我解决了这个问题。我也必须将它分享给你,以便任何有这个问题的人都可以轻松解决。

      Listener.ora 文件用于监听请求。如果我们想从另一台计算机访问数据库,我们必须在 listener.ora 中添加两个条目(一个用于 SID,另一个用于机器 IP 地址)。

      计算机A文件(listener.ora和tnsnames.ora)设置如下:

      Listener.ora

      # listener.ora Network Configuration File: D:\app\Mobilityusr\product\11.2.0\dbhome_1\network\admin\listener.ora
      # Generated by Oracle configuration tools.
      
      SID_LIST_LISTENER =
        (SID_LIST =
          (SID_DESC =
            (SID_NAME = CLRExtProc)
            (ORACLE_HOME = D:\app\Mobilityusr\product\11.2.0\dbhome_1)
            (PROGRAM = extproc)
            (ENVS =     "EXTPROC_DLLS=ONLY:D:\app\Mobilityusr\product\11.2.0\dbhome_1\bin\oraclr11.dll")
          )  
          (SID_DESC =
           (GLOBAL_DBNAME = orcl)
           (ORACLE_HOME = D:\app\Mobilityusr\product\11.2.0\dbhome_1)
           (SID_NAME = orcl)
          )
        )
      
      
      LISTENER =
        (DESCRIPTION_LIST =
          (DESCRIPTION =
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
            (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
          )
          (DESCRIPTION =
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
            (ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.11.2)(PORT = 1521))
          )
        )
      
      ADR_BASE_LISTENER = D:\app\Mobilityusr
      

      SID_LIST_LISTENER 包含两个条目,第一个 SID_DESC 是默认条目,我们必须添加第二个 SID_DESC 才能识别 orcl SID,否则 Sqldeveloper 或 toad 或 sqlplus 在从其他机器连接数据库时会给出以下错误: 错误:sid 目前不知道

      现在监听器包含两个条目,一个默认为 localhost,我们必须添加第二个条目,其中包含服务器机器 IP。通过此条目,服务器机器上的数据库可以侦听包含此 IP 地址的即将到来的连接将连接到服务器数据库。否则将无法连接数据库。

      注意:您可以使用这些配置,但不要忘记更改 IP 和 oracle_home 路径

      tnsnames.ora 文件用于定义任何数据库参数(SID、PORT、HOST)的别名。但是不需要更改 tnsnames.ora 来连接服务器和客户端,所以我没有修改位于服务器机器上的 tnsnames.ora。

      计算机 B tnsnames.ora 与上面提到的问题相同。 计算机 B listener.ora 与上面提到的问题相同。

      总结: 您只需要更改位于服务器机器 (Oracle_home/network/admin/) 的 listener.ora 文件。并在 SID_LIST_LISTENER 中添加两个条目以添加 SID 详细信息,在 LISTENER 中添加第二个条目以添加机器 IP 描述。

      还要检查环境变量(ORACLE_UNQNAME、ORACLE_SID、ORACLE_HOME、TNS_ADMIN 等)

      还有一件更重要的事情,您必须检查 Listener 服务是否已启动并正在运行 使用这些命令(打开 CMD 并输入):

      **lsnrctl 状态 **

      **lsnrctl 启动 **

      **lsnrctl 停止 **

      而且当你修改listener.ora文件时,你必须先停止再启动lsnrctl服务才能生效。

      【讨论】:

        【解决方案3】:

        我在使用 Oracle 12C 时遇到了同样的问题。终于让它与几乎相似的解决方案一起工作。

        我的数据库服务器位于 192.168.1.165 上,端口为 1526。 还必须在 Windows 服务器防火墙中打开端口 1526。

        # listener.ora 网络配置文件:G:\app\db12\product\12.1.0\dbhome_1\network\admin\listener.ora # 由Oracle 配置工具生成。 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = G:\app\db12\product\12.1.0\dbhome_1) (程序 = 扩展程序) (ENVS = "EXTPROC_DLLS=ONLY:G:\app\db12\product\12.1.0\dbhome_1\bin\oraclr12.dll") ) ) 听众 = (DESCRIPTION_LIST = (描述 = (地址 =(协议 = IPC)(密钥 = EXTPROC1526)) (地址 =(协议 = TCP)(主机 = 本地主机)(端口 = 1526)) ) (描述 = (地址 =(协议 = IPC)(密钥 = EXTPROC1526)) (地址 = (协议 = TCP)(主机 = 192.168.1.165)(端口 = 1526)) ) )

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-03
          • 1970-01-01
          • 1970-01-01
          • 2017-04-08
          • 1970-01-01
          • 1970-01-01
          • 2016-10-03
          • 1970-01-01
          相关资源
          最近更新 更多