あらためて考えるデータベースのバックアップとリカバリ
Oracle Databaseの場合
2023年3月7日
日本オラクル株式会社
日下部明Safe harbor statement
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することを確約するものではないため、購買決定を行う際の判断材料になさらないで下さい。
オラクル製品に関して記載されている機能の開発、リリース、時期及び価格については、弊社の裁量により決定され、変更される可能性があります。

2

Copyright © 2023, Oracle and/or its affiliatesデータベースのデータにアクセスできなくなる
情報セキュリティ3要素• Confidentiality (機密性)• Integrity (完全性)• Availability (可用性)

この時間は「(正しい)データにアクセスできなくなる」というIntegrityとAvailabilityの観点からの話
データへのアクセスに障害が発生したデータベースを復旧させるには？

3

Copyright © 2023, Oracle and/or its affiliates

いつ復旧できるか/いつまでのデータを復旧できるか
目標復旧時間/目標復旧時点

障害発生時刻 t1
時間
システム稼働

復旧作業

システム稼働目標復旧時間 (Recovery Time Objective: RTO)
障害が発生してからどれくらいの時間でシステム稼働を再開できるか

4

Copyright © 2023, Oracle and/or its affiliates

いつ復旧できるか/いつまでのデータを復旧できるか
目標復旧時間/目標復旧時点

障害発生時刻 t1
時間
システム稼働システム稼働

復旧作業

システム稼働失われるデータ

目標復旧時点 (Recovery Point Objective: RPO)復旧させたとき障害が発生するまでのどれくらいの時間のデータが失われるか

5

Copyright © 2023, Oracle and/or its affiliates

なぜ失われるデータが発生するか
バックアップ操作と目標復旧時点の関係

バックアップ時刻 t0

障害発生時刻 t1
時間

システム稼働システム稼働

復旧作業

システム稼働失われるデータデータの複製が時刻t0までのものしかなければ、時刻t0とt1の間のデータがどこにも存在しない

6

Copyright © 2023, Oracle and/or its affiliatesデータベースはストレージに障害が発生することを想定している障害発生直前の状態(RPO=0)まで復旧する方法が存在する

バックアップ時刻 t0

障害発生時刻 t1
時間

システム稼働システム稼働復旧作業
失われるデータt0以降の更新情報

データ本体の複製が時刻t0まで + 時刻t0以降の更新履歴情報
7

Copyright © 2023, Oracle and/or its affiliates

システム稼働データベースでのデータの更新
データ本体の更新と更新履歴情報の追記
Oracleサーバー・プロセス(SQL処理の主体)
更新履歴(REDOログ情報)

データ本体の操作

データベース・バッファ・キャッシュ(データ本体用メモリー)

SGA

REDOログ・バッファ(更新履歴用メモリー)

ログ・ライター・プロセス

oracleLGWR

DBWn

データベース・ライター・プロセス

オンラインREDOログ・ファイルに永続化

データ・ファイルに永続化

オンラインREDOログ・ファイル(更新履歴のファイル)データファイル(データ本体のファイル)8

Copyright © 2023, Oracle and/or its affiliates

「Oracleインスタンス」と「データベース」「データベース」はストレージ上のファイルの集合
Oracleインスタンス
データベース・サーバー上のプロセスとメモリーの集合

オンラインREDOログ・ファイル• 更新の履歴• 1本書き込み完了したら複製

アーカイブREDOログ・ファイル• オンラインREDOログ・ファイルのバックアップ

9

Copyright © 2023, Oracle and/or its affiliates

データベースストレージ上のファイルの集合

データファイル• 表データの本体

データの更新とバックアップ/リストア/リカバリ

データの更新
更新履歴のREDOログとデータ本体のデータブロックを更新
INSERT
UPDATE
DELETE

アーカイブ・REDOログ

時間

データベースの更新はオンラインREDOログ・ファイルに記録される。

オンラインREDOログ

オンラインREDOログ・ファイルは固定長循環型なので、書き込み完了したファイルはアーカ
イブREDOログ・ファイルにコピーされる。

