📚

Oracleのバックアップとリカバリを学ぶ

2023/07/04に公開

Oracleのバックアップとリカバリを学ぶ

こんにちは!わいわわです!
最近はOracleの投稿と、
基本情報技術者試験の勉強をしています。
今回はOracleのバックアップとリカバリについて学習していきます!

なぜバックアップとリカバリを学ぶか

データはお金とは換えにくい資産だと言われることもあります。
データが消えてしまった経験は私にもありますが、
大規模になればなるほど再作成だけでは済まなくなります。

様々な状況に備えてバックアップをとることは重要でありながら、
実際の運用ではできていなかったり、
ノーアカイブログモードになっていたりするようです。

また、バックアップがあったとしても最適なリカバリを早くしなければなりません。
そのため、仕組みを学んでいきます!

バックアップの種類と特徴

バックアップには

・オンラインバックアップ
・コールドバックアップ

の2種類があります。

コールドバックアップは1番無難なバックで、
完全にインスタンスを停止した状態でとるバックアップです。

全てのデータが書き込まれており、
可能であればこちらのバックアップを取ることが簡単で良いです。

これに対して24時間データベースを運用したい場合、
オンラインバックアップを使用します。
これはデータベースを運用しながらバックアップを取ることができます。

オンラインバックアップの手順

1.「ALTER TABLESPACE <表領域名> BEGIN BACKUP;」
もしくは
「ALTER DATABASE BEGIN BACKUP;」の実行

2.バックアップの実行

3.「ALTER TABLES PACE <表領域名> END BACKUP;」
もしくは
「ALTER DATABASE END BACKUP;」の実行

以上の手順で実行ができます。

データベースが破壊されてしまうパターン

いろいろなデータベース破壊のパターンがありますが、
ここでは代表的ないくつかについて解説します!

・ディスクの物理的な故障によるデータファイルの消失

・オペレーションミスなどにより、OS上でデータを削除や上書き

・何らかの問題によるブロック破損
こちらはデータファイルが壊れたわけではなく、
一部のブロックだけが壊れた状態です。

Oracleはいろいろな方法でブロックが壊れていないかチェックしていて、
気がついた時点で「ここが壊れている」と通知してきます。

このブロック破損の大変なところは、
壊れてもなかなかOracleが気がつかないことが多い
(該当箇所を読み込むまで気がつかないため)、
ほかにも破損しているブロックが存在するかもしれないという2つです。

・データファイルに対する一時的なアクセス不可
Oracleがデータファイルにアクセスしようとした時、
OSやストレージ側の都合や不具合でファイルにアクセスできないことがあります。

読み込めない場合はエラーですが、
書き込めない場合、Oracleはデータファイルをオフライン(使えない状態)にして、リカバリが必要だと認識します。
書き込めない表領域がSYSTEM表領域の場合には、インスタンスがダウンします。

・ハードウェアの物理故障やケーブルの緩み

・ドライバやアダプタカードなどの製品の不具合による破壊

基本的なリカバリと動作

バックアップにも何通りかあるように、リカバリ(回復)にも次の種類があります。

クラッシュ(インスタンス)リカバリ、メディアリカバリ

完全回復、不完全回復

・データベース/表領域/データファイル/ブロックのリカバリ

インスタンスリカバリとメディアリカバリ

一般にインスタンスリカバリと言われるクラッシュリカバリは、
インスタンスが異常終了した後、起動時に自動的に行なわれるリカバリのことです。

これに対してメディアリカバリは、
ディスク上のデータが壊れてしまったときにユーザーが明示的に実行するリカバリです。

世間一般で言うリカバリは、メディアリカバリのことを指します。

完全回復と不完全回復の違い

完全回復とは、最新データまでリカバリするという意味です。

それに対して不完全回復とは、ある時点(途中)までのリカバリという意味です。

通常は特別な理由がない限り完全回復を選びますし、
Oracleも特に指定がなければ完全回復を実行します。

不完全回復を選ぶのは、
・アーカイブREDOログが失われた場合
・何らかの理由である時点のデータにしたい時
などに選択します。

リカバリの流れ

データベース全体のリカバリを例にして、基本的なリカバリの流れを記述します。
データベース全体をリカバリする際は、すべてのデータファイルをリストアして、
業務を止めてリカバリします。

リカバリの手順

1.データベースが壊れているかどうか確認する
2.やり直しができるように現状のバックアップを取る
3.必要なデータファイルとアーカイブREDOログファイルのリストアをする
4.リカバリを実行する

バックアップはやり直しができるようにするためと
後で調査ができるようにするために行います。
その際はデータファイルだけでなく、制御ファイル
REDOログファイルなども含めることが大切です。

3のリストアはデータファイルが壊れている際に必須です。
対象のファイルはalertファイルやv$ビューで表示されているものです。

そこまでできるといよいよリカバリの実行です。
コードに関してはMOUNT状態で
「RECOVER DATABASE;」と入力します。

リカバリは実行されますが内部では
・リカバリのプロセスがアーカイブREDOログを読み込む
 ↓
・ブロックがキャッシュになければディスクからキャッシュに読み出す
 ↓
・キャッシュ上でデータを更新

通常のデータ更新と動きはほぼ同じですね。

コマンドを入力すると「Media recovery complete.」と表示されますが
この後に「ALTER DATABASE OPEN」コマンドまで実行できて初めて終了となります。

所感

今回はバックアップとリカバリについて学習しました。
バックアップの違いや、浅くではありますがリカバリの流れが分かりました。
リカバリは起こさないのが一番良いとは思いますが、
どうしても起きてしまもので、その時は正しい修繕を迅速に行うことが大事です。

コマンドだけでなく、裏でどのような動きが起きているのかも理解して
よりトラブルに対処できるようになりたいです!

Discussion