[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/11/30(Thu) 14:58
投稿者名:ケタホヨル
Eメール:
URL :
タイトル:
SQL-Server接続時のトランザクションのネストの書き方
いつも参考にさせて頂いております。

ヘルプでも調べたのですが思うような内容が
ありませんでしたのでご質問させて頂きます。

■環境
SQLServer2000 SP4
VB 6.0

■SQLServer接続情報
Provider=SQLOLEDB.1;
Data Source=<サーバー名>;
Initial Catalog=<データベース名>;
User ID=<ユーザー名>;
Password=<パスワード>;

■コネクション
Con1.ConnectionString=接続情報
Con2.ConnectionString=接続情報(Con1と同じ接続情報)
Con1.Open
Con2.Open

■質問内容
VBで開発している中でデータベースの更新を行う時に
トランザクションを開始して更新処理を行っています。
その中でテーブル(AとB)2つの更新を下記の様に行いたいと思っています。
Con1.BeginTran

   Con2.BeginTran
       テーブルBの更新
   Con2.CommitTran

   テーブルAの更新
Con1.Commit

上記のような処理を作成したのですが、Con2をCommitすると
Con1までCommitされました。
そこでトランザクションのネストは可能でしょうか。
BeginTranに番号を振って制御することは可能でしょうか。

長くなりましたが、よろしくお願いします。

投稿時間:2006/11/30(Thu) 23:07
投稿者名:あきら。
Eメール:
URL :
タイトル:
re:SQL-Server接続時のトランザクションのネストの書き方
私は大型汎用機メインで、VBに関しては素人同然で大変に申し訳ありませんが、
更新後のコミットについてはデータの整合性に関する話ですので、
一括にコミットするのかなと思いました。
でないともしも可能だとしても、
データに不整合が生じて大変な事になりませんでしょうか?
質問の意味を取り間違えていましたならごめんなさいです。

投稿時間:2006/12/01(Fri) 00:43
投稿者名:ケタホヨル
Eメール:
URL :
タイトル:
Re: re:SQL-Server接続時のトランザクションのネストの書き方
あきら。さん

ご回答ありがとうございました。

データの整合性を考えるとあまりよくないかもしれないですね。
色々な方法を今模索していまして。
Con1.BeginTran
   (ストアド呼び出し)←ストアド内でBegin〜commit
   テーブルAの更新
Con1.Commit ←これがエラーになる

やはりトランザクションのネストでトランザクションは
あまり良い方法ではないですね。

今後ともよろしくお願いいたします。

投稿時間:2006/12/01(Fri) 08:43
投稿者名:あきら。
Eメール:
URL :
タイトル:
Re^2: re:SQL-Server接続時のトランザクションのネストの書き方
板違いの話題になるかもしれませんが、
大型汎用機(メインフレーム)での特にオンライン系(対話処理)については、
データの整合性を取るための仕組みが用意されていまして、
通常の擬似会話方式の場合、
何も記述しない場合はトランザクション終了時(ユーザーに入力画面が開放された時)に
自動で全てのデータについて一括でコミットされます。
わざとそのようにシステムでしています。
途中結果はABENDの場合、自動でバックアウトされるような仕組みにシステムが標準でなっています。

BATCHと言われる一括処理で旧態依然のファイルの場合は処理結果が残りますが、
(削除する事もJCLというもので可能です。)
途中でABENDさせるようなケースでは、処理結果を破棄するケースが多いです。
データの修正後か、PGMの修正後にデータを戻してRE-RUNが普通です。

また、BATCHの場合でもDBの全件なめて更新のようなケースでは、
途中でチェックポイントを設けてコミットします。
更新ログ(ジャーナル)を引きずると、同時に走っている他の処理に支障が出るからです。
また、リソースも大変に消費します。

理由はデータの整合性が取れないと実運用面で困るからです。
レガシー環境の世界でのDBMSの普及のバックグラウンドは、
データの共有についての為に必要な事の歴史だったと言っても過言ではありません。

こちらこそ、皆さんの書き込みを参考にさせて頂いています。
これからもどうか宜しくお願い致します。


◆技術的に可能かどうかについては、
他のVBに詳しい方が何か書き込みをして下さるかもしれません。
私も注目してみますね。◆