ASMCMD fails to start on module libnnz10.so, permission denied [ID 790470.1] | ||
|
||
修改时间 17-MAR-2009 类型 PROBLEM 状态 PUBLISHED |
Oracle Server Enterprise Edition - Version: 11.1.0.6 to 11.1.0.7
This problem can occur on any platform.
ASM - Version: 11.1.0.6 to 11.1.0.7
Red Hat Advanced Server
Linux x86-64
RHEL 5 and OEL 5 only. RHEL 4 and OEL 4 are not affected. This is because of the more aggressive way that SELinux policies are enforced in RHEL 5 and OEL 5.
Immediately after a successful ASM installation, ASMCMD will not start:
$ echo $ORACLE_HOME
/opt/oracle/10.2.0
$ export ORACLE_SID=+ASM
$ asmcmd
install_driver(Oracle) failed: Can't load '/opt/oracle/10.2.0/perl/lib/site_perl/5.8.3/i686-linux-thread-multi/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: /opt/oracle/10.2.0/lib32/libnnz10.so: cannot restore segment prot after reloc: Permission denied at /opt/oracle/10.2.0/perl/lib/5.8.3/i686-linux-thread-multi/DynaLoader.pm line 229.
at (eval 2) line 3
Compilation failed in require at (eval 2) line 3.
Perhaps a required shared library or dll isn't installed where expected
at /opt/oracle/10.2.0/bin/asmcmdcore line 5953
SELINUX policy "Enforcing" causes the permission problem.
You are encountering unpublished Bug 6140224, "SQLPLUS FAILS TO LOAD LIBNNZ11.SO WITH SELINUX ENABLED ON EL5/RHEL5". Oracle Developement is actively working on this compiler version compatibility issue (ICC compilers that are used for several libraries, such as LIBNNZ10.SO and LIBNNZ11.SO) in the RHEL 5 and OEL 5 environments.
This is fixed in the forthcoming version 11.2. No fix is available for the current versions. Please use the workaround presented below.
Switch the SELinux from the default "Enforcing" mode that it is running in, to the "Permissive" mode.
Commands, as root:
======================
getenforce (returns "Enforcing")
setenforce 0
getenforce (returns "Permissive")
The commands for the workaround are immediate, and will remain in effect until the next reboot.
Please also ensure that SELinux "Permissive" enforcing is set at boot time by adding "enforcing=0" to the kernel boot line. An example of setting the SELinux mode to permissive from GRUB could be as follows:
title Red Hat Enterprise Linux ES (2.6.18-8.EL)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.EL ro root=/dev/VolGroup00/LogVol00 rhgb quiet enforcing=0
initrd /initrd-2.6.18-8.EL.img
Another example as follows:
/etc/selinux/config
and add:
selinux=0
SELINUX=disabled