我有几个带有 Oracle 12.2 服务器和 11.2 客户端的 RHEL 6 机器。这是供应商的要求。
在一台服务器上,我可以以任何用户身份运行 sqlplus,而在另一台服务器上,我只能以 oracle 用户身份运行 sqlplus。像任何其他用户一样运行会给出:
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA
当我说 oracle 用户时,我指的是名为 oracle 的操作系统用户。
我检查了 listener.ora 和 tnsnames.ora(在客户端和服务器 ORACLE_HOME 结构中),两者都是相同的,除了主机名。
文件/目录权限(所有权和模式)看起来不错。
tnsping 和 lsnrctl 状态看起来都很好。
关于问题可能是什么的任何想法?
谢谢
- 编辑 -
这些环境变量已设置并且功能相同。
set | awk -F= '/ORA/ {print $1}'
ORACLE_BASE
ORACLE_HOME
ORACLE_SID
ORACLE_TERM
ORACLE_UNQNAME
ORA_SDTZ
当您阅读 oracle 文档时,您还需要设置更多变量。对于 oracle 以外的用户,您应该设置示例 ORACLE_SID,它应该指向您的数据库的 SID。您也可以考虑将 TNSADMIN 设置为指向正确的 TNS 文件。
问题原来是
hostname
在工作服务器上返回一个短名称,在非工作服务器上返回一个 FQDN。我已更新 /etc/sysconfig/network 以将主机名设置为简短,现在一切正常。
我不知道为什么需要这样做,但它解决了问题,现在一切都很重要。