時間
11

Copyright © 2023, Oracle and/or its affiliatesバックアップ
バックアップ操作をした時点のファイルの複製を作る
INSERT
UPDATE
DELETE

時刻t0
INSERT
UPDATE
DELETE時間

バックアップ(データファイルのコピー)

時刻t0に取得したデータ・ファイルのバックアップには最新でも時刻t0までの情報しか含まれていない。

時間
12

Copyright © 2023, Oracle and/or its affiliatesバックアップ操作以後もデータは更新され続ける
INSERT
UPDATE
DELETE

時刻t0
INSERT
INSERT
UPDATEUPDATE
DELETE
DELETE
アーカイブREDOログ

時間

オンラインREDOログ
バックアップ(データファイルのコピー)

時間
13

Copyright © 2023, Oracle and/or its affiliatesデータファイルに破損が発生
INSERT
UPDATE
DELETE

時刻t1にデータファイルの破損を検出した。
時刻t0
時刻t1
時間
INSERT
INSERT
UPDATEUPDATE
DELETE
DELETE
アーカイブREDOログ
オンラインREDOログ

バックアップ(データファイルのコピー)

時間14

Copyright © 2023, Oracle and/or its affiliatesリストア・リカバリ

データファイル障害発生
時刻t1

障害直前の状態まで戻す
INSERT
UPDATE
DELETE

時刻t0
INSERT
INSERT
UPDATEUPDATE
DELETE
DELETE
アーカイブREDOログ

オンラインREDOログ
バックアップ(データファイルのコピー)

時間
15

Copyright © 2023, Oracle and/or its affiliatesリストア
バックアップしたファイルを書き戻す
INSERT
UPDATE
DELETE

データファイル障害発生
時刻t1

時刻t0
INSERT
INSERT
UPDATEUPDATE
DELETE
DELETE
アーカイブREDOログ

オンラインREDOログ
バックアップ(データファイルのコピー)

リストア(データファイルの書き戻し)

時刻t0に取得したデータ・ファイルのバックアップには最新でも時刻t0までの情報しか含まれていない。
時間

16

Copyright © 2023, Oracle and/or its affiliatesリカバリ

データファイル障害発生
時刻t1

データブロックにREDOログを適用
INSERT
UPDATE
DELETE

時刻t0
INSERT
INSERT
UPDATEUPDATE
DELETE
DELETE
アーカイブREDOログ

オンラインREDOログ
バックアップ(データファイルのコピー)

リカバリ(REDOログの適用)
リストア(データファイルの書き戻し)

データファイルの状態が時刻t1まで復元される
時間

17

Copyright © 2023, Oracle and/or its affiliates

最新の更新情報はオンラインREDOログ・ファイルにしかない
Oracleインスタンス
データベース・サーバー上のプロセスとメモリーの集合

最新の更新情報オンラインREDOログ・ファイル• 更新の履歴• 1本書き込み完了したら複製

アーカイブREDOログ・ファイル• オンラインREDOログ・ファイルのバックアップ

18

Copyright © 2023, Oracle and/or its affiliates

データベースストレージ上のファイルの集合

データファイル• 表データの本体「バックアップ」操作で複製できる範囲
書き込み真っ最中のオンラインREDOログ・ファイルは複製できない
Oracleインスタンス
データベース・サーバー上のプロセスとメモリーの集合

追記中のオンラインREDOログ・ファイルは複製できない

オンラインREDOログ・ファイル• 更新の履歴• 1本分書き込み完了したら複製

アーカイブREDOログ・ファイル• オンラインREDOログ・ファイルのバックアップ「バックアップ」操作で複製できる範囲
19

Copyright © 2023, Oracle and/or its affiliates

データベースストレージ上のファイルの集合

データファイル• 表データの本体

オンラインREDOログ・ファイルが格納されているストレージが全損するとINSERT
UPDATE
DELETE

