设置LD_BIND_NOWvariables来解决TNS Linux错误:29:非法查找错误

我在使用bash shell的Linux机器上为我的Oracle XE DB启动TNS Listener时遇到问题:

LSNRCTL> start Starting /oracle/product/11.2.0/xe/bin/tnslsnr: please wait... TNS-12537: TNS:connection closed TNS-12560: TNS:protocol adapter error TNS-00507: Connection closed Linux Error: 29: Illegal seek LSNRCTL> exit 

我尝试了很多不同的解决scheme,在互联网上给予最后的问题得到解决后提到后 – https://dba.stackexchange.com/questions/23308/linux-error-29-illegal-seek-in-lsnrctl-for -linux版本-11-2

我的情况的解决scheme是:

 export LD_BIND_NOW=1 

我在多个Linux机器上安装了Oracle XE DB,但是我只用了1个盒子就遇到了这个问题。 这个variables是什么,它是如何解决非法寻求问题?

我的Linux的详细信息是:

 bash-4.1$ uname -a Linux <hostname> 2.6.39-100.5.1.el6uek.x86_64 #1 SMP Tue Mar 6 20:26:00 EST 2012 x86_64 x86_64 x86_64 GNU/Linux 

今天我遇到了同样的问题。 这个问题似乎是二进制tnslsnr可执行文件中的一个bug。

我的解决方案是将主机名更改为位于/oracle/product/11.2.0/xe/network/admin/listener.ora中的listener.ora中的IP地址

 # listener.ora Network Configuration File: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /oracle/product/11.2.0/xe) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) ) DEFAULT_SERVICE_LISTENER = (XE) 

调整文件/etc/hosts并覆盖localhost语句(如其他答案中所述)不起作用。

我不知道是否建议使用IP地址,而不是主机名,但对我来说,这是诀窍。

控制动态加载器的操作

动态加载器将会响应一系列的环境变量。 其中大部分对于普通用户来说比ldd更多的用处,并且可以通过用各种交换机运行ldd来最方便地进行设置。 他们包括

LD_BIND_NOW —通常情况下,函数在被调用之前不在库中查找。 设置这个标志会导致所有查找在库加载时发生,从而缩短启动时间。 当你想测试一个程序来确保所有东西都被链接的时候,这是很有用的。

简单地说 – 如果LD_BIND_NOW变量设置为1,在C,C ++中会导致延迟加载,库(即需要时加载库)或使用库时 – 而不是在启动时加载

如果软件在混合模式下运行,也是如此。

可能是在你的情况下,它是一个启动问题,这个图书馆从来没有使用…!

/etc/hosts文件中包含以下行:

 127.0.0.1 localhost.localdomain localhost