无法从其他计算机连接oracle数据库

Abd*_*jwa 3 oracle networking database-administration oracle11g oracle-sqldeveloper

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

监听器.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
Run Code Online (Sandbox Code Playgroud)

我的电脑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)
    )
  )
Run Code Online (Sandbox Code Playgroud)

监听器.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
Run Code Online (Sandbox Code Playgroud)

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

还附上了错误图片 在此输入图像描述

Abd*_*jwa 5

经过大量研究,我解决了这个问题。我也必须与您分享,以便任何遇到此问题的人都可以轻松解决。

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

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

监听器.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
Run Code Online (Sandbox Code Playgroud)

SID_LIST_LISTENER 包含两个条目,第一个 SID_DESC 是默认条目,我们必须添加第二个 SID_DESC 以便识别 orcl SID,否则当从其他计算机连接数据库时,Sqldeveloper 或 toad 或 sqlplus 将给出以下错误: error: sid does not current Know

现在侦听器包含两个条目,默认情况下,第一个条目用于 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 等)

更重要的一件事您必须使用以下命令检查侦听器服务是否已启动并正在运行(打开 CMD 并键入):

**lsnrctl 状态 **

**lsnrctl开始**

**lsnrctl 停止 **

当您更改listener.ora文件时,您必须停止然后启动lsnrctl服务才能使更改生效。