「sysdba」権限を持つシェル スクリプトから Oracle 11g DB に接続する必要があります。これを行うには、ユーザーを「root」から「oracle」に切り替える必要があります。次のことを試しましたが、成功しませんでした。
su - oracle -c "<< EOF1
sqlplus -s "/ as sysdba" << EOF2
whenever sqlerror exit sql.sqlcode;
set echo off
set heading off
shutdown immediate
startup mount
alter database archivelog;
alter database open;
exit;
EOF2
EOF1"
次のエラーが表示されます。
[root@vEMS-23 devel]# ./enableArchiveLogs.sh ja エラー: ORA-01031: 権限が不十分です
SP2-0306: 無効なオプションです。使用法: CONN[ECT] [ログオン] [AS {SYSDBA|SYSOPER|SYSASM}] ::= [/][@] [エディション=値] | / SP2-0306: 無効なオプションです。使用法: CONN[ECT] [ログオン] [AS {SYSDBA|SYSOPER|SYSASM}] ::= [/][@] [エディション=値] | / SP2-0157: 3 回試行しても ORACLE に接続できず、SQL*Plus を終了する [root@vEMS-23 devel]#
私が理解している限りでは、「sysdba」としての認証に失敗しています。「su - oracle -c」を削除し、最初に oracle ユーザーとしてスクリプトを実行すると、発生しません。
手がかりはありますか?
答えがあります:
答えはとても簡単です。構文を少しいじっただけです。以下は、コードの作業部分です。
su - oracle -c 'sqlplus -s / as sysdba <<EOF
whenever sqlerror exit sql.sqlcode;
set echo off
set heading off
shutdown immediate
startup mount
alter database noarchivelog;
alter database open;
exit;
EOF
'