「Oracle Database10g バックアップおよびリカバリ概要」の版間の差分
ナビゲーションに移動
検索に移動
1行目: | 1行目: | ||
− | ==Oracle Database10g バックアップおよびリカバリ概要== | + | ==[[Oracle Database10g バックアップおよびリカバリ概要]]== |
[[Oracle]] | [[Oracle Database10g]] | | [[Oracle]] | [[Oracle Database10g]] | | ||
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/backup.102/B19193-02/intro.htm#2297 | http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/backup.102/B19193-02/intro.htm#2297 | ||
− | === | + | ===物理[[バックアップ]]と論理[[バックアップ]]=== |
− | * | + | *物理[[バックアップ]]は、安全な[[バックアップ]]およびリカバリ計画の基礎 |
− | * | + | *論理[[バックアップ]]は、様々な状況で物理[[バックアップ]]を補足するために役立ちますが、物理[[バックアップ]]がなければデータ消失に十分に対処することはできない。 |
− | ==== | + | ====物理[[バックアップ]]==== |
− | * | + | *データベースの保存およびリカバリに使用する物理ファイルを[[バックアップ]]したもの |
− | *データ・ファイル、制御ファイル、アーカイブ | + | *データ・ファイル、制御ファイル、アーカイブ [[R]]EDOログなどが対象 |
− | *他の場所(ディスクや、テープなどのオフラインの記憶域) | + | *他の場所(ディスクや、テープなどのオフラインの記憶域)にデータベース情報を保存するファイルのコピーは、すべて物理[[バックアップ]] |
− | ==== | + | ====論理[[バックアップ]]==== |
− | * | + | *[[Oracle]]エクスポート・ユーティリティを使用してデータベースからエクスポートし、バイナリ・ファイルに格納した論理データ(表、ストアド・プロシージャなど) |
− | * | + | *対応する[[Oracle]]インポート・ユーティリティを使用してデータベースに再インポートできる。 |
− | === | + | ===[[バックアップ]]からのリカバリが必要なエラーおよび障害=== |
*通常、DBAが介入してメディア・リカバリを行う必要があるのは、メディア障害およびユーザー・エラーの2つの問題が発生した場合のみ | *通常、DBAが介入してメディア・リカバリを行う必要があるのは、メディア障害およびユーザー・エラーの2つの問題が発生した場合のみ | ||
====ユーザー・エラーの理解==== | ====ユーザー・エラーの理解==== | ||
− | * | + | *アプリケーション・[[ロジック]]のエラーまたは誤操作のため、データベースのデータが誤って変更または削除された場合に発生 |
*ユーザー・エラーによるデータ消失とは、誤操作によって重要な表を削除したり、表の内容を削除または変更することを指す。 | *ユーザー・エラーによるデータ消失とは、誤操作によって重要な表を削除したり、表の内容を削除または変更することを指す。 | ||
− | * | + | *ユーザー・エラーによるデータ消失が発生したときに、消失したデータをすみやかにリカバリできるかどうかは、[[バックアップ]]計画にかかっている。 |
====メディア障害の理解==== | ====メディア障害の理解==== | ||
*データベースの稼働に必要なディスク・ファイルに対する読取りまたは書込みの障害 | *データベースの稼働に必要なディスク・ファイルに対する読取りまたは書込みの障害 | ||
− | * | + | *メディア障害からの適切なリカバリ方法は、障害の影響を受けたファイル、および使用できる[[バックアップ]]のタイプによって異なる。 |
− | === | + | ===[[バックアップ]]およびリカバリ・ソリューション=== |
− | ==== | + | ====[[R]]ecovery Manager==== |
*コマンドライン・クライアント・インタフェースおよびEnterprise Manager GUIインタフェースを備えたツール | *コマンドライン・クライアント・インタフェースおよびEnterprise Manager GUIインタフェースを備えたツール | ||
− | * | + | *Oracleサーバー上で動作するセッションと一体になって、各種の[[バックアップ]]およびリカバリ操作を実行し、[[バックアップ]]に関する履歴データのリポジトリの管理を行う。 |
− | ==== | + | ====ユーザー管理の[[バックアップ]]とリカバリ==== |
− | *ホスト・オペレーティング・システムのコマンドと、SQL* | + | *ホスト・オペレーティング・システムのコマンドと、SQL*Plusの[[バックアップ]]およびリカバリ関連機能の両方を使用 |
*データベースを構成するファイルを直接管理する方法。 | *データベースを構成するファイルを直接管理する方法。 | ||
− | === | + | ===[[バックアップ]]およびリカバリ: 基本概念=== |
====データのリカバリで使用されるデータベースの物理構造==== | ====データのリカバリで使用されるデータベースの物理構造==== | ||
{|class="wikitable" | {|class="wikitable" | ||
46行目: | 46行目: | ||
|- | |- | ||
|データ・ファイルおよびデータ・ブロック | |データ・ファイルおよびデータ・ブロック | ||
− | | | + | |一貫性のある停止によってクローズされていないデータ・ファイルは、通常は最新の状態になっていない。どの[[バックアップ]]でも重要 |
|- | |- | ||
|REDOログ | |REDOログ | ||
− | | | + | |データベースのデータ・ファイルに対する変更をすべて記録。アーカイブREDOログがない場合、データベースを[[バックアップ]]するには、まずデータベースをオフラインにする必要がある。[[バックアップ]]からデータベースをリストアする必要がある場合でも、データベースで使用できるのは[[バックアップ]]した時点での内容のみ |
|- | |- | ||
|UNDOセグメント | |UNDOセグメント | ||
− | | | + | |リカバリの処理では、UNDO情報は、データ・ファイルのすべての変更がREDOログからデータ・ファイルに適用された直後に、コミットされていない[[トランザクション]]の影響を元に戻すために使用。 |
|- | |- | ||
|制御ファイル | |制御ファイル | ||
60行目: | 60行目: | ||
===データ・リカバリの方式=== | ===データ・リカバリの方式=== | ||
− | ====データ・ファイルのメディア・リカバリ: | + | ====データ・ファイルのメディア・リカバリ: データ・ファイルのリストアと[[R]]EDOの適用==== |
*メディア・リカバリは、ユーザーが開始するデータ・リカバリの最も基本的な方式 | *メディア・リカバリは、ユーザーが開始するデータ・リカバリの最も基本的な方式 | ||
*現行のデータ・ファイルまたはSPFILE、制御ファイルの消失または破損からリカバリするときに使用 | *現行のデータ・ファイルまたはSPFILE、制御ファイルの消失または破損からリカバリするときに使用 | ||
− | *OFFLINE | + | *OFFLINE NO[[R]]MALオプションを使用せずにオフラインにしたために、[[R]]EDOログには記録されていても、表領域のデータ・ファイルには書き込まれなかった変更をリカバリするためにも使用できる。 |
− | *Recovery | + | *Recovery Managerまたはユーザー管理の[[バックアップ]]およびリカバリの、いずれの方法でも実行できる。 |
− | * | + | *[[バックアップ]]からリストアする必要があるかどうかは、自動的には検出されない。 |
− | * | + | *最初の手順では、[[バックアップ]]からデータ・ファイルをコピーして手動でリストア |
− | * | + | *[[バックアップ]]からデータ・ファイルをリストアすると、そのデータ・ファイルが古いものであり、メディア・リカバリを実行する必要があることが、データベースで自動的に検出される |
====完全、不完全およびPoint-in-Timeリカバリ!==== | ====完全、不完全およびPoint-in-Timeリカバリ!==== | ||
=====完全リカバリ===== | =====完全リカバリ===== | ||
− | * | + | *コミットされた[[トランザクション]]による変更を失うことなく、データベースを最新の時点までリカバリすること |
*通常、リカバリとは完全リカバリを指します。 | *通常、リカバリとは完全リカバリを指します。 | ||
78行目: | 78行目: | ||
*不完全リカバリは、Point-in-Timeリカバリとも呼ばれ、データベースを過去のターゲットSCNまたは時刻までリストアするための機能。 | *不完全リカバリは、Point-in-Timeリカバリとも呼ばれ、データベースを過去のターゲットSCNまたは時刻までリストアするための機能。 | ||
*Point-in-Timeリカバリは、ユーザー・エラー、気付かぬうちに進行した論理的な破損などによって発生したデータ消失に対処する方法の1つ。 | *Point-in-Timeリカバリは、ユーザー・エラー、気付かぬうちに進行した論理的な破損などによって発生したデータ消失に対処する方法の1つ。 | ||
− | *Point-in- | + | *Point-in-Timeリカバリは、リカバリを実行する際に、リストアした[[バックアップ]]から、リカバリのターゲットSCNまでの間を埋めるアーカイブ・ログがないことに気付いたときに実行できる唯一の方法。 |
====インスタンス障害後の自動リカバリ: クラッシュ・リカバリ==== | ====インスタンス障害後の自動リカバリ: クラッシュ・リカバリ==== | ||
− | *クラッシュ・リカバリ処理は、特殊なリカバリの方式で、クラッシュ後(またはSHUTDOWN | + | *クラッシュ・リカバリ処理は、特殊なリカバリの方式で、クラッシュ後(またはSHUTDOWN ABORT後)、初めて[[Oracle]]データベース・インスタンスを起動するときに実行される。 |
− | * | + | *データ・ファイルを[[トランザクション]]の一貫性がある状態に戻し、インスタンス障害が発生した時点までのコミットされた変更をすべて維持することを目的とする。 |
− | ===Recovery | + | ===Recovery Managerを使用した[[バックアップ]]およびリカバリ=== |
− | *Recovery | + | *Recovery Managerを使用すると、ユーザー管理の[[バックアップ]]およびリカバリでは実行できない、データの[[バックアップ]]およびリカバリ方式と機能を取り扱うことができる。 |
− | ==== | + | ====[[R]]ecovery Managerで可能なリカバリ方式と機能==== |
{|class="wikitable" | {|class="wikitable" | ||
!機能 | !機能 | ||
!内容 | !内容 | ||
|- | |- | ||
− | | | + | |増分[[バックアップ]] |
− | | | + | |[[バックアップ]]の容量をより小さくまとめ(変更されたブロックのみを格納し)、データ・ファイルのメディア・リカバリを高速化 |
|- | |- | ||
|ブロック・メディア・リカバリ | |ブロック・メディア・リカバリ | ||
− | | | + | |破損データ・ブロックが少ないデータ・ファイルを、オフラインにすることも、[[バックアップ]]からリストアすることもなく修復。 |
|- | |- | ||
|未使用ブロックの圧縮 | |未使用ブロックの圧縮 | ||
− | |Recovery | + | |Recovery Managerが[[バックアップ]]時に未使用のデータ・ファイル・ブロックをスキップできます。 |
|- | |- | ||
|バイナリ圧縮 | |バイナリ圧縮 | ||
− | | | + | |圧縮メカニズムを使用して、[[バックアップ]]のサイズを小さくします。 |
|- | |- | ||
− | | | + | |暗号化[[バックアップ]] |
− | | | + | |暗号化機能を使用して、[[バックアップ]]を暗号化された形式で格納 |
|- | |- | ||
|} | |} | ||
− | ===Recovery | + | ===Recovery ManagerでのOracleデータベースの[[バックアップ]]のタイプ=== |
− | ==== | + | ====一貫性[[バックアップ]]と非一貫性[[バックアップ]]==== |
− | ===== | + | =====一貫性[[バックアップ]]===== |
− | * | + | *一貫性[[バックアップ]]は、データベースに一貫性がある状態、つまりREDOログ内のすべての変更がデータ・ファイルに適用されているときに作成された[[バックアップ]] |
− | * | + | *一貫性[[バックアップ]]からリストアしたデータベースは、メディア・リカバリを実行することなく、すぐにオープンできる。 |
− | * | + | *ただし、一貫性[[バックアップ]]は、一貫性のある状態で停止した後にのみ作成できます。クラッシュの発生後、またはSHUTDOWN ABORTの実行後には作成できません。 |
− | ===== | + | =====非一貫性[[バックアップ]]===== |
− | * | + | *可用性を高めるため、Oracleデータベースは、データベースをオープンしたままで作成できる非一貫性[[バックアップ]]を使用した場合でも、正常に動作するように設計されている。 |
− | * | + | *ただし、データベースを非一貫性[[バックアップ]]からリストアした場合は、メディア・リカバリを実行して、オンラインおよびアーカイブREDOログ内の保留になっているすべての更新情報をそのデータベースで適用できるようにしてから、データベースを再度オープンする必要がある。 |
− | * | + | *メディア・リカバリにはアーカイブ・ログが必要なため、非一貫性[[バックアップ]]を使用するには、データベースをARCHIVELOGモードで実行する必要がある。 |
− | ==== | + | ==== 全体[[バックアップ]]および増分[[バックアップ]]==== |
− | ===== | + | =====全体[[バックアップ]]===== |
− | * | + | *全体[[バックアップ]]は、データ・ファイル全体の[[バックアップ]]。 |
− | * | + | *全体[[バックアップ]]は、Recovery Manager、またはオペレーティング・システム・レベルのコピー・コマンドを使用して作成 |
− | ===== | + | =====増分[[バックアップ]]===== |
− | * | + | *増分[[バックアップ]]は、データ・ファイル内の変更されたデータ・ブロックだけのコピーを作成するという考え方に基づいている。 |
− | * | + | *リカバリでは、[[バックアップ]]で対処できる時間内に、REDOを適用して個々のデータ・ファイルを更新するかわりに、増分[[バックアップ]]から変更されたブロック全体を抽出することで、リカバリに要する時間を大幅に短縮できる。 |
− | * | + | *増分[[バックアップ]]は、Recovery Managerによってのみ作成できる。 |
− | ==== | + | ====イメージ・コピー、[[バックアップ]]・セットおよび[[バックアップ]]・ピース==== |
− | *Recovery | + | *Recovery Managerを使用して作成したOracleデータベースの[[バックアップ]]の結果は、イメージ・コピーまたは[[バックアップ]]・セットのいずれかで出力できる。 |
=====イメージ・コピー===== | =====イメージ・コピー===== | ||
*データベース・ファイルと完全に同一のコピー。 | *データベース・ファイルと完全に同一のコピー。 | ||
− | *Recovery | + | *Recovery Managerを使用して、イメージ・コピーの[[バックアップ]]を作成できる。 |
*ただし、作成時に、オペレーティング・システム固有のファイル・コピー・ユーティリティでは実行できない内容の破損状況の確認が実行される。 | *ただし、作成時に、オペレーティング・システム固有のファイル・コピー・ユーティリティでは実行できない内容の破損状況の確認が実行される。 | ||
− | * | + | *[[R]]ecovery Managerでは、作成されたイメージ・コピーが[[R]]ecovery Managerリポジトリに記録されるため、データベースのリストア時に使用できる。 |
− | * | + | *イメージ・コピーは、cp(UNIXの場合)、COPY([[Windows]]の場合)など、オペレーティング・システムのコマンドを使用しても作成できる。 |
− | ===== | + | =====[[バックアップ]]・セット===== |
− | *Recovery | + | *Recovery Managerを使用して、[[バックアップ]]・セットと呼ばれるRecovery Manager固有の形式で[[バックアップ]]を格納することも可能。 |
− | * | + | *[[バックアップ]]・セットは、[[バックアップ]]・ピースと呼ばれるファイルの集合 |
− | * | + | *各[[バックアップ]]・ピースには、1つ以上のデータベース・ファイルが含まれる。 |
− | *Recovery | + | *Recovery Managerで実行する[[バックアップ]]作業で、1つ以上の[[バックアップ]]・セットを作成できまる。 |
− | * | + | *[[バックアップ]]・セットは、Recovery Managerリポジトリに記録されまる。 |
− | * | + | *[[バックアップ]]・セットは、Recovery Managerによって、テープ・ライブラリなどのメディア・マネージャ・デバイスに[[バックアップ]]を書き込む場合に使用できる唯一の形式 |
− | * | + | *[[バックアップ]]・セットを作成して取り扱うには、Recovery Managerを使用する必要がある。 |
− | === | + | ===自動ディスク・ベース・[[バックアップ]]およびリカバリ: フラッシュ・リカバリ領域=== |
− | * | + | *フラッシュ・リカバリ領域を使用すると、[[バックアップ]]関連ファイル用のディスク領域を手動で管理したり、ファイルのタイプごとに使用する領域を調整する必要が最小限になります。 |
− | ====Oracle Flashback Technology: Point-in-Timeリカバリの代替方法==== | + | ====[[Oracle]] Flashback Technology: Point-in-Timeリカバリの代替方法==== |
− | *Oracle Flashback | + | *Oracle Flashback Technologyでは、データベースの大部分を[[バックアップ]]からリストアしたり、Point-in-Timeリカバリを実行せずに、データの過去の状態を表示したり、データを過去の任意の時点にリカバリすることができる、有効な代替機能を提供 |
− | * | + | *[[Oracle]]のフラッシュバック機能が使用可能なほとんどの環境では、これらの機能はメディア・リカバリよりも効率的で簡単。 |
{|class="wikitable" | {|class="wikitable" | ||
!機能 | !機能 | ||
!内容 | !内容 | ||
|- | |- | ||
− | |Oracle Flashback Query | + | |[[Oracle]] Flashback Query |
|目標時点を指定してデータベースに対する問合せを実行し、その時点での状態を示す結果を表示できる。表に対する誤った更新などの不要な変更からリカバリするには、その変更が発生する前の目標時点を選択し、問合せを実行して消失または変更した行の内容を取得 | |目標時点を指定してデータベースに対する問合せを実行し、その時点での状態を示す結果を表示できる。表に対する誤った更新などの不要な変更からリカバリするには、その変更が発生する前の目標時点を選択し、問合せを実行して消失または変更した行の内容を取得 | ||
|- | |- | ||
− | |Oracle Flashback Version Query | + | |[[Oracle]] Flashback Version Query |
|指定した期間に1度でも表に存在したすべての行のすべてのバージョンを、表に更新が適用された状態で表示できる。この機能は、消失したデータの値のリカバリおよび問い合せた表への変更の監査の両方に使用できます。 | |指定した期間に1度でも表に存在したすべての行のすべてのバージョンを、表に更新が適用された状態で表示できる。この機能は、消失したデータの値のリカバリおよび問い合せた表への変更の監査の両方に使用できます。 | ||
|- | |- | ||
|Oracle Flashback Transaction Query | |Oracle Flashback Transaction Query | ||
− | | | + | |1つの[[トランザクション]]または一定期間内のすべての[[トランザクション]]による変更を表示できます。 |
|- | |- | ||
− | |Oracle Flashback Table | + | |[[Oracle]] Flashback Table |
|表を過去の時点の状態に戻すことができます。データベースがオンラインである間に表データをリストアし、指定した表に対する変更のみを取り消すことができます。 | |表を過去の時点の状態に戻すことができます。データベースがオンラインである間に表データをリストアし、指定した表に対する変更のみを取り消すことができます。 | ||
|- | |- | ||
− | |Oracle Flashback Drop | + | |[[Oracle]] Flashback Drop |
|DROP TABLE文の影響を無効にできます。 | |DROP TABLE文の影響を無効にできます。 | ||
|- | |- | ||
178行目: | 178行目: | ||
*表の過去の状態を問い合せるには、SELECT文のAS OF句を使用 | *表の過去の状態を問い合せるには、SELECT文のAS OF句を使用 | ||
=====データを登録 09-07-12 23:54:50===== | =====データを登録 09-07-12 23:54:50===== | ||
− | SQL> insert into test values (1, 'abcdefg', systimestamp); | + | [[SQL]]> insert into test values (1, 'abcdefg', systimestamp); |
1行が作成されました。 | 1行が作成されました。 | ||
− | SQL> select * from test; | + | [[SQL]]> select * from test; |
ID VALUE UPD_DATE | ID VALUE UPD_DATE | ||
189行目: | 189行目: | ||
=====更新しコミット 09-07-12 23:58:24===== | =====更新しコミット 09-07-12 23:58:24===== | ||
− | SQL> update test set value = 'hijklmn', upd_date = systimestamp where id = 1; | + | [[SQL]]> update test set value = 'hijklmn', upd_date = systimestamp where id = 1; |
1行が更新されました。 | 1行が更新されました。 | ||
− | SQL> select * from test; | + | [[SQL]]> select * from test; |
ID VALUE UPD_DATE | ID VALUE UPD_DATE | ||
199行目: | 199行目: | ||
1 hijklmn 09-07-12 23:58:24.976423 | 1 hijklmn 09-07-12 23:58:24.976423 | ||
− | SQL> commit; | + | [[SQL]]> commit; |
コミットが完了しました。 | コミットが完了しました。 | ||
205行目: | 205行目: | ||
=====変更前の状態を検索 09-07-12 23:58:00===== | =====変更前の状態を検索 09-07-12 23:58:00===== | ||
*変更前の情報が検索された | *変更前の情報が検索された | ||
− | SQL> select * from test as of timestamp to_timestamp('2009-07-12 23:58:00', 'YYYY-MM-DD HH24:MI-SS') | + | [[SQL]]> select * from test as of timestamp to_timestamp('2009-07-12 23:58:00', 'YYYY-MM-DD HH24:MI-SS') |
2 where id = 1 | 2 where id = 1 | ||
3 / | 3 / | ||
213行目: | 213行目: | ||
1 abcdefg 09-07-12 23:54:50.411615 | 1 abcdefg 09-07-12 23:54:50.411615 | ||
=====変更前の状態に復元===== | =====変更前の状態に復元===== | ||
− | SQL> delete from test where id = 1; | + | [[SQL]]> delete from test where id = 1; |
1行が削除されました。 | 1行が削除されました。 | ||
− | SQL> insert into test (select * from test as of timestamp to_timestamp | + | [[SQL]]> insert into test (select * from test as of timestamp to_timestamp |
2 ('2009-07-12 23:58:00', 'YYYY-MM-DD HH24:MI-SS')) | 2 ('2009-07-12 23:58:00', 'YYYY-MM-DD HH24:MI-SS')) | ||
3 / | 3 / | ||
223行目: | 223行目: | ||
1行が作成されました。 | 1行が作成されました。 | ||
− | SQL> select * from test; | + | [[SQL]]> select * from test; |
ID VALUE UPD_DATE | ID VALUE UPD_DATE | ||
230行目: | 230行目: | ||
====[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/backup.102/B19193-02/flashptr.htm#2372 Flashback Table]==== | ====[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/backup.102/B19193-02/flashptr.htm#2372 Flashback Table]==== | ||
=====前提条件===== | =====前提条件===== | ||
− | *表で行の移動が有効である必要がある。 | + | *表で行の移動が有効である必要がある。 行の移動を有効にするには、次の[[SQL]]文を使用。 |
− | + | ALTE[[R]] TABLE table ENABLE [[R]]OW MOVEMENT; | |
*FLASHBACK ANY TABLEシステム権限または表に対するFLASHBACKオブジェクト権限を持っている必要 | *FLASHBACK ANY TABLEシステム権限または表に対するFLASHBACKオブジェクト権限を持っている必要 | ||
*指定した目標時点またはSCNまでのFLASHBACK TABLE操作に必要な過去の時点までのUNDO情報が、UNDO表領域に保持されている必要 | *指定した目標時点またはSCNまでのFLASHBACK TABLE操作に必要な過去の時点までのUNDO情報が、UNDO表領域に保持されている必要 | ||
237行目: | 237行目: | ||
=====Timestampを指定してFlashback Tableを実行する===== | =====Timestampを指定してFlashback Tableを実行する===== | ||
*行移動を有効に | *行移動を有効に | ||
− | SQL> alter table test enable row movement; | + | [[SQL]]> alter table test enable row movement; |
表が変更されました。 | 表が変更されました。 | ||
*時間とを確認し行を削除 | *時間とを確認し行を削除 | ||
− | SQL> select systimestamp from dual; | + | [[SQL]]> select systimestamp from dual; |
SYSTIMESTAMP | SYSTIMESTAMP | ||
248行目: | 248行目: | ||
09-07-13 00:31:50.401411 +09:00 | 09-07-13 00:31:50.401411 +09:00 | ||
− | SQL> select * from test; | + | [[SQL]]> select * from test; |
ID VALUE UPD_DATE | ID VALUE UPD_DATE | ||
254行目: | 254行目: | ||
1 abcdefg 09-07-12 23:54:50.411615 | 1 abcdefg 09-07-12 23:54:50.411615 | ||
− | SQL> delete from test; | + | [[SQL]]> delete from test; |
1行が削除されました。 | 1行が削除されました。 | ||
− | SQL> commit; | + | [[SQL]]> commit; |
コミットが完了しました。 | コミットが完了しました。 | ||
*Flashback Tableを実行 | *Flashback Tableを実行 | ||
− | SQL> flashback table test to timestamp to_timestamp('2009-07-13 00:31:50', 'YYYY-MM-DD HH24:MI-SS'); | + | [[SQL]]> flashback table test to timestamp to_timestamp('2009-07-13 00:31:50', 'YYYY-MM-DD HH24:MI-SS'); |
フラッシュバックが完了しました。 | フラッシュバックが完了しました。 | ||
*戻った | *戻った | ||
− | SQL> select * from test; | + | [[SQL]]> select * from test; |
ID VALUE UPD_DATE | ID VALUE UPD_DATE | ||
276行目: | 276行目: | ||
=====SCNを指定して Flashback Tableを実行する===== | =====SCNを指定して Flashback Tableを実行する===== | ||
*行を挿入しコミット | *行を挿入しコミット | ||
− | SQL> insert into test values (3, 'aaaaa', systimestamp); | + | [[SQL]]> insert into test values (3, 'aaaaa', systimestamp); |
1行が作成されました。 | 1行が作成されました。 | ||
− | SQL> commit; | + | [[SQL]]> commit; |
コミットが完了しました。 | コミットが完了しました。 | ||
*行を変更しコミット | *行を変更しコミット | ||
− | SQL> update test set value = 'bbbbb', upd_date = systimestamp where id = 3; | + | [[SQL]]> update test set value = 'bbbbb', upd_date = systimestamp where id = 3; |
1行が更新されました。 | 1行が更新されました。 | ||
− | SQL> commit; | + | [[SQL]]> commit; |
コミットが完了しました。 | コミットが完了しました。 | ||
*SCNのバージョンを確認し、更新前に戻す | *SCNのバージョンを確認し、更新前に戻す | ||
− | SQL> select id,value,versions_startscn, versions_operation | + | [[SQL]]> select id,value,versions_startscn, versions_operation |
2 from test versions between scn minvalue and maxvalue | 2 from test versions between scn minvalue and maxvalue | ||
3 where id = 3 | 3 where id = 3 | ||
4 / | 4 / | ||
− | ID VALUE | + | ID VALUE VE[[R]]SIONS_STA[[R]]TSCN VE |
---------- ---------------------------------------- ----------------- -- | ---------- ---------------------------------------- ----------------- -- | ||
3 bbbbb 3103901 U | 3 bbbbb 3103901 U | ||
305行目: | 305行目: | ||
− | SQL> flashback table test to scn 3103865; | + | [[SQL]]> flashback table test to scn 3103865; |
フラッシュバックが完了しました。 | フラッシュバックが完了しました。 | ||
*戻った | *戻った | ||
− | SQL> select * from test where id = 3; | + | [[SQL]]> select * from test where id = 3; |
ID VALUE UPD_DATE | ID VALUE UPD_DATE | ||
322行目: | 322行目: | ||
=====ゴミ箱の有効無効切り替え===== | =====ゴミ箱の有効無効切り替え===== | ||
− | * | + | *データベースでパラメータ・ファイル(PFILE)を使用している場合は、パラメータ・ファイルの[[R]]ECYCLEBINの値を指定できます。 |
− | + | [[R]]ECYCLEBIN=OFF | |
*ユーザー独自のデータベース・セッションにごみ箱の動作を指定する | *ユーザー独自のデータベース・セッションにごみ箱の動作を指定する | ||
− | + | ALTE[[R]] SESSION SET [[R]]ECYCLEBIN=OFF; | |
*データベース全体に対し、ごみ箱の動作を指定する | *データベース全体に対し、ごみ箱の動作を指定する | ||
− | + | ALTE[[R]] SYSTEM SET [[R]]ECYCLEBIN=OFF; | |
=====テーブルを削除してみる===== | =====テーブルを削除してみる===== | ||
*ゴミ箱に移動させない削除は、drop table table_name purge とする | *ゴミ箱に移動させない削除は、drop table table_name purge とする | ||
− | SQL> drop table test; | + | [[SQL]]> drop table test; |
表が削除されました。 | 表が削除されました。 | ||
*削除された | *削除された | ||
− | SQL> select * from test; | + | [[SQL]]> select * from test; |
select * from test | select * from test | ||
* | * | ||
行1でエラーが発生しました。: | 行1でエラーが発生しました。: | ||
− | ORA-00942: table or | + | ORA-00942: table or [[vi]]ew does not exist |
=====ゴミ箱の内容を問い合わせる===== | =====ゴミ箱の内容を問い合わせる===== | ||
− | SQL> show recyclebin; | + | [[SQL]]> show recyclebin; |
− | + | O[[R]]IGINAL NAME [[R]]ECYCLEBIN NAME OBJECT TYPE D[[R]]OP TIME | |
---------------- ------------------------------ ------------ ------------------- | ---------------- ------------------------------ ------------ ------------------- | ||
− | TEST BIN$boRfKFw95+vgQAB/AQAnzw==$0 TABLE 2009-07-13:00:49:06 | + | [[TEST]] BIN$boRfKFw95+vgQAB/AQAnzw==$0 TABLE 2009-07-13:00:49:06 |
=====Flashback Tableでもとに戻す===== | =====Flashback Tableでもとに戻す===== | ||
− | SQL> flashback table test to before drop; | + | [[SQL]]> flashback table test to before drop; |
フラッシュバックが完了しました。 | フラッシュバックが完了しました。 | ||
*これでもよい | *これでもよい | ||
− | SQL> flashback table "BIN$boRfKFw95+vgQAB/AQAnzw==$0" to before drop; | + | [[SQL]]> flashback table "BIN$boRfKFw95+vgQAB/AQAnzw==$0" to before drop; |
=====元に戻った===== | =====元に戻った===== | ||
− | SQL> select * from test; | + | [[SQL]]> select * from test; |
ID VALUE UPD_DATE | ID VALUE UPD_DATE |
2020年2月16日 (日) 04:30時点における最新版
目次
- 1 Oracle Database10g バックアップおよびリカバリ概要
- 1.1 物理バックアップと論理バックアップ
- 1.2 バックアップからのリカバリが必要なエラーおよび障害
- 1.3 バックアップおよびリカバリ・ソリューション
- 1.4 バックアップおよびリカバリ: 基本概念
- 1.5 データ・リカバリの方式
- 1.6 Recovery Managerを使用したバックアップおよびリカバリ
- 1.7 Recovery ManagerでのOracleデータベースのバックアップのタイプ
- 1.8 自動ディスク・ベース・バックアップおよびリカバリ: フラッシュ・リカバリ領域
Oracle Database10g バックアップおよびリカバリ概要
物理バックアップと論理バックアップ
- 物理バックアップは、安全なバックアップおよびリカバリ計画の基礎
- 論理バックアップは、様々な状況で物理バックアップを補足するために役立ちますが、物理バックアップがなければデータ消失に十分に対処することはできない。
物理バックアップ
- データベースの保存およびリカバリに使用する物理ファイルをバックアップしたもの
- データ・ファイル、制御ファイル、アーカイブ REDOログなどが対象
- 他の場所(ディスクや、テープなどのオフラインの記憶域)にデータベース情報を保存するファイルのコピーは、すべて物理バックアップ
論理バックアップ
- Oracleエクスポート・ユーティリティを使用してデータベースからエクスポートし、バイナリ・ファイルに格納した論理データ(表、ストアド・プロシージャなど)
- 対応するOracleインポート・ユーティリティを使用してデータベースに再インポートできる。
バックアップからのリカバリが必要なエラーおよび障害
- 通常、DBAが介入してメディア・リカバリを行う必要があるのは、メディア障害およびユーザー・エラーの2つの問題が発生した場合のみ
ユーザー・エラーの理解
- アプリケーション・ロジックのエラーまたは誤操作のため、データベースのデータが誤って変更または削除された場合に発生
- ユーザー・エラーによるデータ消失とは、誤操作によって重要な表を削除したり、表の内容を削除または変更することを指す。
- ユーザー・エラーによるデータ消失が発生したときに、消失したデータをすみやかにリカバリできるかどうかは、バックアップ計画にかかっている。
メディア障害の理解
- データベースの稼働に必要なディスク・ファイルに対する読取りまたは書込みの障害
- メディア障害からの適切なリカバリ方法は、障害の影響を受けたファイル、および使用できるバックアップのタイプによって異なる。
バックアップおよびリカバリ・ソリューション
Recovery Manager
- コマンドライン・クライアント・インタフェースおよびEnterprise Manager GUIインタフェースを備えたツール
- Oracleサーバー上で動作するセッションと一体になって、各種のバックアップおよびリカバリ操作を実行し、バックアップに関する履歴データのリポジトリの管理を行う。
ユーザー管理のバックアップとリカバリ
- ホスト・オペレーティング・システムのコマンドと、SQL*Plusのバックアップおよびリカバリ関連機能の両方を使用
- データベースを構成するファイルを直接管理する方法。
バックアップおよびリカバリ: 基本概念
データのリカバリで使用されるデータベースの物理構造
物理構造 | 内容 |
---|---|
データ・ファイルおよびデータ・ブロック | 一貫性のある停止によってクローズされていないデータ・ファイルは、通常は最新の状態になっていない。どのバックアップでも重要 |
REDOログ | データベースのデータ・ファイルに対する変更をすべて記録。アーカイブREDOログがない場合、データベースをバックアップするには、まずデータベースをオフラインにする必要がある。バックアップからデータベースをリストアする必要がある場合でも、データベースで使用できるのはバックアップした時点での内容のみ |
UNDOセグメント | リカバリの処理では、UNDO情報は、データ・ファイルのすべての変更がREDOログからデータ・ファイルに適用された直後に、コミットされていないトランザクションの影響を元に戻すために使用。 |
制御ファイル | データベースの物理構造とその状態に関する記録が格納。制御ファイルを失うと、データ消失からのリカバリは非常に困難 |
データ・リカバリの方式
データ・ファイルのメディア・リカバリ: データ・ファイルのリストアとREDOの適用
- メディア・リカバリは、ユーザーが開始するデータ・リカバリの最も基本的な方式
- 現行のデータ・ファイルまたはSPFILE、制御ファイルの消失または破損からリカバリするときに使用
- OFFLINE NORMALオプションを使用せずにオフラインにしたために、REDOログには記録されていても、表領域のデータ・ファイルには書き込まれなかった変更をリカバリするためにも使用できる。
- Recovery Managerまたはユーザー管理のバックアップおよびリカバリの、いずれの方法でも実行できる。
- バックアップからリストアする必要があるかどうかは、自動的には検出されない。
- 最初の手順では、バックアップからデータ・ファイルをコピーして手動でリストア
- バックアップからデータ・ファイルをリストアすると、そのデータ・ファイルが古いものであり、メディア・リカバリを実行する必要があることが、データベースで自動的に検出される
完全、不完全およびPoint-in-Timeリカバリ!
完全リカバリ
- コミットされたトランザクションによる変更を失うことなく、データベースを最新の時点までリカバリすること
- 通常、リカバリとは完全リカバリを指します。
不完全リカバリ、Point-in-Timeリカバリ
- 場合によっては、データベースを過去のある時点の状態に戻したい場合、たとえば、表または表の内容の削除などのユーザー・エラーの結果を元に戻したい場合には、データベースを内容が削除される前の状態に戻す必要がある。
- 不完全リカバリは、Point-in-Timeリカバリとも呼ばれ、データベースを過去のターゲットSCNまたは時刻までリストアするための機能。
- Point-in-Timeリカバリは、ユーザー・エラー、気付かぬうちに進行した論理的な破損などによって発生したデータ消失に対処する方法の1つ。
- Point-in-Timeリカバリは、リカバリを実行する際に、リストアしたバックアップから、リカバリのターゲットSCNまでの間を埋めるアーカイブ・ログがないことに気付いたときに実行できる唯一の方法。
インスタンス障害後の自動リカバリ: クラッシュ・リカバリ
- クラッシュ・リカバリ処理は、特殊なリカバリの方式で、クラッシュ後(またはSHUTDOWN ABORT後)、初めてOracleデータベース・インスタンスを起動するときに実行される。
- データ・ファイルをトランザクションの一貫性がある状態に戻し、インスタンス障害が発生した時点までのコミットされた変更をすべて維持することを目的とする。
Recovery Managerを使用したバックアップおよびリカバリ
Recovery Managerで可能なリカバリ方式と機能
機能 | 内容 |
---|---|
増分バックアップ | バックアップの容量をより小さくまとめ(変更されたブロックのみを格納し)、データ・ファイルのメディア・リカバリを高速化 |
ブロック・メディア・リカバリ | 破損データ・ブロックが少ないデータ・ファイルを、オフラインにすることも、バックアップからリストアすることもなく修復。 |
未使用ブロックの圧縮 | Recovery Managerがバックアップ時に未使用のデータ・ファイル・ブロックをスキップできます。 |
バイナリ圧縮 | 圧縮メカニズムを使用して、バックアップのサイズを小さくします。 |
暗号化バックアップ | 暗号化機能を使用して、バックアップを暗号化された形式で格納 |
Recovery ManagerでのOracleデータベースのバックアップのタイプ
一貫性バックアップと非一貫性バックアップ
一貫性バックアップ
- 一貫性バックアップは、データベースに一貫性がある状態、つまりREDOログ内のすべての変更がデータ・ファイルに適用されているときに作成されたバックアップ
- 一貫性バックアップからリストアしたデータベースは、メディア・リカバリを実行することなく、すぐにオープンできる。
- ただし、一貫性バックアップは、一貫性のある状態で停止した後にのみ作成できます。クラッシュの発生後、またはSHUTDOWN ABORTの実行後には作成できません。
非一貫性バックアップ
- 可用性を高めるため、Oracleデータベースは、データベースをオープンしたままで作成できる非一貫性バックアップを使用した場合でも、正常に動作するように設計されている。
- ただし、データベースを非一貫性バックアップからリストアした場合は、メディア・リカバリを実行して、オンラインおよびアーカイブREDOログ内の保留になっているすべての更新情報をそのデータベースで適用できるようにしてから、データベースを再度オープンする必要がある。
- メディア・リカバリにはアーカイブ・ログが必要なため、非一貫性バックアップを使用するには、データベースをARCHIVELOGモードで実行する必要がある。
全体バックアップおよび増分バックアップ
全体バックアップ
増分バックアップ
- 増分バックアップは、データ・ファイル内の変更されたデータ・ブロックだけのコピーを作成するという考え方に基づいている。
- リカバリでは、バックアップで対処できる時間内に、REDOを適用して個々のデータ・ファイルを更新するかわりに、増分バックアップから変更されたブロック全体を抽出することで、リカバリに要する時間を大幅に短縮できる。
- 増分バックアップは、Recovery Managerによってのみ作成できる。
イメージ・コピー、バックアップ・セットおよびバックアップ・ピース
イメージ・コピー
- データベース・ファイルと完全に同一のコピー。
- Recovery Managerを使用して、イメージ・コピーのバックアップを作成できる。
- ただし、作成時に、オペレーティング・システム固有のファイル・コピー・ユーティリティでは実行できない内容の破損状況の確認が実行される。
- Recovery Managerでは、作成されたイメージ・コピーがRecovery Managerリポジトリに記録されるため、データベースのリストア時に使用できる。
- イメージ・コピーは、cp(UNIXの場合)、COPY(Windowsの場合)など、オペレーティング・システムのコマンドを使用しても作成できる。
バックアップ・セット
- Recovery Managerを使用して、バックアップ・セットと呼ばれるRecovery Manager固有の形式でバックアップを格納することも可能。
- バックアップ・セットは、バックアップ・ピースと呼ばれるファイルの集合
- 各バックアップ・ピースには、1つ以上のデータベース・ファイルが含まれる。
- Recovery Managerで実行するバックアップ作業で、1つ以上のバックアップ・セットを作成できまる。
- バックアップ・セットは、Recovery Managerリポジトリに記録されまる。
- バックアップ・セットは、Recovery Managerによって、テープ・ライブラリなどのメディア・マネージャ・デバイスにバックアップを書き込む場合に使用できる唯一の形式
- バックアップ・セットを作成して取り扱うには、Recovery Managerを使用する必要がある。
自動ディスク・ベース・バックアップおよびリカバリ: フラッシュ・リカバリ領域
- フラッシュ・リカバリ領域を使用すると、バックアップ関連ファイル用のディスク領域を手動で管理したり、ファイルのタイプごとに使用する領域を調整する必要が最小限になります。
Oracle Flashback Technology: Point-in-Timeリカバリの代替方法
- Oracle Flashback Technologyでは、データベースの大部分をバックアップからリストアしたり、Point-in-Timeリカバリを実行せずに、データの過去の状態を表示したり、データを過去の任意の時点にリカバリすることができる、有効な代替機能を提供
- Oracleのフラッシュバック機能が使用可能なほとんどの環境では、これらの機能はメディア・リカバリよりも効率的で簡単。
機能 | 内容 |
---|---|
Oracle Flashback Query | 目標時点を指定してデータベースに対する問合せを実行し、その時点での状態を示す結果を表示できる。表に対する誤った更新などの不要な変更からリカバリするには、その変更が発生する前の目標時点を選択し、問合せを実行して消失または変更した行の内容を取得 |
Oracle Flashback Version Query | 指定した期間に1度でも表に存在したすべての行のすべてのバージョンを、表に更新が適用された状態で表示できる。この機能は、消失したデータの値のリカバリおよび問い合せた表への変更の監査の両方に使用できます。 |
Oracle Flashback Transaction Query | 1つのトランザクションまたは一定期間内のすべてのトランザクションによる変更を表示できます。 |
Oracle Flashback Table | 表を過去の時点の状態に戻すことができます。データベースがオンラインである間に表データをリストアし、指定した表に対する変更のみを取り消すことができます。 |
Oracle Flashback Drop | DROP TABLE文の影響を無効にできます。 |
- 上記はいずれもUNDOデータに依存する。
Flashback Query
- 表の過去の状態を問い合せるには、SELECT文のAS OF句を使用
データを登録 09-07-12 23:54:50
SQL> insert into test values (1, 'abcdefg', systimestamp); 1行が作成されました。 SQL> select * from test; ID VALUE UPD_DATE ---------- ---------------------------------------- ------------------------------------ 1 abcdefg 09-07-12 23:54:50.411615
更新しコミット 09-07-12 23:58:24
SQL> update test set value = 'hijklmn', upd_date = systimestamp where id = 1; 1行が更新されました。 SQL> select * from test; ID VALUE UPD_DATE ---------- ---------------------------------------- ------------------------------ 1 hijklmn 09-07-12 23:58:24.976423 SQL> commit; コミットが完了しました。
変更前の状態を検索 09-07-12 23:58:00
- 変更前の情報が検索された
SQL> select * from test as of timestamp to_timestamp('2009-07-12 23:58:00', 'YYYY-MM-DD HH24:MI-SS') 2 where id = 1 3 / ID VALUE UPD_DATE ---------- ---------------------------------------- ------------------------------------------------ 1 abcdefg 09-07-12 23:54:50.411615
変更前の状態に復元
SQL> delete from test where id = 1; 1行が削除されました。 SQL> insert into test (select * from test as of timestamp to_timestamp 2 ('2009-07-12 23:58:00', 'YYYY-MM-DD HH24:MI-SS')) 3 / 1行が作成されました。 SQL> select * from test; ID VALUE UPD_DATE ---------- ---------------------------------------- ------------------------------------- 1 abcdefg 09-07-12 23:54:50.411615
Flashback Table
前提条件
- 表で行の移動が有効である必要がある。 行の移動を有効にするには、次のSQL文を使用。
ALTER TABLE table ENABLE ROW MOVEMENT;
- FLASHBACK ANY TABLEシステム権限または表に対するFLASHBACKオブジェクト権限を持っている必要
- 指定した目標時点またはSCNまでのFLASHBACK TABLE操作に必要な過去の時点までのUNDO情報が、UNDO表領域に保持されている必要
Timestampを指定してFlashback Tableを実行する
- 行移動を有効に
SQL> alter table test enable row movement; 表が変更されました。
- 時間とを確認し行を削除
SQL> select systimestamp from dual; SYSTIMESTAMP --------------------------------------------------------------------------- 09-07-13 00:31:50.401411 +09:00 SQL> select * from test; ID VALUE UPD_DATE ---------- ---------------------------------------- ------------------------------- 1 abcdefg 09-07-12 23:54:50.411615 SQL> delete from test; 1行が削除されました。 SQL> commit; コミットが完了しました。
- Flashback Tableを実行
SQL> flashback table test to timestamp to_timestamp('2009-07-13 00:31:50', 'YYYY-MM-DD HH24:MI-SS'); フラッシュバックが完了しました。
- 戻った
SQL> select * from test; ID VALUE UPD_DATE ---------- ---------------------------------------- --------------------------------- 1 abcdefg 09-07-12 23:54:50.411615
SCNを指定して Flashback Tableを実行する
- 行を挿入しコミット
SQL> insert into test values (3, 'aaaaa', systimestamp); 1行が作成されました。 SQL> commit; コミットが完了しました。
- 行を変更しコミット
SQL> update test set value = 'bbbbb', upd_date = systimestamp where id = 3; 1行が更新されました。 SQL> commit; コミットが完了しました。
- SCNのバージョンを確認し、更新前に戻す
SQL> select id,value,versions_startscn, versions_operation 2 from test versions between scn minvalue and maxvalue 3 where id = 3 4 / ID VALUE VERSIONS_STARTSCN VE ---------- ---------------------------------------- ----------------- -- 3 bbbbb 3103901 U 3 aaaaa 3103865 I SQL> flashback table test to scn 3103865; フラッシュバックが完了しました。
- 戻った
SQL> select * from test where id = 3; ID VALUE UPD_DATE ---------- ---------------------------------------- ------------------------- 3 aaaaa 09-07-13 01:08:53.175519
Flashback Drop
- 表を削除した場合、その表に関連付けられた領域はすぐには削除されません。
- 表の名前が変更され、関連付けられたオブジェクトとともにデータベースのごみ箱に移動されます。
- 削除のフラッシュバック操作を実行すると、その表がごみ箱からリカバリされます
- ごみ箱に格納される依存オブジェクトには、索引、制約、トリガー、ネストした表、LOBセグメント、LOB索引セグメントが含まれます。
ゴミ箱の有効無効切り替え
- データベースでパラメータ・ファイル(PFILE)を使用している場合は、パラメータ・ファイルのRECYCLEBINの値を指定できます。
RECYCLEBIN=OFF
- ユーザー独自のデータベース・セッションにごみ箱の動作を指定する
ALTER SESSION SET RECYCLEBIN=OFF;
- データベース全体に対し、ごみ箱の動作を指定する
ALTER SYSTEM SET RECYCLEBIN=OFF;
テーブルを削除してみる
- ゴミ箱に移動させない削除は、drop table table_name purge とする
SQL> drop table test; 表が削除されました。
- 削除された
SQL> select * from test; select * from test * 行1でエラーが発生しました。: ORA-00942: table or view does not exist
ゴミ箱の内容を問い合わせる
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ ------------------- TEST BIN$boRfKFw95+vgQAB/AQAnzw==$0 TABLE 2009-07-13:00:49:06
Flashback Tableでもとに戻す
SQL> flashback table test to before drop; フラッシュバックが完了しました。
- これでもよい
SQL> flashback table "BIN$boRfKFw95+vgQAB/AQAnzw==$0" to before drop;
元に戻った
SQL> select * from test; ID VALUE UPD_DATE ---------- ---------------------------------------- -------------------------- 1 abcdefg 09-07-12 23:54:50.411615
ゴミ箱の消去
purge recyclebin;
© 2006 矢木浩人