C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: トランザクションを別プロセスからRollbackする方法


(過去ログ 92 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■54951 / inTopicNo.1)  トランザクションを別プロセスからRollbackする方法
  
□投稿者/ ミラ (14回)-(2010/11/11(Thu) 12:25:34)

分類:[ASP.NET (VB)] 

タイトルの通り
あるプロセスで作られたトランザクションでInserIntoを行いCommit待ちになっているデーターを
別のプロセスからDelete又はRollbackしたいのですが何か方法はあるでしょうか?

データーベースはDB2かSqlServerを考えています

現状DB2にてテスト
トランザクション分離レベルを変更することで別プロセスから見ることはできるようになったのですが
変更を行った場合は元のプロセスがCommitを行わないと先に進まない状態です

IsolationLevel.Chaosを使ってみたのですがトランザクションが有効じゃないみたいで
Commitする前にデーターが反映してしまいます
引用返信 編集キー/
■54952 / inTopicNo.2)  Re[1]: トランザクションを別プロセスからRollbackする方法
□投稿者/ 囚人 (557回)-(2010/11/11(Thu) 12:52:34)
単純に疑問ですけど、何故そんな事したいんでしょうか?
引用返信 編集キー/
■54960 / inTopicNo.3)  Re[2]: トランザクションを別プロセスからRollbackする方法
□投稿者/ ミラ (15回)-(2010/11/11(Thu) 15:13:03)
No54952 (囚人 さん) に返信
> 単純に疑問ですけど、何故そんな事したいんでしょうか?

うまく説明できないですが・・・一番問題なっているのはブラウザの終了判定がサーバー側で正確にできないところにあります

この解決は難しそうなので終了時に一時データーを削除することはあきらめてトランザクションでデーターを作ることにしました

トランザクションを格納したセッションがタイムアウトすればRollbackされる仕組みを作ったので
一時データーの残骸?(不正な終了等で発生する削除し忘れたデーター)が
残ることがないので使い勝手がよいからです
ただし,セッションがタイムアウトするまではデーターが存在し続けることが問題となっています
(タイムアウト時間を短くすることで一応解決はしますがサーバーの負担が気になります)

なので別プロセスで残骸を見つけた時に削除かRollback相当の処理ができればと思っているのです

一連の流れで別のアイデアがあればそれでも構わないのですがいい方法ありますか?
引用返信 編集キー/
■54961 / inTopicNo.4)  Re[1]: トランザクションを別プロセスからRollbackする方法
□投稿者/ shu (170回)-(2010/11/11(Thu) 15:15:48)
No54951 (ミラ さん) に返信

DBセッションを2つのプロセスで共有出来ないと厳しいんじゃないかな。

あるプロセス => ローカルファイルへの書込み
別のプロセス => ローカルファイルの読み込み,Tran開始, DB書込み, Commit, Rollback

では駄目ですか?

引用返信 編集キー/
■54962 / inTopicNo.5)  Re[3]: トランザクションを別プロセスからRollbackする方法
□投稿者/ 囚人 (558回)-(2010/11/11(Thu) 15:24:47)
仰ってることがあまり理解できていないですが、トランザクションにすべき単位がおかしいのでは?
コミット待ちになってるデータに残骸データとかあるかな?
ブラウザが終了していようが何してようが、そののままコミットしたら良い気がしますが。

一時データ? それをトランザクションで作成? トランザクションを格納したセッション? ってのが何かいまいちわかんないですね。

何かわかりませんが、設計がおかしいような気が・・・。

引用返信 編集キー/
■54963 / inTopicNo.6)  Re[3]: トランザクションを別プロセスからRollbackする方法
□投稿者/ shu (171回)-(2010/11/11(Thu) 15:43:48)
No54960 (ミラ さん) に返信

> うまく説明できないですが・・・一番問題なっているのはブラウザの終了判定がサーバー側で正確にできないところにあります
なんでサーバがクライアントの終了状態を把握しなければならないのでしょう?
サーバがDBへの登録をするということはクライアントから確定した情報が来たからではないのですか?
未確定のデータを扱うならセッション変数にでもいれておけばいいのでは?
引用返信 編集キー/
■54964 / inTopicNo.7)  Re[4]: トランザクションを別プロセスからRollbackする方法
□投稿者/ ミラ (16回)-(2010/11/11(Thu) 15:56:24)
> コミット待ちになってるデータに残骸データとかあるかな?

ここで書いた一時データーの残骸とはブラウザの終了判定が正確にできずに削除が出来なかったデーターのことです
ややこしくてすみません

