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

unixODBC yields ORA-12154 TNS resolve error while sqlplus works just fine

我在设置与 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 是一个常见错误,我已经找到了很多可能的解决方案。但是 none 对我有用。这是令人沮丧的。

这是我尝试过的:

提到的环境变量都是在启动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