Oracle 11g Express Edition(11.2.0)がインストールされているRHEL 7.2サーバーがあります。 Oracleをインストールすると、/etc/init.dに「oracle-xe」というファイルが作成されます。これは、リスナーとデータベースを手動で開始および停止するために使用できるbashスクリプトです。サーバーにログインすると、次のコマンドを実行できます。
dzdo /etc/init.d/oracle-xe start
そして、Oracleリスナー+データベースは問題なく起動します。 sqlplusを使用してログインし、コマンドを実行できます。サーバーが再起動されるたびにリスナーとデータベースを手動で起動する必要がないように、chkconfigを使用してシステム起動時にoracle-xeが自動的に実行されるようにします。 oracle-xeスクリプト自体はかなり長いですが、その要旨は次のとおりです。
#!/bin/bash
# chkconfig: 2345 80 05
# Source fuction library
if [ -f /lib/lsb/init-functions ]
then
. /lib/lsb/init-functions
elif [ -f /etc/init.d/functions ]
then
. /etc/init.d/functions
fi
SU=/bin/su
ORACLE_OWNER=oracle
$ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
LSNR=$ORACLE_HOME/bin/lsnrctl
SQLPLUS=$ORACLE_HOME/bin/sqlplus
$STARTUP_LOG=/home/tsm/log/oracle-xe.log
echo $(date) >> $STARTUP_LOG
$SU -s /bin/bash $ORACLE_OWNER -c "$LSNR start" >> $STARTUP_LOG 2>&1
$SU -s /bin/bash $ORACLE_OWNER -c "$SQLPLUS -s /nolog @$ORACLE_HOME/config/scripts/startdb.sql" >> $STARTUP_LOG 2>&1
何が起こっているのかを知るために、$STARTUP_LOGコードと>>出力リダイレクトを追加しました。次の内容でchckconfigにスクリプトを追加しました。
cd /etc/init.d
dzdo chmod 750 oracle-xe
dzdo chkconfig --add oracle-xe
dzdo chkconfig oracle-xe on
次のコマンドは、与えられた(短縮された)出力を生成します。
dzdo chkconfig --list
oracle-xe 0:off 1:off 2:on 3:on 4:on 5:on 6:off
サーバーを再起動し、/home/tsm/log/oracle-xe.logに次の出力を持つログファイルを生成しました。
Fri Jan 13 15:03:58 CST 2017
su: cannot open session: Permission denied
su: cannot open session: Permission denied
推測できるように、このsuの失敗により、リスナーもデータベースエンジンも開始されませんでした。ログファイルに再起動日時が表示されるので、起動時にスクリプトが実行されていると確信しています。これは権限の問題のようです。起動時に init スクリプトを実行するために使用されるアカウントは、何らかの理由で $ORACLE_OWNER で su できません。しかし、私は低レベルの管理者としてコマンドプロンプトでこれを行うことができます。私が理解したように、初期化コードはrootとして実行されるので、このsuコマンドは問題なく実行する必要があります。私は一日のほとんどをこの問題を解決するためにさまざまな方法を検索して試みるのに費やしました。
サーバー自体はDirectAuthorizeを使用してアクセスを許可するため、sudoの代わりにdzdoを使用するようになりました。これはこれに関連していますか?
ベストアンサー1
だから私は何が起こっているのか理解しています。システムがDirectAuthorizeを使用しているときにsu
他のユーザーとして機能するすべてのアカウント〜しなければならない代わりに使用してくださいdzdo
。これには、システム起動中にchkconfigを介してサービスを開始するために使用されるルートアカウントも含まれます。そのため、oracle-xeスクリプトファイルで次の行を変更しました。
$SU -s /bin/bash $ORACLE_OWNER -c "$LSNR start" >> $STARTUP_LOG 2>&1
$SU -s /bin/bash $ORACLE_OWNER -c "$SQLPLUS -s /nolog @$ORACLE_HOME/config/scripts/startdb.sql" >> $STARTUP_LOG 2>&1
に変更:
dzdo -s -u $ORACLE_OWNER $LSNR start >> $STARTUP_LOG 2>&1
dzdo -s -u $ORACLE_OWNER $SQLPLUS -s /nolog @ORACLE_HOME/config/scripts/startdb.sql >> @STARTUP_LOG 2>&1
dzdo
su
オプションが異なり、単に所定の位置に配置することはできないため、直接交換ではありません。特に、-c
特定のコマンドを実行するオプションはありませんdzdo
。代わりに実行されるコマンドは、ステートメントの最後に表示されるすべてのものです。この-s
スイッチは、シェルをターゲットユーザーとして実行するように指示します。これらの変更を実行して再起動した後、リスナーとデータベースインスタンスは何の問題もなくユーザー "oracle"で始まりました。