linux - unixODBC 产生 ORA-12154 TNS 解析错误,而 sqlplus 工作正常

标签 linux oracle oracle11g odbc unixodbc

在设置与 Oracle 11g R1 数据库的 unixODBC 连接时遇到奇怪的错误。一切设置完毕后,我想尝试使用 isql 测试连接。它不断返回错误

[08004][unixODBC][Oracle][ODBC][Ora]ORA-12154: TNS:could not resolve the connect identifier specified

令我困惑的是,我可以使用相同的环境和 TNS 表示法通过 sqlplus 进行连接

sqlplus dbuser/password@DBOPBAC9
Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

SQL>

我已经解决这个问题两天了,但找不到解决方案。 ORA-12154 是一个常见错误,我已经找到了很多可能的解决方案。但他们都不适合我。这是令人沮丧的。

这是我尝试过的:

提到的环境变量都是在启动 isql 之前设置的

ORACLE_SID=DBOPBAC9
ORACLE_BASE=/CSGPBAC9/DBA/oracle
ORACLE_INSTANT_CLIENT_64=/CSGPBAC9/opt/myuser/tools/instantclient_11_2_x64
ORACLE_HOME=/CSGPBAC9/DBA/oracle/product/11.2.0
TNS_ADMIN=/CSGPBAC9/DBA/oracle/product/11.2.0/network/admin

这是在 $TNS_ADMIN 目录中找到的 tnsnames.ora

DBOPBAC9 =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = host IP)(PORT = 1480))
  (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = DBOPBAC9)
  )
)

这是sqlnet.ora

TRACE_LEVEL_CLIENT = OFF
SQLNET.EXPIRE_TIME = 10
NAMES.DIRECTORY_PATH = (TNSNAMES)
DIAG_ADR_ENABLED=off

这是我的 unixODBC 设置。我已将 unixODBC 安装到目录 /opt/unixODBC 中并相应地设置环境变量。 odbc.ini 位于目录 /opt/myuser/tools/unixODBC 中,并且还设置了变量。

odbc.ini

[OracleODBC-11g]
Application Attributes = T
Attributes = W
BatchAutocommitMode = IfAllSuccessful
BindAsFLOAT = F
CloseCursor = F
DisableDPM = F
DisableMTS = T
Driver = Oracle 11g ODBC driver
DSN = OracleODBC-11g
EXECSchemaOpt =
EXECSyntax = T
Failover = T
FailoverDelay = 10
FailoverRetryCount = 10
FetchBufferSize = 64000
ForceWCHAR = F
Lobs = T
Longs = T
MaxLargeData = 0
MetadataIdDefault = F
QueryTimeout = T
ResultSets = T
ServerName = //host.ip/DBOPBAC9
SQLGetData extensions = F
Translation DLL =
Translation Option = 0
DisableRULEHint = T
UserID =
StatementCache=F
CacheBufferSize=20
UseOCIDescribeAny=F

odbcinst.ini

[Oracle 11g ODBC driver]
Description     = Oracle ODBC driver for Oracle 11g
Driver          = 
Driver64        = /CSGPBAC9/opt/myuser/tools/instantclient_11_2_x64/libsqora.so.11.1
Setup           =
FileUsage       =
CPTimeout       =
CPReuse         =

I have created a strace output检查错误,但不幸的是我找不到任何东西。对我来说,它似乎能够找到 tnsnames.ora 文件并读取它

最佳答案

您需要编辑odbc.ini

ServerName = TNS_ALIAS

关于linux - unixODBC 产生 ORA-12154 TNS 解析错误,而 sqlplus 工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45906098/

相关文章:

java - 在 Linux 上部署到 Tomcat 时出现 JSF PropertyNotFound

java - 调整 Jackrabbit 数据模型(VERSION_BUNDLE 表)

sql - 如何仅选择公共(public)列将记录从一个表插入到另一个表

mysql - 数据库中的数据库(表设计)

sql - 如何忽略 Oracle 11g 中增加值的行

linux - 检测到一个新文件,并用 mpack 发送它

c - POSIX 线程与并行性

linux - MPI 程序什么都不做 - 在 linux 上运行

sql - 如何获得 Oracle 数据库中的所有应用程序专用或自定义角色?

java - ORA-01461 对于继承的 char(1 字节)列 - 需要使用 Spring JDBC(扩展 StoredProcedure)使其工作