【问题标题】:sqlplus remote connection giving ORA-21561sqlplus 远程连接给出 ORA-21561
【发布时间】:2015-09-29 02:14:39
【问题描述】:

我已经根据here 给出的指令安装了sqlplus

sqlplus 'username/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))'

这给了我错误

SQL*Plus: Release 11.2.0.4.0 Production on Fri Jul 10 16:10:38 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

ERROR:
ORA-21561: OID generation failed


Enter user-name: 

这个问题的解决方法是什么?

PS:我已经添加了主机名,主机已经有值了。

【问题讨论】:

  • 这很可能是/etc/hosts 问题。首先,您使用的是 XE 版本的 Oracle 吗?其次,您在/etc/hosts 中是否有一行 192.168.0.100 指定了正确的完全限定主机名?换句话说,如果 hostname 在运行 Oracle 实例的计算机上执行时返回 my-pretty-computer,则执行 nslookup "my-pretty-computer" - 这将返回完全限定的主机名。
  • 我没有使用 XE。我应该从 192.168.0.100 机器还是本地机器上运行 nslookup?
  • 假设您的网络配置正确,那么您在哪里运行 nslookup 并不重要。您可以尝试在两个地方都运行它,以确保获得相同的响应! :-)
  • nslookup "my-pretty-computer" 服务器:8.8.8.8 地址:8.8.8.8#53 ** 服务器找不到我的漂亮计算机:NXDOMAIN
  • 来自oracle机器

标签: oracle sqlplus


【解决方案1】:

试试这个,不要加单引号

sqlplus username/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))

【讨论】:

  • 这样尝试一次 dbvar="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))" sqlplus 用户名/密码@$dbvar
  • 同样的错误。错误:ORA-21561:OID 生成失败
  • 查看你的主机文件/etc/hosts中的内容应该有这个IP的条目。
  • 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.0.100 MYORACLE ~ ~
【解决方案2】:

将您的服务器名称附加到主机文件。

如果您的 /etc/hosts 文件如下所示:

127.0.0.1   localhost localhost.localdomain

应该改为:

127.0.0.1   localhost localhost.localdomain hostname

主机名可以通过命令“hostname”获取。

【讨论】:

  • 我发现这也解决了这个问题,即使我的服务器在远程系统上而不是本地。
  • 谁能解释为什么它有帮助?它确实对我有用,但我使用的是 AWS 机器,我无法在“弹性”事件上轻松进行这些更改。有没有另一种方法来完成同样的事情?也许设置一些环境变量?
  • 即使我的 Oracle 数据库位于远程计算机上也可以为我工作。
【解决方案3】:

此问题也可能是由于对 /etc/hosts 文件的权限错误造成的。如果 Oracle uid 不可读,则会显示错误。

确保您的 /etc/hosts 可供所有人阅读:

$ ls -l /etc/hosts
-rw-r--r--    1 root     system        7446 Mar 28 23:03 /etc/hosts 
$

【讨论】:

    【解决方案4】:

    已获得答案here

    1 - 获取您的主机名:

    $ 主机名

    新主机

    2 - 更改 /etc/hosts 的内容:

    $ sudo cat /etc/hosts

    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain

    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

    $ sudo nano /etc/hosts

    $ sudo cat /etc/hosts

    127.0.0.1 本地主机 新主机

    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

    希望这会有所帮助(:

    【讨论】:

      【解决方案5】:

      如果您使用的是 Mac,请将本地计算机名称添加到 /etc/hosts 中的 127.0.0.1

      会是这样的

      127.0.0.1       localhost <local_computer_name>
      

      查找本地计算机名称的方法

      系统偏好设置>分享(找不到就搜索) 在顶部您可以看到您的本地计算机名称

      或者您可以使用“主机名”命令获取本地计算机名称

      【讨论】:

      • 看起来是 mac 的常见问题。帮助我连接到 docker oracle 容器
      【解决方案6】:

      查看 /etc/sysconfig/network 如果需要,更改主机名

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-26
        • 1970-01-01
        • 2014-02-25
        • 2013-11-08
        • 2015-08-28
        • 1970-01-01
        • 2020-04-17
        • 1970-01-01
        相关资源
        最近更新 更多