• ベストアンサー

完全リカバリのUNDOデータの由来、扱いについて教

完全リカバリのUNDOデータの由来、扱いについて教えて下さい。 完全リカバリの大まかな流れとして、 1.リストア 2.アーカイブ、オンラインREDOログでロールフォワード 3.UNDOでロールバック 4.完了 となるかと思いますが、 UNDOデータはどこから持ってころれるのでしょうか? もしUNDO表領域から持ってくるのであれば、ロールフォワード分をロールバック出来るだけのUNDOが残ってる保証はないかもしれない、と疑問を持ちました。 (現実的にはまずないのかもしれませんが) となると、完全リカバリが失敗するケースもあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • onosuke
  • ベストアンサー率67% (310/456)
回答No.6

No.4の方の回答を補足すると、 > 2.アーカイブ、オンラインREDOログでロールフォワード するときに、REDOログに記録されたトランザクションが再実行されます。  「更新トランザクションが再実行される」=「更新に伴うUNDOデータが再生成される」 となるので、「2.」が完了した時点で、  「ロールバックに必要なUNDOデータはREDOログを元に再生成済み」 の状態になっています。 従って > 3.UNDOでロールバック は、「2.」で再生成済みのUNDOデータを使ってロールバックすることになります。 余談ですが、この挙動はOracleだけの話であり、他のDBMSソフトウェアでは また異なる動きをしているので注意してください。

segirl
質問者

お礼

回答ありがとうございました。 なるほど!そういう仕組みだったんですね。 だからREDOしかいらないのかー。

その他の回答 (5)

  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.5

アーカイブREDOログとオンラインREDOログが生き残っていればOKです。 11gのドキュメントが見つからなかったので10gのドキュメントです。 バックアップおよびリカバリ基礎 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/backup.102/B19193-02.pdf 22ページと23ページを参照してください。 >UNDOセグメント >通常、データ・ファイル内のデータを更新すると、そのデータの変更前のイメージがUNDO >セグメントに書き込まれます。トランザクションがロールバックされると、このUNDO 情報を >使用して、元のデータ・ファイルの内容がリストアされます。 > >リカバリの処理では、UNDO 情報は、データ・ファイルのすべての変更がREDOログから >データ・ファイルに適用された直後に、コミットされていないトランザクションの影響を元に >戻すために使用されます。データベースは、UNDO が適用される前にオープンされます。 >バックアップおよびリカバリ処理の中では、UNDO セグメントに関与する必要も、これを直接 >管理する必要もありません。 おそらく大規模の更新処理中に障害が発生した場合などを想定しているとは思いますが、 アーカイブREDOログとオンラインREDOログさえ残っていればコミット済みのデータは保証されます。そのためのRedoログです。 疑問点があるならバックアップ・リカバリは納得がいくまで試しておいた方がよいですよ。

segirl
質問者

お礼

回答ありがとうございました。 >アーカイブREDOログとオンラインREDOログさえ残っていればコミット済みのデータは保証されます。そのためのRedoログです。 それは何となくわかってはいたのですが、なぜ保証できるのかが飲み込めてませんでした。 UNDOを適用する際、そのUNDO表領域も障害が発生していたら。。。とか。 マニュアルや参考書からは、UNDOにデータ残ってれば~みたいに読めてしまいまして。。^^;

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.4

Oracleの場合、UNDOの情報もREDOログに書き込むからです。 なので、完全リカバリの場合、UNDO情報を復旧し、そこからCOMMITしていない分のロールバックが可能です。

segirl
質問者

お礼

回答ありがとうございました。 No.6さんの補足がないとちょっと難しかったです^^; でも勉強になりました。 ありがとうございました。

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.3

こんにちわ。 > ロールバック出来るだけのUNDOが残ってる保証はないかもしれない、と疑問を持ちました。 UNDO 情報は、Commit/Rollback されていないトランザクションのデータは 上書きされない筈です。

segirl
質問者

お礼

回答ありがとうございました。 その一言でハッとしました。 ありがとうございます。

回答No.2

>ただ、ちょっと回答の意味がわからないです 私にもわかりませんが、システム管理者から見た場合と、オラクル単体で考える場合と、見方が違います。特に規模が大きくなると、システム=オラクルなんて、同等に扱われます(ストレージ系のクラスターを含むので)。 オラクルはものすごくスケラビリティーがあり、いろんなレベルのバックアップも用意されていると言うことです。 それよりも私は、この質問の趣旨がわかりません。単にマニュアルに書いて在るので読めば分かるレベルですよ。ネットで検索してもでてきますが・・・ http://download.oracle.com/docs/cd/E16338_01/server.112/b56301/undo002.htm http://docs.oracle.com/cd/E16338_01/server.112/b56306/logical.htm など、オンラインマニュアルにでている事では違うという事でしょうか? 分からない箇所を具体的に指摘してオラクル専門掲示板で質問してください。

segirl
質問者

お礼

回答ありがとうございましました。 1.リカバリからロールフォワード→ロールバックする際、UNDO データが使用される 2.でもUNDOデータは、保存期間の保証はRETENTION GUARANTEEが有効の場合のみだったはず 3.ということはトランザクション中のUNDOデータは無い可能性があるのではないか(今となってはここが間違い) 4.つまり、完全リカバリに失敗する可能性がある という思考回路でした。 質問した背景としては、OracleMasterの試験勉強中に発生した疑問を質問させていただいた次第です。

noname#158832
noname#158832
回答No.1

リカバリにはメーカーのやり方があるだけです。 難しいプロセスは考えても仕方の無い事でしょう。 貴方が開発してシステムを組むなら別ですけど! 基本的にはOSの1部分を必要とします、それとBIOSメーカーとの打ち合わせが必要かな! UNDOと言うよりはイメージでしょうか?

segirl
質問者

お礼

回答ありがとうございます。 ただ、ちょっと回答の意味がわからないです^^; もし私の間違いであれば失礼致しますが、OSのリカバリではなく、Oracleのリカバリの話なのですが。。。

関連するQ&A