- ベストアンサー
Oracle Database 11gのトランザクション処理についての質問
- Oracle Database 11gにおけるトランザクション処理について質問です。UPDATE文の処理過程やコミット前の障害時のデータ復元について知りたいです。
- Oracle Database 11gのトランザクション処理に関する質問です。データベースのACID特性の一貫性とトランザクションの一貫性について教えていただきたいです。
- Oracle Database 11gでUPDATA文を発行した後、プロンプトが返ってきますが、これは信頼できる情報なのでしょうか。また、トランザクション中の障害時に戻れるのはコミット前の状態のみなのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>UPDATA文を発行し、プロンプトが返ってくるが、 >これは嘘になりえるっていうことでしょうか? 嘘ではありません。 そのセッションが存在している限り、また、そのセッションがロールバックしない限りは、そのセッション上は本当の事だからです。 トランザクションの一貫性とは、複数存在するセッションの1つ1つで、トランザクションの開始から終了までの間に実行されたDMLに対する値を保証する。という事です。 また、コミットがされていない状態で障害が起きた場合ですが、コミットされてない(トランザクションが終了していない)ので、コミット前にしか戻れません。 これは、障害が発生した瞬間にセッションが途切れてしまう(トランザクションが異常終了してしまう)為です。
その他の回答 (2)
- nora1962
- ベストアンサー率60% (431/717)
付け加えると > この時、REDOログファイルにはまだ書き込まれていない。 ここはあまり正確ではありません。たしかにUPDATEコマンド終了のタイミングでは即時にログファイルに書き込みにはいきませんが、一定以上の時間がたったり、ログバッファの使用状況などの条件によってはコミット以前でもログファイルに書き込みが発生します。 インスタンスリカバリ時には、これらのログの内容も含めてロールフォーワードされ、そののちにUNDO情報を使って未コミットのトランザクションがロールバックされます。
- nora1962
- ベストアンサー率60% (431/717)
はい、ACID特性とはトランザクションの持つべき性質です。 http://ja.wikipedia.org/wiki/ACID_%28%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E7%A7%91%E5%AD%A6%29 ACIDの「C=一貫性」は、トランザクション処理が不整合を起こさないことを保証するものです。 トランザクションは「A=原子性」を持ちますから、トランザクション単位にオール・オア・ナッシングです。 プロンプトが返ってきても、COMMITしない限りはROLLBACKする可能性がある以上、障害が発生すれば更新内容は反映されません。 「嘘になりうる」のではなく「COMITTしなければ不確定」なだけです。
お礼
ありがとうございました!