• 締切済み

【データベースとファイル操作を1トランザクションでまとめる方法】

通常、データベースのトランザクションとファイル操作を一括りにしてロールバック等はできませんが、これを可能にする方法はありますでしょうか? ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。 よろしくお願いいたします。

みんなの回答

回答No.1

まず、通常はファイル操作について、ロールバックを行うような仕組み自体ないと思います。 (あ。NTFSはそういう仕組み持ってるか…でもそのトランザクションをプログラムから操作は出来ないと思います) なので、まず、ファイル捜査を「元に戻す」所から、自分で実装しなければいけないのでは? で、それができたら、DBのトランザクションとそのファイル操作のトランザクションが連動するようにクラスなりを作成すればいいと思います。

capitarize
質問者

補足

う~む。それだとクラス内でRUNTIMEエラーが起きた場合や電源断に対応できないのでは。。。

関連するQ&A

  • オフライン中のトランザクションについて

    表領域をオフラインにした場合、オフライン前に開始されたトランザクションは有効ですが、オフラインのまま、コミット、または、ロールバックして、表領域をオンラインにしても、整合がとれるのはなぜなのでしょうか。 コミットするか、ロールバックするかの情報はどこに保持してるのか疑問です。 (オフラインにしてから、ファイルをリネームし、 トランザクションをロールバックして、 ログをアーカイブし、DB再起動後に、ファイル名を戻して、 オンラインにすると、ちゃんとロールバックされています。 同じ操作で、コミットするとちゃんとコミットされています。 知っている方には当然なのでしょうが、私にとっては、不思議です) 詳しい方がみえましたらご教授お願いいたします。

  • ActivePerl+SQLServerでトランザクション制御をしたいのですが。。。

    ActivePerl(5.6.1)で、SQLServer2000に接続してデータ更新を行う際に、トランザクションを制御して、コミット/ロールバックを使いたいと思っています。 データベースへの接続はODBCです。 まずは auto commit の設定をオフにしよう・・・と思ってやってみたのですが、これが成功しません。 何かよい方法はないでしょうか?よろしくお願いします。 【環境】WinNT,IIS

    • ベストアンサー
    • Perl
  • リンクサーバー間のトランザクション

    SQL Server2008のトランザクションについてお伺いします。 リンクサーバーのSQL Server2008へデータを登録したのですが、 ロールバックしても元に戻りません。 リンクサーバーのSQL Server2008へのトランザクションは 皆さまどのようにされているのでしょうか SQL Server2008のトランザクションについてお伺いします。 リンクサーバーのSQL Server2008へデータを登録したのですが、 ロールバックしても元に戻りません。 リンクサーバーのSQL Server2008へのトランザクションは 皆さまどのようにされているのでしょうか

  • ActiveX DLLでのオラクルのトランザクション

    VB6とOracle9iのOO4Oにてシステムを構築しておりますが、一つ解らないことがありましたので、どなたかご教授願います。 あるPG(通常のEXEです)よりActiveX DLLを呼び出してOracleの表へデータを挿入する処理があります。呼び出し元となる通常のEXEはまずOracleの接続処理を記述しています。正常に接続が完了したならトランザクションを開始し、表のDeleteを実行します。その後ActiveX DLLを呼び出して表のInsertを実行しています。再び通常のEXEに制御が戻り、トランザクションの完了(COMMIT)または破棄(ROLLBACK)を行います。しかし、最後のトランザクションのCOMMIT(ROLLBACK)を行うと『コッミト(ロールバック)時にアクティブなトランザクションがありません』というエラーが発生してしまいます。正しくBegin Transactionを実行しているのに、これはどういうこと何のでしょうか。ご存知の方がいらっしゃましたら教えてください。

  • トランザクションの考え方の疑問点

     トランザクションについてネットでいろいろ調べたのですが、 ピンと来ていないので下記の意味合いで合っているのか、 教えて頂けないでしょうか? ・トランザクションは、データベースに対してかかる (テーブル単位にかかるわけではない) ・SQLでINSERT、UPDATE、DELETEのようにテーブルに更新処理を 走らせた時、そのテーブルがロックされる ・コミットが終わるまではロックはかかったまま ・失敗すればロールバックでデータを元に戻せる  …こんな風に考えていますが、 ここまでは合っているでしょうか? また、下記からが疑問なんですが… ・ロックの種類は、SQLの書き方で決められるみたいですが、 特に指定しなかったらテーブルロックになるものなのでしょうか? ・SELECT中は、ロックがかかるものなのでしょうか?

  • トランザクション処理について

    トランザクション処理について、ちょっと疑問に思うことがあります。 トランザクション処理とは、クライアントの異常終了などで、中途半端な状態で終わったデータはロールバックされ、元の状態にもどされることですよね?では、サーバが突然フリーズした場合どうなるのでしょうか?トランザクション処理もできないため、中途半端な状態で終わったデータは手動で整合性を合わせる必要があるのでしょうか? かなり、基本的なことを聞いていますが、DBの知識がないためどなたか教えてください。

  • mysqlでCSVインポートでトランザクション管理出来る

    只今、mysqlを使用して開発しております。 行き詰まっておりまして 大変申し訳ありませんが、ご教授の程、よろしくお願いいたします。 要件は以下になります。 ・CSVファイルデータをインポートする。 ・CSVファイルは複数なので、全ての処理が終わった段階でコミット・もしくはロールバックする。 (トランザクション管理が出来ればよいです。) ※LOAD DATA INFILEでトランザクション管理しようとしたのですが LAODのトランザクション管理は5.1系じゃないと出来ないようですので、 出来ませんでした。 mysqlのバージョン :5.0.24

    • ベストアンサー
    • MySQL
  • トランザクションを張って対話型でのコミット・ロール

    トランザクションを張って更新処理を行った後に、 ユーザの「はい」「いいえ」ボタンによって、 トランザクションのコミットとロールバックを切り替えることは可能でしょうか。 処理の流れは以下の様になります。 1.データ更新前の値を取得 2.トランザクションの開始 3.データ更新 4.データ更新前の値とデータ更新後の値を比較して、   差分がある場合は確認メッセージを表示する。 5.確認メッセージで「はい」がクリックされた場合はコミットする。 6.確認メッセージで「いいえ」がクリックされた場合はロールバックする。 実装方法はどのようでも構いません。 どなたかご教授ください。

  • ACCESSでのトランザクション処理

    VB6+ACCESS2000で開発をしております。 VBとACCESSとの接続はADOでおこなっております。 ACCESSはそれほど使ったことがないのでよくわからないのですが、ACCESSでトランザクション処理はできるのでしょうか? ロールバックもコミットも見たところありませんでした。 教えてください。

  • トランザクションとlast_insert_id

    トランザクション中にinsertする予定のテーブル(未コミット)のauto_increment値を取得することはできるのでしょうか。 以下のような処理を期待しているのですが、hoge1テーブルのauto_increment値が取得できずに困っております。last_insert_id に関わらず、hoge1テーブルのauto_increment値が取得できる方法があれば教えてください。 (1) トランザクション開始 (2) $sql=" INSERT INTO hoge1(name) value('あああ'); "; (3) ( ロールバック ) (4) $key=mysql_insert_id(); (5) $sql2=" INSERT INTO hoge2(hoge1_primary,age) value($key,'20歳'); "; (6) ( ロールバック ) (7) コミット (8) トランザクション終了 よろしくお願いします。 環境: php5,mysql5 (InnoDB)

    • ベストアンサー
    • MySQL