2008-11-18 86 views
1

我想用cygwin的sqlplus连接到位于myserver.mycompany.com端口1530当我尝试通过Cygwin的sqlplus

sqlplus [email protected]:1530/orcl 

我得到的错误远程Oracle安装连接到远程Oracle:

ORA-12154: TNS:could not resolve the connect identifier specified 

当我设置ORACLE_HOME到/ cygdrive/c/oracle/product/10.2.0/client_1,我得到一个不同的错误:

Error 6 initializing SQL*Plus 
Message file sp1<lang>.msb not found 
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory 

我可以telnet到服务器的端口1530,并且本地安装的SQL Developer也能够连接到数据库。我究竟做错了什么?

回答

3

我不知道有一个本地cygwin客户端为甲骨文(纠正我,如果我在这里错了,但我不能在Oracle的网站上找到任何提及它)。如果您将Cygwin与Windows客户端一起使用,则需要使用本地Windows路径。它不会理解你的/ cygdrive路径。

但是,我用Cygwin使用了Win32 Oracle客户端,并使其工作 - 相同的shell脚本可以在Cygwin,Linux和Solaris上运行。

+0

不直接相关的问题在cmd窗口,但`cygpath`实用程序可以很方便的Windows和POSIX路径之间来回转换。 – xdhmoore 2013-03-21 15:34:47

3

没有一个cygwin Oracle客户端。如上所述,使用设置为Windows路径的ORACLE_HOME。

对于您的问题的前半部分,请尝试查看TNS_NAMES env变量设置为的内容,如果未设置,则可能需要尝试将其设置为正确的位置。通常它默认为%ORACLE_HOME%/ network/admin/tnsnames.ora。 SQL Developer保留它自己的tnsnames文件副本,所以你不能通过回复来解决问题。

+0

它是TNS_ADMIN环境变量,而不是TNS_NAMES。 – talek 2016-05-03 13:50:31

0

NXC是正确的 - 它不是我正在使用的cygwin客户端,而是windows sqlplus客户端。 我设置了ORACLE_HOMEORACLE_SID的windows环境变量,然后能够使用tnsnames.ora中的net_service_name在cygwin bash shell中运行sqlplus。

0

它为我工作的方式是消除/cygdrive/d/cygdrive/c并与d:/c:/然后cygwin的会话中的sqlplus通话将工作取而代之。 /cygdrive/DriveLetter令人困惑。

1

结合从其他的答案的细节(这花了我一点点,所以我将它张贴作为单独的答案,而不是评论):

$ORACLE_SID,如果一套,$TNS_ADMIN(可能其他路径 - 相关Oracle变量)必须使用Windows路径。您的Cygwin $PATH变量当然应该使用Cygwin符号(/drives/c/…)。所以我已经列入我的.bashrc

export ORACLE_HOME=c:\\Oracle\\product\\12.1.0\\dbhome_1 
export TNS_ADMIN=d:\\Oracle\TNSAdmin 
export PATH=$PATH:$(cygpath -u $ORACLE_HOME)/BIN 

在那之后,我打电话例如,没有更多的问题tnspingsqlplus。正如上面的仅仅是一个例子,你当然必须调整路径以反映您的安装/配置:)

0

我有同样的错误和你一样,

你应该设置不仅ORACLE_HOME在窗口变量,

而且PATH包括%ORACLE_HOME%\bin

那么你就可以打开的窗户在cmd,

尝试sqlplus username/[email protected]_define_tnsname

如果还好,然后在cygwin中删除所有ORACLE PATH设置,重启cygwin,试试吧。

如果失败,应该让sqlplus的效果很好在第一