2017-08-27 61 views
1

我在设置到Oracle 11g R1数据库的unixODBC连接时出现奇怪的错误。完成所有设置后,我想尝试使用isql测试连接。它不断返回错误unixODBC生成ORA-12154 TNS解析错误,而sqlplus工作正常

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

什么是困惑我的是,我可以通过sqlplus使用相同的环境和TNS符号就好

sqlplus dbuser/[email protected] 
Copyright (c) 1982, 2011, Oracle. All rights reserved. 

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

SQL> 

我的问题,工作两天连现在无法找到解决方案。 ORA-12154是一个常见的错误,我发现了很多可能的解决方案。但他们都没有为我工作。这是令人沮丧的。

以下是我已经tryed:所提到的全部设置

环境变量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) 
) 
) 

这是sqlne t.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文件和读取它

+0

当您在SQL运行SELECT * Plus中会发生什么? –

+0

我对unixODBC并不熟悉,但对我来说odbc.ini中的参数DSN是'OracleODBC-11g'而不是'DBOPBAC9'似乎很奇怪。我会尝试改变它。 – wolfrevokcats

+0

@BobJarvis语句成功执行。 – ap0

回答

1

您需要编辑的odbc.ini

ServerName = TNS_ALIAS 
+0

DBOPBAC9是数据库的名称(Oracle SID)。我认为ServerName必须是'host:port/db-name'形式。 – ap0

+0

DBOPBAC9是数据库的名称(Oracle SID),DBOPBAC9是TNS别名。 –

+0

要区分数据库名称(SID)和TNS_ALIAS,您必须更改tnsnames.ora文件中的TNS_ALIAS(例如DBO9或BAC9)。 –