時刻t0
時刻t1 ストレージ障害発生
INSERT
INSERT
UPDATEUPDATE
DELETE
DELETE
アーカイブREDOログ
オンラインREDOログ
バックアップ(データファイルのコピー)

データベース本体用ストレージ

リカバリ(REDOログの適用)
リストア(データファイルの書き戻し)

最新のトランザクション
情報を失う
時間

20

Copyright © 2023, Oracle and/or its affiliates「バックアップ」で復旧できるのはバックアップ操作時に存在していたデータまで
INSERT
UPDATE
DELETE

時刻t0
時刻t1 ストレージ障害発生
INSERTINSERTUPDATEUPDATE
DELETE
DELETE
アーカイブREDOログ
オンラインREDOログ
バックアップ(データファイルのコピー)「バックアップ」がカバーできる範囲リカバリ(REDOログの適用)
リストア(データファイルの書き戻し)

目標復旧時点(RPO)
最新のトランザクション
情報を失う
時間

21

Copyright © 2023, Oracle and/or its affiliatesデータの複製手段「バックアップ」という言葉はあいまいに使われている• 「複製されたデータ」を指す• 「データの複製を作る操作」を指す
ここではバックアップとは「データの複製を作る操作」を指す

データを複製する手段• バックアップ:
バックアップ操作をした時点のデータの複製• ミラー:
継続的なデータの複製 (ローカル・ストレージ)• レプリケーション: 継続的なデータの複製 (リモート・ストレージ)• (スナップショット)

22

Copyright © 2023, Oracle and/or its affiliatesストレージ機能でのデータの複製
ミラー/レプリケーション/バックアップ
リモート・レプリケーション (レプリケーション)• 別のストレージ筐体に書き込みを複製

ストレージ・コントローラ

RAID (ミラー)• 複数のストレージ・デバイスに書き込みを複製
23

Copyright © 2023, Oracle and/or its affiliates

ストレージ・コントローラ

スプリット・ミラー (バックアップ)• ミラーを一時的に解除することでその時点のストレージの状態を保持ストレージ機能でのデータの複製
書き込むデータが意味的に正常なのかはストレージは判別できないのでデータ破損が伝搬する
リモート・レプリケーション (レプリケーション)• 別のストレージ筐体に書き込みを複製

破損データ

ストレージ・コントローラ

RAID (ミラー)• 複数のストレージ・デバイスに書き込みを複製
24

Copyright © 2023, Oracle and/or its affiliates

ストレージ・コントローラ

スプリット・ミラー (バックアップ)• ミラーを一時的に解除することでその時点のストレージの状態を保持データを失う要因はストレージ・デバイスの故障以外にもある
DBMS

ERROR

OS
Multipath Driver

エラー・ログを出力するのは、その異常を検出した階層。
異常検出能力のない階層はエラー・ログを出力できない。
⇒ 破損データを次の階層に伝搬させる。
データを破損させた階層を特定することは困難。

Device Driver

CPU/Memory
Host Bus Adapter
Network
Storage Controller?

25?

Copyright © 2023, Oracle and/or its affiliates

ストレージ・デバイスが故障していなくても、格納されているファイルのデータが破損している場合がある。

ストレージのデータを破損させる要因• CPU/メモリー故障• レーザー出力不安定• 電源障害• ランサムウェア• ...

ランサムウェア： ソフトウェア的なデータの破損
ソフトウェアからデータの内容にアクセスできなくなる

ランサムウェア
• OSに侵入してファイルを暗号化• アプリケーションからファイルの内容にアクセス不能になる• ハードウェアが故障したわけではない• ソフトウェア的なデータの破損

Oracle Databaseのデータ保護機能は「ソフトウェア的なデータの破損」も想定している

26

Copyright © 2023, Oracle and/or its affiliates

Oracle Databaseはなぜデータの複製をOracleソフトウェアでやろうとするのか

Oracle Databaseの歴史はデータ破損との闘い
Oracleインスタンス

