- - PR -
【データベースとファイル操作を1トランザクションでまとめる方法】
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-23 16:35
通常、データベースのトランザクションとファイル操作を一括りにしてロールバック等はできませんが、これを可能にする方法はありますでしょうか?
ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。 よろしくお願いいたします。 | ||||
|
投稿日時: 2006-10-23 16:43
えっと・・ちょっと理解出来ないので確認したいのですが「ファイル操作のロールバック」というのはどういうファイル操作を対象にしていますか?ファイルの作成/削除という意味でしょうか?ファイルの読み書きですか? #データベースに入れられないタイプの処理だとは思いますが、想像力が欠如してるので(汗 | ||||
|
投稿日時: 2006-10-23 16:51
1. トランザクション開始
2. DB処理(仮にレコードINSERTとする) 3. ファイル操作(仮にファイル作成とする) 4. コミット処理 こんな感じをイメージしてますか? 3.で例外発生したら4.がロールバック処理になります。 | ||||
|
投稿日時: 2006-10-23 16:51
プラットホームはなんですか?
視野には入っているかも知れませんが、.NET Framework のトランザクションでは今のところファイルのロールバックはサポートされていません。 | ||||
|
投稿日時: 2006-10-23 17:01
試してませんが
SQL2005のCLR-SQLを使ってファイル操作の部分を作り、 入れ子のトランザクションで実行するとロールバック してくれるかも? | ||||
|
投稿日時: 2006-10-23 17:09
ファイル操作って、テキストファイルの事ですかね?
Excelファイルだったら、ロールバックの場合に ファイルセーブをしなきゃOKなんですけどね・・・ | ||||
|
投稿日時: 2006-10-23 17:49
してくれるわけないだろ。拡張ストアドプロシージャ(xp)でさえ、トランザクション外なんだから。 | ||||
|
投稿日時: 2006-10-23 18:17
現時点では、標準の機能にはありません。 実装での工夫で逃げるしかないでしょう。 ・データベースにバイナリを書き込んで、それからファイルを作る ・書き込み失敗時に備えてファイルをコピーしておく ・別の名前で書き込む などです。 このへんのことは、 赤間信幸氏著 .NETエンタープライズWebアプリケーション開発技術大全Vol.5 トランザクション設計編 に少し説明されています。 自力でそれっぽいものを作ることは可能ですが、あまりにも大変なのでやめておくことをお勧めします。 どれくらい大変かというと、データベースシステムを1こ作るほど未満、に近いくらいでしょうか。 需要があっても実現されていないのは、あらゆる状況に対応するのが厄介だからです。 Windowsの場合はファイルシステムの進歩待ちなんじゃないかと思います。 Windows以外でできるかというと、そういう機能はいまのところ聞いたことはありません。 ある、という情報をお持ちの方がいらっしゃいましたら、教えていただけるとうれしいです。 やるとなると、ACIDを異なるリソース間で実現しなければなりません。 コミット済みとされたものは書き込みに失敗しても復旧できるように、ロールフォワードの実装が必要になります。 無理にでもやるなら、以下の方法でできる可能性があります。 これらはトランザクションのための窓口を用意しているだけのものであって、ファイルのACIDを実現するのは自力で作ることになります。 ・.NET Framework1.1では、COM+モジュールを自作 ただし、とても大変な作業ですし、COM+を使うと、インストールや管理にも手間をかけさせてしまいます。 ・.NET Framework2.0では、リソースマネージャの実装 http://msdn2.microsoft.com/ja-jp/library/ms229975.aspx 私はデータベースの2PCしかやったことはありませんので定かな情報ではないことをご勘弁ください。 _________________ たつごろー codeseek こみゅぷらす |