ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

DBエラーについて

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
depth:
0
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 | 投稿日時 2008-4-21 15:45
AlphaHoshino  常連   投稿数: 51
みなさま、こんにちは。お世話になります。

さっそくですが、
『行ハンドルは削除された行、または削除の対象としてマークされている行を参照しました。』
といったDBエラーが出る原因・対処方法をご存知の方いらっしゃいますでしょうか?

ある更新処理で、他の端末が更新中の場合は処理が終了するまで1つのテーブルをループし見続ける作りとなっており、このループ処理部分でタイミングによっては上記エラーが出ます。

更新処理実行前に、ループ処理で使用するテーブルに使用中データを書き込み、更新処理実行後、使用中データを削除し終了します。
ループ処理は自分以外のデータがある場合、更新処理へは進まず、無くなるまでチェックを繰り返す作りとなっています。
更新処理を1台ずつ行いたいため、順番待ちをさせている状態です。

MAGIC:Ver.10.1 SP2a
データベース:SQL Server2005

他に順番待ちをさせる方法はあるのでしょうか?
ご存知の方いらっしゃいましたら、教えてください。
よろしくお願いします。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008-4-21 21:34
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
トランザクションモードとかキャッシュ範囲はどうなっていますか?
そのあたりがあやしくないですか
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008-4-22 10:15
hiro  長老 居住地: 三重  投稿数: 188
こんにちは AlphaHoshinoさん
更新時の排他ロックについてですが
ロック用のファイルにレコード排他を掛けて
相手を待ち状態にする方法はどうでしょうか?

1.ロック用のDB特性をアクセス=書込、共有=書込で設定
  します。
2.タスクのロック方式を即時に設定します。
3.トラザクションのタイミングはタスク前の前で全体を
  トラザクション配下にします。
  トランザクションモードは物理にします。
4.更新バッチを処理する一番上のタスクでロック用の
  ファイルからレコードを読み込みます。
  レコードはダミーで1件作っておきます。

レコード排他で更新バッチ終了まで待ち状態なると思います
但し、ステータス行にレコードロック解除待ちの
メッセージが出る場合があります。
MS SQL2005ではできました。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-4-22 13:14 | 最終変更
EijiNagai  常連   投稿数: 65
DBエラーの直接の回答ではありませんが、更新の待ち合わせにはlock関数を使う方法もあります。

ただし、共有アクセスできる場所にロックファイルを置かないといけません。

DBを使う場合、ポーリング方法はDBMSへの負荷も気になりますが、それは大丈夫でしょうか?
投票数:0 平均点:0.00
depth:
2
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-4-22 15:09
hiro  長老 居住地: 三重  投稿数: 188
こんにちは 
社内システムでスタンドアロンかつISAMでの開発しか
経験がないのでポーリングというものを知りませんでした。
勉強になりました。
ついでで申し訳ないですが、質問です。
ポーリングの問題は、更新している一瞬のロックでも問題なる
のでしょうか?
クライアントの台数にもよるかとは思いますが。
教えて頂ければ幸いです。
投票数:0 平均点:0.00
depth:
3
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-4-23 19:01 | 最終変更
EijiNagai  常連   投稿数: 65
hiro さん、こんにちは。

ポーリング方式というのはある事象をがおきているかどうかを繰り返しアクセスしてフラグを監視する方式を指しています。

よって、DBMS用語ではありません。すみません。

ちなみに、これに対比する方式は「割り込み方式」です。

で、基本的にある種の連続アクセスですから、無駄に資源を使うことになります。

この処理が全体の処理のどのくらいを占めるかにもよりますが、常時発生すれば、ネットワーク、DBMSのCPUにいらぬ負荷がかかることになります。

lock関数のネットワーク負荷はわかりませんが、DBMSの利用よりは良いのではないかと思っています。(タイムアウトも設定できるし)
投票数:1 平均点:10.00
depth:
4
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-4-24 9:29
hiro  長老 居住地: 三重  投稿数: 188
こんにちは EijiNagaiさん
レスありがとうございました。
大変参考になりました。

MAGICとしての推奨ロック方式はやはり
LOCK関数でしょうね。その為の関数でしょうから。

でわ
投票数:0 平均点:0.00
depth:
5
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-4-24 9:57
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
LOCK関数はネットワークに対応していますか?
1台の端末内でロックをかけるものではないですか?
違っていたらすみません
投票数:0 平均点:0.00

なし Re: DBエラーについて

msg# 1.3.1.1.1.1.1
depth:
6
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-4-24 15:06
hiro  長老 居住地: 三重  投稿数: 188
こんにちは ISHIJIMAさん

>LOCK関数はネットワークに対応していますか?
>1台の端末内でロックをかけるものではないですか?
>違っていたらすみません

実際試したことはないですが、V10の動作環境→
マルチユーザ設定にリソースロック用のファイルを設定するところがあります。
これのことだと思っていますが、違っていたらどなたか訂正
お願いします。
投票数:0 平均点:0.00

なし Re: DBエラーについて

msg# 1.3.1.1.1.1.1.1
depth:
7
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008-4-24 15:23
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
大変申し訳ありませんでした。
私の勉強不足です。
こんな便利な関数があるなんていまさらですが
ありがとうございました。
投票数:0 平均点:0.00

なし Re: DBエラーについて

msg# 1.3.1.1.1.1.1.1.1
depth:
8
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008-4-24 16:28
HAYATO  一人前 居住地: 大阪市淀川区西中島5-9-2  投稿数: 90
こんにちは

便利はいいのですが、チト、レスポンスが悪いのです。
結果が返ってくるのに、ひと呼吸置くようなイメージ
でしょうか


HAYATO

--
HAYATO@アインシュタイン設計社
-----------------------------
「MAGICサルベージサービス」
-----------------------------http://www.dbMAGIC.BIZ

投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008-4-23 9:15
AlphaHoshino  常連   投稿数: 51
みなさま、こんにちは。
貴重なご意見ありがとうございます。
知らなかった点が多々ありましたので、
社内でいろいろ試してみようと思います。
(社内ではなかなか投稿したエラーが出ないのですが。。。)
またお気づきの点等ありましたら、よろしくお願います。
ありがとうございました。
投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約