破損検査↓
破損伝搬の抑止↓
自動修復• データ構造がOracle Databaseとして正しいかを検査できるのはOracle自身しかない• ある階層から別の階層に移動させるとき検査される• 破損が次の階層に伝搬しない• データの複製がある場合は自動修復を試みる

実装バージョン

27

機能名機能Oracle8

RMAN

バックアップ/リストア

Oracle9i

Data Guard

REDO情報を別サーバーに転送

Oracle 10g

ASM

ストレージの冗長化と自動修復

Oracle 11g

Exadata

Oracle専用ストレージがデータ構造を検査

Oracle 11g

Active Data Guard

Data Guard+自動修復

Oracle 12c

ZDLRA

RMANバックアップ+REDO転送

Copyright © 2023, Oracle and/or its affiliates

Oracle Databaseのデータ複製機能

データを移動させるときに破損検査が行われる

Active Data Guard (レプリケーション)• REDO情報を別のデータベース・サーバーに転送• リカバリを継続することで最新のデータベース状態を維持• 破損を検出すると対向サーバーから該当データを取り寄せ自動修復

ネットワーク
プライマリ・データベース・サーバー

スタンバイ・データベース・サーバー

REDOログ・バッファオンラインREDO
ログ・ファイル

データファイル

28

Copyright © 2023, Oracle and/or its affiliates

RMAN (バックアップ)• Oracleプロセスがファイルを読んで複製

バックアップ・ファイル

ASM (ミラー)• 破損を検出するとミラーから自動修復

データファイルにREDOログを適用
スタンバイREDO
ログ・ファイル

データファイル

Automatic Storage Management (ASM)
データのストライプ＆ミラー
データ破損検出からの自動修復

Oracle Automatic Storage Management

Oracle Database専用のクラスタ・ボリューム・マネージャ兼クラスタ・ファイルシステム
管理者から見た操作の階層はどちらもディレクトリ・ツリーとファイルで同じ

POSIXファイルシステム

ASM

Oracle構造

表、索引
表領域

表、索引
表領域

ファイル構造ファイル
ファイルシステム
ボリューム・マネージャ

ファイル
ファイルシステム
ボリューム・マネージャ

ASM

デバイス・ファイル30

Copyright © 2023, Oracle and/or its affiliates

RAIDとは異なる実装で• ストレージ・デバイスの障害に対処可能• データ破損を検出すると自動修復

ASMのファイル配置コンセプト1

どのファイルへのアクセスもストレージの性能を最大限引き出す
ファイルを分割し、すべてのストレージ・デバイスに均等に分散する。
ストレージ・デバイスが増減しても、再配置して均等を維持する。

ASM上のファイル
ASMエクステント

31

Copyright © 2023, Oracle and/or its affiliates

extentextentextentASMのファイル配置コンセプト2

どのファイルも冗長化して障害に対処するファイルを分割しミラーを用意する。
ミラーは異なる障害グループ(FAILGROUP)のストレージ・デバイスに配置する。
ストレージ・デバイスが増減しても、再配置して冗長構成を維持する。

ASM上のファイル
ASMエクステント

extentextent

プライマリ・エクステント

FAILGROUP 1

セカンダリ・エクステント

FAILGROUP 2

FAILGROUP ≒ 1つのストレージ筐体
32

Copyright © 2023, Oracle and/or its affiliates

extentセカンダリ・エクステント

FAILGROUP 3

FAILGROUP nASMのファイル配置コンセプト

Stripe And Mirror Everything (S.A.M.E.)
ファイルを分割し、• すべてのストレージ・デバイスに均等に分散する ⇒Stripe• ミラーは異なる障害グループ(FAILGROUP)のストレージ・デバイスに配置する ⇒Mirror
そしてストレージ・デバイスが増減してもリバランスすることでStripeとMirrorを維持する
ASM上のファイル

プライマリ・エクステント

異なるデバイスにミラーリングextentextentASMエクステント

extentセカンダリ・エクステント

12

3

4

5678

3

6

1

74

2

85

すべてのデバイスにストライピング
33