> ブラウザが終了していようが何してようが、そののままコミットしたら良い気がしますが。

うまく伝えられるといいのですが・・・
一時データーの作成工程で問題となっているのではなくて削除工程で問題となっています
ブラウザの終了をサーバーで認識して削除できるのであればそれだけで解決できます
しかし,それができないので別の方法としてトランザクションをセッションに保存して
セッションのタイムアウトでRollbackを行おうと思っています
引用返信 編集キー/
■54965 / inTopicNo.8)  Re[4]: トランザクションを別プロセスからRollbackする方法
□投稿者/ ミラ (17回)-(2010/11/11(Thu) 16:01:32)
> なんでサーバがクライアントの終了状態を把握しなければならないのでしょう?
> サーバがDBへの登録をするということはクライアントから確定した情報が来たからではないのですか?
> 未確定のデータを扱うならセッション変数にでもいれておけばいいのでは?

プログラムが開かれている間DBにその情報が書き込まれていなければならないシステムがすで存在していて
それをブラウザで作り変えなければいけない為です

平行運用されるのでこのDBそのものの設計を見直すことはできません
引用返信 編集キー/
■54966 / inTopicNo.9)  Re[5]: トランザクションを別プロセスからRollbackする方法
□投稿者/ 囚人 (559回)-(2010/11/11(Thu) 16:28:38)
あぁなるほど。

セッション維持中は、ずっとコミットしないでトランザクション中にしておくってことですね。むちゃくちゃトリッキーですね。セッションタイムアウトより前にとトランザクションタイムアウトになりそう。

ブラウザ終了時というタイミングはわからないので、セッションタイムアウト時ってのは良いと思います。

なので、掃除用のジョブ(サービス、デーモン)を常に起動しておいて、しばらくアクセスされていない一時データはそのジョブが削除するようにする、という感じで設計してみてはどうでしょう。「しばらくアクセスされていない」はセッションのタイムアウトと時間を合わせておいて。

まぁ要するにセッションデータを削除するのと同じような仕組みですが。

引用返信 編集キー/
■54967 / inTopicNo.10)  Re[5]: トランザクションを別プロセスからRollbackする方法
□投稿者/ shu (172回)-(2010/11/11(Thu) 16:30:41)
No54965 (ミラ さん) に返信
>>なんでサーバがクライアントの終了状態を把握しなければならないのでしょう?
>>サーバがDBへの登録をするということはクライアントから確定した情報が来たからではないのですか?
>>未確定のデータを扱うならセッション変数にでもいれておけばいいのでは?
>
> プログラムが開かれている間DBにその情報が書き込まれていなければならないシステムがすで存在していて
> それをブラウザで作り変えなければいけない為です
>
> 平行運用されるのでこのDBそのものの設計を見直すことはできません
一時データはコミットされていないのだから既存システムには関係ないのでは?
DBの変更をするのではなくaspxの処理を変更するだけでよいのではないでしょうか。

引用返信 編集キー/
■55001 / inTopicNo.11)  Re[6]: トランザクションを別プロセスからRollbackする方法
□投稿者/ 甕星 (20回)-(2010/11/13(Sat) 08:47:41)
http://msdn.microsoft.com/ja-jp/library/ms954625.aspx

ASP.NETのミドルウェアとして、Enterprise Servicesと言う分散トランザクション管理を行うための機能が提供されています。

引用返信 編集キー/
■55002 / inTopicNo.12)  Re[7]: トランザクションを別プロセスからRollbackする方法
□投稿者/ なちゃ (474回)-(2010/11/13(Sat) 11:16:18)
そもそもトランザクション中のままにしとくってやり方がかなり疑問ですが、それはおいとくとして。
DBによっては、DBとのセッションやトランザクションを別プロセスからの接続に引き継ぐ機能があったと思います。
SQL Sever や DB2 には無かったですかね?

分散トランザクションは目的や使用方法からはちょっとマッチしない気がします。

引用返信 編集キー/
■55003 / inTopicNo.13)  Re[8]: トランザクションを別プロセスからRollbackする方法
□投稿者/ なちゃ (475回)-(2010/11/13(Sat) 11:20:45)
No55002 (なちゃ さん) に返信
> DBによっては、DBとのセッションやトランザクションを別プロセスからの接続に引き継ぐ機能があったと思います。

と書きましたが、これもゴミトランザクションの掃除目的ではちょっと無理がある気もしますね。
やっぱりトランザクションを保留にしとくというやり方を変えた方が早い気がします。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -