2016-05-19 5 views
0

私が直面している以下の懸念で私を助けてください。"スプールオフ; /"重要度 '/'ポストスプールオフ

データをテキストファイルにスプールして別のシステムに送信するために、定期的に毎日実行されるシェルスクリプトがあります。

私はこれらのスクリプトと6時間かかっていたスプールにいくつかの変更を加えましたが、現在は8時間以上かかるようになっています。

私はスクリプト内の "/"を読んで、通常は前のSQL文を実行します。 以下のコードでは、SQLクエリが2回呼び出されていますか?

私はナイーブである場合、これに新しいと申し訳ありません、同じことに関連する任意のヘルプが評価されます。

ありがとうございます。

#!/bin/ksh 
    ORACLE_HOME=/pprodi1/oracle/9.2.0; export ORACLE_HOME; 
    Script_Path=<path> 
    dt=`date '+%y%m%d%H%M'` 

    find $Script_Path/testing_spool* -mtime +3 | xargs rm -f { } 

    cd $Script_Path 

    sqlplus -s uname/[email protected]_name<<EOF1>/dev/null 

    set echo off 
    set head off 
    set pages 0 
    set feedback off 
    set pause off 
    set colsep " " 
    set verify off 
    set termout off 
    set linesize 3000 
    set trimspool on 

    spool $Script_Path/testing_spool.dat 

    SELECT column_name 
     FROM table_name 
    WHERE created_date > SYSDATE - 1 
     AND col1 = '126' 
     AND col2 = 'N' 
     AND col3 = 6; 

    spool off; 

    /

    EOF1 

    cat testing_spool.dat > testing_spool_$dt.txt 

答えて

0

はい、クエリはスプールがアクティブな間は1回、オフの後は2回実行されます。

上記のとおり、/executes whatever is currently in the SQL bufferには依然としてクエリが含まれています。 spool offはクライアントコマンドであり、SQLバッファには影響しません。

10行目の出力リダイレクト>/dev/nullを使用せずにスクリプトを実行するか、大量の出力が必要な場合は代わりにファイルにリダイレクトすると、クエリ結果が繰り返されます。あなたはヒアドキュメントとしてそれを実行しているので、


ちなみに、set termout offはスクリプトに何もしていません。あなたがスクリプトファイルに文を持っていたし、startまたは@ていることを実行した後、それが出力を抑制したい場合は、しかしas the documentation says

ECHOはあなたが対話的に入力したコマンドの表示に影響を与えるかからSQL * Plusにリダイレクトされません。オペレーティングシステム。

シェルスクリプト内で.sqlファイルを作成し、実行してから削除することができます。多くのメリットはないかもしれませんが、そのリダイレクトですべての出力を隠す必要はなく、障害を診断するのが難しくなります。

+0

ありがとうございました。 –

関連する問題