Copyright © 2023, Oracle and/or its affiliates

ファイルの破損検出と自動修復
ASMファイルの破損が検出されるとセカンダリ・エクステントから読み取って処理継続および自動修復
1. プライマリ・エクステントの破損を検出した

Oracleサーバー・プロセス
oracle2. セカンダリ・エクステントから読み取りエラーを返さず処理継続
SGA

3. 正常エクステントのデータで破損個所を修復
プライマリ・エクステント

34

Copyright © 2023, Oracle and/or its affiliates

1

2

3

3

1

1

ASMディスク・グループ

セカンダリ・エクステント

Recovery Manager (RMAN)
破損検査付きバックアップおよびリストア・リカバリ

Oracle Databaseの2種類の物理バックアップ手法

推奨はRMANrman
oracleデータファイル（コピー元）RMANクライアント
Oracleサーバー・プロセス

バックアップ（コピー先）

スナップショット
スプリット・ミラー

コピー元ボリューム

バックアップ・ボリューム

Recovery Manager (RMAN)

ユーザー管理バックアップ• Oracle付属のバックアップ・ツール• Oracleサーバー・プロセスがデータベースのファイルにアクセスする仕組みを使ってファイルをコピー• Oracleインスタンス管理下で行われる操作• RMAN以外の方法でコピーするすべての手法• Oracleインスタンスがコピーを関知しない• OSのファイル・コピー・コマンド• ストレージ機能のスナップショットやスプリット・ミラー

36

Copyright © 2023, Oracle and/or its affiliates

ファイル・コピー中のブロック破損検査
確実にリカバリするための"Recovery" Managerrman
oracleデータファイル（コピー元）RMANクライアント
Oracleサーバー・プロセス

バックアップ（コピー先）

Recovery Manager (RMAN)• コピー時に破損検査が行われる• 破損が伝搬しない• バックアップしたファイルの破損検査も可能

37

Copyright © 2023, Oracle and/or its affiliates

スナップショット
スプリット・ミラー

コピー元ボリューム

バックアップ・ボリューム

ユーザー管理バックアップ• 破損領域がそのままコピーされる• バックアップも破損している場合がある• 誤った単位でボリュームをコピーしているとリカバリ時になってはじめてリカバリ不能に気付く

(Active) Data Guard
最新のREDO情報をリモート・データベースに転送してリカバリ継続

オンラインREDOログ・ファイルが格納されているストレージが全損すると (再掲)
INSERT
UPDATE
DELETE

時刻t0
時刻t1 ストレージ障害発生
INSERT
INSERT
UPDATEUPDATE
DELETE
DELETE
アーカイブREDOログ
オンラインREDOログ
バックアップ(データファイルのコピー)

データベース本体用ストレージ

リカバリ(REDOログの適用)
リストア(データファイルの書き戻し)

最新のトランザクション
情報を失う
時間

39

Copyright © 2023, Oracle and/or its affiliates

REDO情報が生成されたら即時に別のサーバーに転送：(Active) Data Guard

プライマリ・データベース用ストレージが全損しても最新のREDO情報が別の場所にある
ネットワーク

メモリー(REDOログ・バッファ)上にREDO情報が生成されたら転送開始

REDOログ・バッファ

プライマリ・データベース・サーバー

オンラインREDOログ・ファイル• 更新の履歴
プライマリ・データベース用ストレージ
40

Copyright © 2023, Oracle and/or its affiliates

スタンバイ・データベース・サーバー

スタンバイREDOログ・ファイル• プライマリのREDO情報の受信

スタンバイ・データベース用ストレージ

(Active) Data Guard：プライマリ・データベースと全く同じ内容になる

プライマリ・データベースのREDO情報でデータファイルをリカバリし続ける
ネットワーク

REDOログ・バッファ

プライマリ・データベース・サーバー

スタンバイ・データベース・サーバー
リカバリ継続オンラインREDOログ・ファイル• 更新の履歴
プライマリ・データベース用ストレージ
41

