我在使用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
我尝试了很多在互联网上给出的不同解决方案,最后在提到帖子后问题得到了解决 - https://dba.stackexchange.com/questions/23308/linux-error-29-illegal-seek-in-lsnrctl-for-linux-version-11-2
我案例的解决方案是:
export LD_BIND_NOW=1
我已经在多个Linux机器中安装了Oracle XE DB,但我只用了一个盒子就遇到了这个问题。这个变量是什么以及它如何解决非法寻求问题?
我的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
答案 0 :(得分:1)
控制动态加载程序的操作
动态加载器有一系列环境变量 会回应。其中大部分都比ldd更有用 普通用户,可以通过运行ldd来最方便地设置 各种开关。它们包括
LD_BIND_NOW ---通常,函数不会在库中“查找” 直到他们被召唤设置此标志会导致所有查找 加载库时发生,启动时间较慢。它的 当你想测试程序以确保一切都是有用的时候很有用 联的。
简单来说 - 如果LD_BIND_NOW变量设置为1,在C,C ++中会导致延迟加载,库(即需要时加载库)或使用时 - 而不是在启动时加载
如果软件在混合模式下运行,也会设置。
可能在您的情况下,它是一个启动问题,这个库从未使用过......!
答案 1 :(得分:1)
今天我遇到了同样的问题。问题似乎是二进制tnslsnr
可执行文件中的错误。
我的解决方案是将主机名更改为位于/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地址而不是主机名,但对我来说,它可以解决问题。
答案 2 :(得分:0)
在/etc/hosts
文件中包含以下行:
127.0.0.1 localhost.localdomain localhost