2

必要なコマンドがあります。これらのコマンドをプロンプトで実行すると、すべてが期待どおりに機能します。SQLPlus はクエリを実行し、結果をファイルにエクスポートしてから、Mailx がそのファイルをメールで送信します。

sqlplus username/pwd@instance
SPOOL /home/sadmin/sqlmail/spool.out
set linesize 2000
set wrap off
@/home/sadmin/sqlmail/query.sql
SPOOL OFF
exit
mail -s "Subject" email@address.com < /home/sadmin/sqlmail/spool.out

しかし、私の人生では、これらを.shファイルに入れてスケジュールできるようにする方法を理解することはできません。ヘルプ!?事前に感謝します。これは非常にばかげていると確信しています。

4

1 に答える 1

2

シェルの 'Here' ドキュメントを使用するのが通常の解決策です。

 cat MyCommand.sh
 #!/bin/bash  # (or ksh, sh, etc)
 PATH=.../path/to/sqlplusdir:${PATH}

sqlplus username/pwd@instance <<EOS
    SPOOL /home/sadmin/sqlmail/spool.out
    set linesize 2000
    set wrap off
    @/home/sadmin/sqlmail/query.sql
    SPOOL OFF
    exit
EOS
mail -s "Subject" email@address.com < /home/sadmin/sqlmail/spool.out

PATH env を設定して、sqlplus 実行可能ファイルへのパスを含める必要があります。

次に、cron 機能にアクセスできるユーザー ID が必要です。「vi」エディタの使い方を知っていますか? を呼び出すとcrontab、現在のユーザーのスケジュールされたジョブが表示され、「vi」コマンドでファイルを操作する必要があります。(使用するエディターをオーバーライドすることは可能かもしれませんが、お勧めしません)

cron の man ページを読む必要がありman cronます。つまり、上記のスクリプトを完全なスクリプトと呼びます。cron エントリは次のようになります

59 23 31 12 * { var=x; export var ; myCommand ; } > /tmp/myWorkDir/myCommand.trace 2>&1 

min
   hr
     day
       mon
          (DayOfWeek)

日付/時刻の値は、カンマ区切りのリスト (0、15、30、45)、ハイフン区切りの範囲 (4 ~ 6)、またはすべての有効な値を示す * にすることができます。

これにより、stderr を含むすべての出力が、myCommand の 1 回の実行から tmpDir 内のファイルに取り込まれます。

上記の最低限のバージョンは

59 23 12 31 * var=x; export var ; myCommand

その後、すべての出力がユーザーのローカル メールボックスに送信されます。

これが役立つことを願っています。

于 2011-06-08T20:00:06.273 に答える