Copyright © 2023, Oracle and/or its affiliates

データファイルスタンバイ・データベース用ストレージ

(Active) Data Guard：リモートでリストア＆リカバリを継続
プライマリ・データベース
INSERT
UPDATE
DELETE

時刻t0
INSERT
UPDATE
DELETE

INSERT
UPDATE
DELETE
オンラインREDOログ

バックアップ(データファイルのコピー)

REDO転送スタンバイ・データベース

REDO転送リカバリ(REDOログの適用)
リストア(データファイルの書き戻し)

最新のトランザクション
情報が複製される
時間

42

Copyright © 2023, Oracle and/or its affiliates

Zero Data Loss Recovery Appliance (ZDLRA)
Oracle Database専用のバックアップ・アプライアンス
RMANバックアップ+最新のREDO情報の複製

Data Guard REDO転送の仕組みをバックアップ用サーバーにも実装：ZDLRA

プライマリ・データベース用ストレージが全損しても最新のREDO情報が別の場所にある
ネットワーク

メモリー(REDOログ・バッファ)上にREDO情報が生成されたら転送開始※ZDLRAでのREDO転送は非同期(ASYNC)モード

REDOログ・バッファ

プライマリ・データベース・サーバー

オンラインREDOログ・ファイル• 更新の履歴
プライマリ・データベース用ストレージ
44

Copyright © 2023, Oracle and/or its affiliates

アーカイブREDOログ・ファイル• プライマリのREDO情報の受信

Zero Data Loss Recovery Appliance
RMANバックアップ+Data Guard REDO転送

Zero Data Loss Recovery Appliance：データファイルのバックアップ+REDO転送
プライマリ・データベースINSERTUPDATE
DELETE

時刻t0
INSERT
INSERT
UPDATEUPDATE
DELETE
DELETE
アーカイブREDOログ
オンラインREDOログ
バックアップ(データファイルのコピー)

REDO転送ZDLRA

REDO転送通常のバックアップがカバーできる範囲(データファイルとアーカイブREDOログ・ファイルのコピー)

REDO転送最新のトランザクション
情報が複製される
Zero Data Loss
時間

45

Copyright © 2023, Oracle and/or its affiliates

Oracle Databaseはなぜデータの複製をOracleソフトウェアでやろうとするのか

Oracle Databaseの歴史はデータ破損との闘い
Oracleインスタンス

破損検査↓
破損伝搬の抑止↓自動修復• データ構造がOracle Databaseとして正しいかを検査できるのはOracle自身しかない• ある階層から別の階層に移動させるとき検査される• 破損が次の階層に伝搬しない• データの複製がある場合は自動修復を試みる

実装バージョン

46

機能名機能Oracle8

RMAN

バックアップ/リストア

Oracle9i

Data Guard

REDO情報を別サーバーに転送

Oracle 10g

ASM

ストレージの冗長化と自動修復

Oracle 11g

Exadata

Oracle専用ストレージがデータ構造を検査

Oracle 11g

Active Data Guard

Data Guard+自動修復

Oracle 12c

ZDLRA

RMANバックアップ+REDO転送

Copyright © 2023, Oracle and/or its affiliatesデータベースのバックアップ・リカバリ
Database Management System• ストレージに障害が発生することを想定している• データ本体のバックアップ + バックアップ以後の更新履歴の組み合わせで目標復旧時点(RTO)を0にできる
データがソフトウェア的に破損することがある• ストレージ・ハードウェアが故障していなくとも• データ破損を検出できない階層は破損を次の階層に伝搬させる
Oracle Databaseのデータ構造として正しいかを検査できるのはOracleソフトウェアのみ• Oracle Databaseがデータの複製機能をストレージ機能ではなくソフトウェアで持つ理由• 破損伝搬の抑止と自動修復• バックアップ:Recovery Manager (RMAN)• ミラー:
Automatic Storage Management (ASM)• レプリケーション:
Active Data Guard
47

Copyright © 2023, Oracle and/or its affiliates