「データソースのロック待ちです」について
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
assist
投稿数: 6
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
いつもお世話になっております。
早速なのですが、バッチ処理でテーブルから一時的なワークファイル
にデータの書き込みを行う時や、ワークファイルからテーブルにデー
タを書き込む時に、「データソースのロック待ちです」というエラーが
発生してバッチ処理が止まってしまうことがあります。
エラー発生は毎回ではなく時々なのですが、発生するたびに処理が止
まってしまうので改善したいと思っています。
どなたか同じ様な現象になった。こうすれば直ったなどご存知の方が
いらっしゃいましたらご教示の程よろしくお願いいたします。
(ワークファイル名はプログラム起動時に都度作成し名前が被らない様
にしています。)
(「タスク特性(データ)」の「トランザクションモード」は「物理」、「トラ
ンザクション開始」は「なし」、「ロック方式」は「なし」、「エラー発生時」
は「A=アボート」に設定しています。)
早速なのですが、バッチ処理でテーブルから一時的なワークファイル
にデータの書き込みを行う時や、ワークファイルからテーブルにデー
タを書き込む時に、「データソースのロック待ちです」というエラーが
発生してバッチ処理が止まってしまうことがあります。
エラー発生は毎回ではなく時々なのですが、発生するたびに処理が止
まってしまうので改善したいと思っています。
どなたか同じ様な現象になった。こうすれば直ったなどご存知の方が
いらっしゃいましたらご教示の程よろしくお願いいたします。
(ワークファイル名はプログラム起動時に都度作成し名前が被らない様
にしています。)
(「タスク特性(データ)」の「トランザクションモード」は「物理」、「トラ
ンザクション開始」は「なし」、「ロック方式」は「なし」、「エラー発生時」
は「A=アボート」に設定しています。)
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
assistさん、
「データソースのロック待ちです」というメッセージは別の言い方を
すれば、「データソースが他で使用中でロックできませんでした」
という意味になります。
考えられる点としては、このタスクがテーブルロックを使用して
いないかとか、あるいは別のタスクがこのタスクのテーブルに
対して共有モードを「R=読込」にしていないかとかの理由です。
これらの設定はそれぞれのタスクのデータビューのメインソース
の「メインソース特性」の「アクセス」と「共有」欄で設定できます。
まずは、「アクセス」と「共有」が何を意味するかをマニュアルで
一読されたほうがいいと思います。
「データソースのロック待ちです」というメッセージは別の言い方を
すれば、「データソースが他で使用中でロックできませんでした」
という意味になります。
考えられる点としては、このタスクがテーブルロックを使用して
いないかとか、あるいは別のタスクがこのタスクのテーブルに
対して共有モードを「R=読込」にしていないかとかの理由です。
これらの設定はそれぞれのタスクのデータビューのメインソース
の「メインソース特性」の「アクセス」と「共有」欄で設定できます。
まずは、「アクセス」と「共有」が何を意味するかをマニュアルで
一読されたほうがいいと思います。
投票数:0
平均点:0.00
mizuno
投稿数: 58
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
DBMSはPervasiveでしょうか?
処理の最初でエラーになるということであれば、一時的なワークファイルの物理パスが
間違っていないでしょうか?
INIの「GeneralErrorLog」にファイルパスをいれるとエラーログを出力するように
なるので確認してみてください。
処理の最初でエラーになるということであれば、一時的なワークファイルの物理パスが
間違っていないでしょうか?
INIの「GeneralErrorLog」にファイルパスをいれるとエラーログを出力するように
なるので確認してみてください。
投票数:0
平均点:0.00
assist
投稿数: 6
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
早速のご回答ありがとうございます。
Tandaさん
ご指摘いただきましたように対象のテーブルを他のタスクでも使用し
ていますが、すべての箇所で「アクセス」「共有」共に「W=書出」と設定し
ています。
mizunoさん
使用していますDBMSはPervasiveになります。
ご指摘いただいたエラーログについては既に出力しており、ログ上記
録されていますワークファイルパスは正しいものであることを確認し
ています。
Tandaさん
ご指摘いただきましたように対象のテーブルを他のタスクでも使用し
ていますが、すべての箇所で「アクセス」「共有」共に「W=書出」と設定し
ています。
mizunoさん
使用していますDBMSはPervasiveになります。
ご指摘いただいたエラーログについては既に出力しており、ログ上記
録されていますワークファイルパスは正しいものであることを確認し
ています。
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
assistさん、
両方が「W=書出」になっていると、複数のタスクが同じテーブルの
同じレコードを掴んだ場合に、片方がレコードをロックしてしまいます。
これを避けるには、データを転写するときに読込側のデータソース
の「アクセス」を「R=読込」とし、書込側のデータソースの「アクセス」
を「W=書出」とします。
「R=読込」と設定したほうのデータソースはレコードをロックしません
ので、該当の現象が解消されます。
この機能はMagic V4の時(26年前)からの機能をずっと継承しています。
両方が「W=書出」になっていると、複数のタスクが同じテーブルの
同じレコードを掴んだ場合に、片方がレコードをロックしてしまいます。
これを避けるには、データを転写するときに読込側のデータソース
の「アクセス」を「R=読込」とし、書込側のデータソースの「アクセス」
を「W=書出」とします。
「R=読込」と設定したほうのデータソースはレコードをロックしません
ので、該当の現象が解消されます。
この機能はMagic V4の時(26年前)からの機能をずっと継承しています。
投票数:0
平均点:0.00
mizuno
投稿数: 58
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
エラーログにワークファイルのパスが出力されているということはロック待ちになっているのは書込みをおこなっている一時ファイルで確定ということでしょうか?
Tandaさんがおっしゃっているように読込側のファイルではないということでよいでしょうか?
根本的な解決ではないですが、手元で現象が再現するということであれば、一時ファイルの
DBMSをMemmoryに変更してみて現象発生するか確認してみてはいかがでしょう。
Tandaさんがおっしゃっているように読込側のファイルではないということでよいでしょうか?
根本的な解決ではないですが、手元で現象が再現するということであれば、一時ファイルの
DBMSをMemmoryに変更してみて現象発生するか確認してみてはいかがでしょう。
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
mizunoさん、
読込側のファイルのアクセスが「W=書込」になっていても、レコードを
編集しようとしない限り、ロックには入らないはずです。
読込側のファイルのアクセスが「W=書込」になっていても、レコードを
編集しようとしない限り、ロックには入らないはずです。
投票数:0
平均点:0.00
mizuno
投稿数: 58
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
バッチタスクの場合、アクセスが「W=書込」であればレコードの編集をしようとしていなくてもロックが
かかると思っていましたが・・・
今回は「ロック方式」は「なし」としているんですね。
バッチは極力、トランザクションはタスク前開始でロックは即時としており、ロックなしで設定した
ことがなかったので知りませんでした。
かかると思っていましたが・・・
今回は「ロック方式」は「なし」としているんですね。
バッチは極力、トランザクションはタスク前開始でロックは即時としており、ロックなしで設定した
ことがなかったので知りませんでした。
投票数:0
平均点:0.00