An invalid NLS_LANG can cause SQL*Plus to look for messages in a nonexistent language subdirectory.
View current setting:
echo $NLS_LANG
Common working setting: AMERICAN_AMERICA.AL32UTF8 or AMERICAN_AMERICA.US7ASCII. An invalid NLS_LANG can cause SQL*Plus to look
If it’s set to something exotic like JAPANESE_JAPAN.JA16EUC, verify that $ORACLE_HOME/nls/data contains the necessary data files. For testing, unset it: Common working setting: AMERICAN_AMERICA
unset NLS_LANG
Then try running sqlplus /nolog. If that works, your NLS_LANG was misconfigured. Then try running sqlplus /nolog
# Check permissions (should be at least 644)
ls -l $ORACLE_HOME/sqlplus/mesg/sqlplus.msb
# Locate message files
find $ORACLE_HOME -name "*.msb" -type f 2>/dev/null
# Trace system calls to see file access attempts
strace -f -e open,openat,read sqlplus /nolog 2>&1 | grep -E "(msb|lib)"
yum reinstall oracle-sqlplus