- - PR -
PL/SQLの起動方法によって結果がちがう
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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 ] |
|
投稿日時: 2005-08-08 14:50
可能であれば、PL/SQL中にn倍で出力されてしまう項目の値をDebug出力してみてはいかがでしょうか。
スクリプト等を介してスケジュール起動しているのであれば、そちらも調べてみて下さい。 |
|
投稿日時: 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倍にはなりませんでした。 |
|
投稿日時: 2005-08-09 18:44
タスクって、Windowsのタスクですよね?
僕はそれに詳しくないのですが、net start OracleServiceORCL が時間がかかりすぎるなどの原因で、タスクがリランされているなんてことはありませんか? あと、関係ないかもしれませんが、そういうバックグラウンドで実行されるコマンドにpauseを入れるのって、問題にならないんですかね。 |
|
投稿日時: 2005-08-10 13:29
カーニーさん、返信ありがとうございます。
<<net start OracleServiceORCL が時間がかかりすぎるなどの原因で、タスクがリランさ れているなんてことはありませんか? 処理は複雑ではないのですが、データ件数が60万件の中から3000件くらい抽出し ています。単体で起動時は10秒かからずに終了しています。 あとタスクのリランはログには記載されてませんでした。 ロールバックセグメントの領域が少ないため?などと考え、大きくしてみたのですが 変わりませんでした。 また、oracle8の環境で試したのですが、こちらではうまくできました。 やはりoracle9iのせいなのでしょうか? p.s 現在はpauseは抜いてます。 |
|
投稿日時: 2005-08-11 10:03
いろいろ試した結果、Windowsのタスクマネージャーで起動した場合のみ起こるようです。
select文のgroup や As 〜の名称を変更したりとやってみたのですが・・・ 何か参考になるものがあれば教えてください。お願いします |
|
投稿日時: 2005-08-11 10:43
時間は掛かりますが、SQLトレースを取得してはいかがでしょうか。
正常(単体で実行)/異常(タスクから実行)の2パターンでトレースを取れば、怪しい箇所が明確になるかと。 後、svrmgrlはOracle9iから廃止されたはずですが、同一サーバ内に8iと9i両方が導入されているのでしょうか? svrmgrlではなく、sqlplusで実行すると結果はどうなりますか? |
|
投稿日時: 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で実行されているということはありませんか? |
