Solaris 環境で実行可能なシェル スクリプトを実行する Oracle スケジューラ ジョブがあります。ジョブは毎月第 2 日曜日に実行され、スケジューラ ジョブ ログでエラー コード ORA-27369 の状態で実行されます。
ここに私のシェルスクリプトがあります:
#!/bin/bash
ORACLE_HOME=/app/oracle/10g;
export ORACLE_HOME;
ORACLE_SID=IBSDB;
export ORACLE_SID;
edate=`date "+%Y%m%d"`; export edate;
$ORACLE_HOME/bin/sqlplus "/ as sysdba" @/app/oracle/script/alter_all_index.sql
このシェル スクリプトは、sqlplus を実行し、alter_all_index.sql を実行します。alter_all_index.sql は、spool コマンドを介して 2 つのファイルを作成します。最初は ALTER_INDEX_REBUILD.sql です。このファイルには、すべてのインデックスを再構築するためのクエリが含まれています。2 番目のファイルは LOG_ALTER_INDEX_REBUILD.txt で、ALTER_INDEX_REBUILD.sql の実行中に発生したエラーを保存します。ここでは、alter_all_index.sql のコードを示します。
set wrap off
set linesize 1000
set feedback off
set pagesize 0
set verify off
set termout off
spool ALTER_INDEX_REBUILD.sql;
prompt set linesize 1000
prompt set pagesize 0
prompt spool LOG_ALTER_INDEX_REBUILD.txt
PROMPT ------------------ START FROM HERE ---------------
--prompt varID nvarchar2(40):=sys_guid();;
--prompt insert into PCB_AGCM.QUERY_HK_MONITOR (ID, TASK_NAME, START_TIME, END_TIME, STATUS) values(varID, 'REBUILD INDEX', to_char(sysdate, 'Dy DD-Mon-YYYY HH24:MI:SS'), null, 'STARTING');;
--prompt commit;;
prompt ------------------ execute GCM_AGCM --------------
select 'ALTER INDEX '||owner||'.'||INDEX_NAME||' REBUILD ONLINE;'
from all_indexes where owner like 'PCB_AGCM%';
PROMPT ------------------ END OF SCRIPT ----------------------
--prompt update PCB_AGCM.QUERY_HK_MONITOR set end_time=to_char(sysdate, 'Dy DD-Mon-YYYY HH24:MI:SS'), status='COMPLETED' where ID = varID;;
prompt commit;;
prompt exec PCB_AGCM.GATHER_SCHEMA_STATS();;
PROMPT /
PROMPT ------------------- END OF SCRIPT ----------------------
prompt spool off
SPOOL OFF;
@@ALTER_INDEX_REBUILD.sql
ジョブを実行する前に、以前の手動実行から生成された ALTER_INDEX_REBUILD.sql と LOG_ALTER_INDEX_REBUILD.txt の両方が存在します。Oracle Scheduler Jobでテストしたとき。最初はうまく動作し、TOAD->セッションブラウザでセッションを確認しました。うまく動作し、クエリ再構築インデックスが実行されていましたが、最後のインデックスが完了した後、ジョブはエラーORA-27369で終了しました:タイプEXECUTABLEのジョブは終了コードで失敗しました: 所有者ではありません。
私はすべてのスクリプトを調べます。ALTER_INDEX_REBUILD.sql と LOG_ALTER_INDEX_REBUILD.txt の両方が更新されていません。デフォルトで存在する場合は、スプール コマンドによって作成および置換されます。最終更新日は 2013 年 4 月 13 日です。2013 年 5 月 9 日に変更されているはずです。
スプールコマンドに問題があるという結論に達しましたが、これを解決する方法がわかりませんでした。所有権と許可に関係している可能性があると思いましたが、両方のファイルがオラクルによって所有されています。誰もがこれを解決する理由と方法を知っていますか?
私はORA-27369について閲覧しましたが、これまでのところヒントはありません。
心から