- PR -

PL/SQLの起動方法によって結果がちがう

投稿者投稿内容
takes
会議室デビュー日: 2005/08/08
投稿数: 5
投稿日時: 2005-08-08 13:45
初めて投稿します。
原因がわからなくてお手上げ状態です。解決の糸口を見つけたいのでよろしくお願いします。

PL/SQLの内容:
 TBLAからデータを抽出してTBLBへINSERT又はUPDATEを行う処理をしています。 
DB:
 NT_Server2003
 olacle9i
現象:
 PL_SQLを単体(SQLPLUS等)で実行した場合はTBLBに出力された内容が正しいのですが
 スケジュールに登録して実行した場合にTBLBの値がn倍の値で出力されてしまいます。
  (不特定な倍数)
試した事:
 データ抽出条件の確認 単体での確認ではOK
 引数の取得エラー?  固定で埋め込んでも単体はOK
 TBL領域の拡張     単体はOK
         
初心者なので良くわかっていない事も多々ありますので、
わかり難い文書だと思いますがアドバイス等よろしくお願いします。







[ メッセージ編集済み 編集者: takes 編集日時 2005-08-08 13:46 ]

[ メッセージ編集済み 編集者: takes 編集日時 2005-08-08 13:48 ]
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2005-08-08 14:50
可能であれば、PL/SQL中にn倍で出力されてしまう項目の値をDebug出力してみてはいかがでしょうか。

スクリプト等を介してスケジュール起動しているのであれば、そちらも調べてみて下さい。
takes
会議室デビュー日: 2005/08/08
投稿数: 5
投稿日時: 2005-08-09 17:50
いーたさん、返信ありがとうございます。
早速試してみたのですが、NGでした。

<<可能であれば、PL/SQL中にn倍で出力されてしまう項目の値をDebug出力してみてはいか  がでしょうか。
 
 カーソルを開いて、その結果をTBLBへ出力しているのですが、
 TBLBに出力する前にDebag出力してみました。
 結果:単体で起動ではn倍にはなりませんでした。
    テキスト出力してみたのですが、単位ではなりませんでしたが、
    タスク起動した場合にはn倍になっていました。

<<スクリプト等を介してスケジュール起動しているのであれば、そちらも調べてみて下さ い。

 スクリプトを介して起動しています。
 下記のようなbatファイルを実行しています。
 TEST.bat
  net start OracleServiceORCL
  svrmgrl @TestDay.sql
  pause
  exit

 TestDay.sql
  connect htec/hks
  Execute SP_SZU005_1
  exit;

 タスク登録して時間起動した場合のみn倍になってしまいます。
 タスクを直接実行するとn倍にはなりませんでした。
 

 
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2005-08-09 18:44
タスクって、Windowsのタスクですよね?
僕はそれに詳しくないのですが、net start OracleServiceORCL が時間がかかりすぎるなどの原因で、タスクがリランされているなんてことはありませんか?

あと、関係ないかもしれませんが、そういうバックグラウンドで実行されるコマンドにpauseを入れるのって、問題にならないんですかね。
takes
会議室デビュー日: 2005/08/08
投稿数: 5
投稿日時: 2005-08-10 13:29
カーニーさん、返信ありがとうございます。

<<net start OracleServiceORCL が時間がかかりすぎるなどの原因で、タスクがリランさ れているなんてことはありませんか?

 処理は複雑ではないのですが、データ件数が60万件の中から3000件くらい抽出し ています。単体で起動時は10秒かからずに終了しています。
 あとタスクのリランはログには記載されてませんでした。

 ロールバックセグメントの領域が少ないため?などと考え、大きくしてみたのですが
 変わりませんでした。
 また、oracle8の環境で試したのですが、こちらではうまくできました。
 やはりoracle9iのせいなのでしょうか?
 
 p.s
 現在はpauseは抜いてます。
takes
会議室デビュー日: 2005/08/08
投稿数: 5
投稿日時: 2005-08-11 10:03
いろいろ試した結果、Windowsのタスクマネージャーで起動した場合のみ起こるようです。
select文のgroup や As 〜の名称を変更したりとやってみたのですが・・・
何か参考になるものがあれば教えてください。お願いします

いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2005-08-11 10:43
時間は掛かりますが、SQLトレースを取得してはいかがでしょうか。
正常(単体で実行)/異常(タスクから実行)の2パターンでトレースを取れば、怪しい箇所が明確になるかと。

後、svrmgrlはOracle9iから廃止されたはずですが、同一サーバ内に8iと9i両方が導入されているのでしょうか?
svrmgrlではなく、sqlplusで実行すると結果はどうなりますか?
未記入
常連さん
会議室デビュー日: 2005/07/25
投稿数: 35
投稿日時: 2005-08-11 10:44
こんにちは。
気になったのですが、
TEST.bat
  net start OracleServiceORCL
  svrmgrl @TestDay.sql
  pause
  exit

SVRMGRL は9iから廃止されていますが
このバッチは本当に9iで単体で実行できていますか?

たとえば、8と9iが同じサーバにインストールされていて、
9iに接続するつもりでバッチを実行しても
9iの$ORACLE_HOME/bin にSVRMGRLがなくて
8で実行されているということはありませんか?

スキルアップ/キャリアアップ(JOB@IT)