Unable to run sqlplus command as root or any other user except oracle on RSA Identity Governance and Lifecycle 6.8.x and above
2 years ago
Originally Published: 2016-08-10
Article Number
000043809
Applies To
RSA Product Set: RSA Identity Governance and Lifecycle (RSA G&L)
RSA Version/Condition: 6.8.x and above
Platform: JBoss, Wildfly
Issue
Running sqlplus as any user except oracle (for example, as root) gives the error below:
acm:~ # sqlplus avuser/<password>
Error 6 initializing SQL*Plus
SP2-0667: Message file sp1<lang>.msb not found
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory

This error displays even though the environmental variable ORACLE_HOME is set correctly:

acm:~ # env | grep ORACLE
ORACLE_CONNECTION_ID=AVDB
ORACLE_SID=AVDB
ORACLE_BASE=/u01/app/oracle
ORACLE_SERVICE_NAME=AVDB
ORACLE_GRID_HOME=/u01/app/11.2.0/grid
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
Cause
The script setDeployEnv.sh sets an alias sqlplus for all users except oracle to run sqlplus as oracle. The alias, however, is missing the option to simulate initial login of the oracle user that will set Oracle's environmental variables before running sqlplus. This results in trying to run sqlplus without any ORACLE environment variables being set.

The incorrect line in the setDeployEnv.sh script is highlighted in red below:
 
if [ $USER != "oracle" ]; then
    alias sqlplus='sudo -u oracle $ORACLE_HOME/bin/sqlplus'
    alias avdbexport='sudo -u oracle /home/oracle/database/DBA/AVDB/scripts/AVDB_Export_AVUSER.sh'
    alias avdbimport='sudo -u oracle /home/oracle/database/DBA/AVDB/scripts/AVDB_Import_AVUSER.sh'
else
    alias avdbexport='/home/oracle/database/DBA/AVDB/scripts/AVDB_Export_AVUSER.sh'
    alias avdbimport='/home/oracle/database/DBA/AVDB/scripts/AVDB_Import_AVUSER.sh'
fi
Resolution
To resolve this issue, follow the steps below:
  1. Run the command below as root to list all instances of the setDeployEnv.sh script that need editing:
acm:~ # find / -name setDeployEnv.sh 2>/dev/null
/root/setDeployEnv.sh
/tmp/aveksa/staging/deploy/setDeployEnv.sh
/home/admin/setDeployEnv.sh
/home/oracle/setDeployEnv.sh
/home/oracle/deploy/setDeployEnv.sh
  1. Edit all setDeployEnv.sh scripts on the file system by adding an 'i' to the existing -u option in order to simulate initial login.  The line before editing is shown here:
if [ $USER != "oracle" ]; then
    alias sqlplus='sudo -u oracle $ORACLE_HOME/bin/sqlplus'
    alias avdbexport='sudo -u oracle /home/oracle/database/DBA/AVDB/scripts/AVDB_Export_AVUSER.sh'
    alias avdbimport='sudo -u oracle /home/oracle/database/DBA/AVDB/scripts/AVDB_Import_AVUSER.sh'
else
    alias avdbexport='/home/oracle/database/DBA/AVDB/scripts/AVDB_Export_AVUSER.sh'
    alias avdbimport='/home/oracle/database/DBA/AVDB/scripts/AVDB_Import_AVUSER.sh'
fi
The line should look like the example below after editing:
if [ $USER != "oracle" ]; then
    alias sqlplus='sudo -iu oracle $ORACLE_HOME/bin/sqlplus'
    alias avdbexport='sudo -u oracle /home/oracle/database/DBA/AVDB/scripts/AVDB_Export_AVUSER.sh'
    alias avdbimport='sudo -u oracle /home/oracle/database/DBA/AVDB/scripts/AVDB_Import_AVUSER.sh'
else
    alias avdbexport='/home/oracle/database/DBA/AVDB/scripts/AVDB_Export_AVUSER.sh'
    alias avdbimport='/home/oracle/database/DBA/AVDB/scripts/AVDB_Import_AVUSER.sh'
fi
  1. After editing all instances of the script, logoff from any existing sessions then login again for changes to take effect.