Oracle RMAN（Recovery Manager）について

Oracle RMAN（Recovery Manager）
===
Oracle RMAN 導入のための備忘録。
※参考シェルスクリプトを追記。

---

## 概要

* Oracle Databaseでバックアップおよびリカバリ・タスクを実行し、バックアップ計画の管理を自動化するユーティリティ
* 専用のRMANコマンドを使用して操作
* OSプロンプトからRMANを起動してコマンドラインで実行、またはOracle Enterprise Manager（EM）のGUIを使用して実行

---

## メリット

* バックアップ・ファイルの形式として、OS上のファイルと同等の「イメージ・コピー」と、未使用領域を含まない効率的な「バックアップ・セット」（RMAN独自形式）を選択可能

* 全体バックアップや増分（差分増分/累積増分）バックアップ等、様々なバックアップの取得が可能

* 設定した保存方針に従い、バックアップの管理をOracle Database自身が行う。<br>手動で行うバックアップの複雑さ、人為的ミスを最小限に抑え、確実なバックアップ管理を低コストで実現

* Oracle Databaseがリカバリに必要なバックアップを自動的に選択。<br>データ・リカバリ・アドバイザが、障害の診断および修復方法を提示。<br>障害復旧の大半を占める、障害解析に要する時間を削減し、MTTR（平均リカバリ時間）の大幅短縮が実現

* 破損ブロックの検証、未使用データの圧縮（スキップ）、暗号化、ブロックメディア・リカバリ等々、Oracle Databaseのバックアップ・リカバリを効率的に実施する仕組みを利用可能<br><font color="red">※Enterprise Editionのみ利用可能、もしくはOptionが必要な機能あり</font>

---

## バックアップ方法

|観点|一貫性バックアップ（コールドバックアップ）|非一貫性バックアップ（ホットバックアップ）|
| :-------- | :-------- | :-------- |
|方式|データベースがオープンされていない状態でファイルをコピー|インスタンス起動中にファイルをコピー<br><font color="red">※アーカイブログモードで運用している場合のみ取得可能</font>|
|復旧|正常にシャットダウンした後（showdown abort以外）にバックアップを取得しておけば、ファイルをリストアするだけでバックアップ取得時点に復旧可能|取得したバックアップは一貫性を持たない状態であるため、リカバリを行って一貫性を復元する処理が必要|
|適用|夜間や休日に停止するシステム。<br>停止後マウント状態で起動してから一貫性バックアップを取得|24時間稼動のシステム。<br>夜間のアクセスが少ない時間帯に非一貫性バックアップを取得|

---

## RMANの基本コマンド

コマンドラインで実行する基本的なコマンドについて説明。

### (1) RMANに接続

管理者権限（SYSDBA権限）で接続。

```
% rman target sys/sysのパスワード
```

Oracle管理用のOSユーザであれば、SYSユーザでなくてもOS認証で操作可能。

```
% rman target /
```

### (2) 設定の表示、初期設定

#### show（表示）

<font color="green">※デフォルト値には、末尾に "# default" と表示</font>

```
# バックアップに関する設定の確認
RMAN> show all;

db_unique_name VM30のデータベースにおけるRMAN構成パラメータ:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COPY PARALLELISM 1;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE ```FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_vm30.f'; # default
```

#### configure（初期設定）

* バックアップファイルの出力先設定

出力先をデータベース構成ファイルを配置したディスクとは別のディスク上のディレクトリに設定し、ディスク障害に対応。
<font color="green">※10g以降は高速リカバリ領域（フラッシュリカバリ領域）に出力を前提とした機能があり、高速リカバリ領域使用時にはディレクトリパスを含めない設定を推奨</font>

主なFORMAT指定子

|構文要素|説明|
| :-------- | :-------- |
|%U|Oracleによって生成される一意のファイル名(デフォルト)|
|%d|データベースの名前|
|%D|現在の月の日付（DD形式）|
|%e|アーカイブ・ログのログ順序番号|
|%F|DBID、日、月、年および順序を組み合せて生成される名称|
|%N|表領域名。<font color=red>※データファイルをイメージ・コピーとしてバックアップする場合のみ有効</font>|
|%s|バックアップセット番号|
|%t|バックアップセットのタイムスタンプ|
|%T|現在の年、月および日（YYYYMMDD形式）|

```
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/disk1/%U';
```

* 保存ポリシーの設定　<font color="red">※併用不可</font>

```
# リカバリ期間ベース（リカバリ可能な過去の最大日数を基準）
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF <日数> DAYS;

# 冗長性ベース（バックアップファイルの数を基準）
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY <冗長数>;
```

* バックアップファイルの最適化（バックアップ済みのファイルをスキップ）

```
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
```

* 制御ファイルのバックアップを有効化

```
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
```

* バックアップ処理のパラレル化　<font color="red">※要Enterprise Edition？（少なくとも11gR1までは）</font>

```
RMAN> CONFIGURE DEVICE TYPE [DISK|SBT] PARALLELISM <並列度>;
```

* バックアップファイルの圧縮（デフォルトのみ）
<br><font color="red">※Oracle Advanced Compressionオプションを有効にすると、下表の圧縮レベルを選択可。
<br>　基本的に圧縮率はLOWからHIGHへと高くなるが、消費されるCPUリソースも比例する</font>

|圧縮レベル|パフォーマンスのメリットとデメリット|
| :-------- | :-------- |
|HIGH|ネットワーク速度が制限事項となる、速度の遅いネットワークでのバックアップに最適|
|MEDIUM|ほとんどの環境で推奨。圧縮率と速度の優れた組合せ|
|LOW|バックアップ・スループットへの影響が最小|

```
RMAN> CONFIGURE COMPRESSION ALGORITHM 'BASIC';
```

* バックアップファイルの暗号化（バックアップセット形式のみ）

```
RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;
```

* バックアップ暗号化アルゴリズムの構成
<br><font color="red">※指定可能な値は、V$RMAN_ENCRYPTION_ALGORITHMSで有効なもの</font>

```
RMAN> CONFIGURE ENCRYPTION ALGORITHM TO 'AES256';
```

* 設定値をデフォルト値に戻す

```
RMAN> CONFIGURE <設定項目> CLEAR;
```

### (3) backup（バックアップ実行）

* バックアップセットのバックアップ

```
# データベース全体
RMAN> BACKUP DATABASE;

# 表領域単位
RMAN> BACKUP TABLESPACE users;

# データファイル単位
RMAN> BACKUP DATAFILE 1,2
```

<font color=green>※コールドバックアップは、インスタンスのシャットダウンが必要</font>

```
# 1. Oracle インスタンスのシャットダウン
RMAN> shutdown immediate;

# 2. データベースのマウント
RMAN> startup mount;

# 3. バックアップの実行
RMAN> backup database;

# 4. データベースのオープン
RMAN> alter database open;
```

* イメージ・コピーのバックアップ

```
# データベース全体
RMAN> BACKUP AS COPY DATABASE;

# データファイル単位
RMAN> BACKUP AS COPY DATAFILE 1,2;
```

* 増分バックアップ
<br><font color="green">※基本的な運用
<br>- 週1回レベル0の増分バックアップを取得
<br>- 毎日、差分増分バックアップ、または、累積増分バックアップを取得</font>

|レベル|タイプ|説明|形式|
| :-------- | :-------- | :-------- | :-------- |
|0|-|基礎となるバックアップ。全てのブロックをバックアップするため、ファイルサイズは通常のバックアップと同等|バックアップセット、イメージコピーどちらでも可|
|1|差分増分|前回の増分バックアップ（レベル0、1の両方）以後の増分をバックアップ|バックアップセットのみ|
|1|累積増分|前回の増分バックアップ（レベル0のみ）以後の増分をバックアップ|バックアップセットのみ|

```
# レベル0（バックアップセット）
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;

# レベル0（イメージコピー）
RMAN> BACKUP AS COPY INCREMENTAL LEVEL 0 DATABASE;

# レベル1の差分増分
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;

# レベル１の累積増分
RMAN> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;
```

### (4) restore、recovery（バックアップ実行）

* データベース全体のリストア、リカバリ 

```
RMAN> SHUTDOWN;
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;
```

* 表領域単位のリストア、リカバリ
<br><font color=red>※DATAFILEへのRESTORE、RECOVERも同様のコマンドを実行</font>

```
RMAN> sql "alter tablespace users offline";
RMAN> sql "alter tablespace data offline";
RMAN> RESTORE TABLESPACE USERS, DATA;
RMAN> RECOVER TABLESPACE USERS, DATA;
RMAN> sql "alter tablespace users online";
RMAN> sql "alter tablespace data online";
```

---

## バックアップファイルの管理

* 取得済みのバックアップ確認

```
RMAN> LIST BACKUP;
```

* 不要ファイルの削除

|オプション|備考|
| :-------- | :-------- |
|RECOVERY WINDOW OF <日数> DAYS|リカバリ期間ベース|
|REDUNDANCY <冗長数>|冗長性ベース|

```
RMAN> DELETE OBSOLETE;
```

---

## データ・リカバリ・アドバイザ

障害の自動検知と通知、および復旧手順のアドバイス機能により、原因究明、解析時間を最小化することができる。

```
# 1.データベースの障害リストを参照
RMAN> list failure;

# 2.障害に対するアドバイスを取得
RMAN> advise failure;

# 3.自動修復の実行
RMAN> repair failure;
```

---

## 参考シェルスクリプト

アーカイブモード無効でのコールドバックアップ
<font color="green">※<>内は環境に合わせて修正</font>

以下環境変数は必要に応じて設定

```
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=${ORACLE_BASE}/product/12.2.0
export ORACLE_SID=<ORACLE_SID>

export LANG=ja_JP.UTF-8
export NLS_LANG=Japanese_Japan.AL32UTF8
export PATH=${PATH}:${ORACLE_HOME}/bin
```

### 累積増分バックアップ（日曜：フル、月～土曜：累積増分）

事前設定

```
# Oracle管理用のOSユーザで操作
$ rman target /

RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

RMAN> exit
```

フル（Level0）

```
#!/bin/sh

# RMAN(Level0)
rman target / << EOF
RUN
{
    shutdown immediate;
    startup mount;
    RECOVER COPY OF DATABASE WITH TAG 'INCR_UPDATE' UNTIL TIME 'SYSDATE-1';
    DELETE NOPROMPT OBSOLETE;
    BACKUP AS COPY INCREMENTAL LEVEL 0 DATABASE TAG 'INCR_UPDATE';
    alter database open;
}
EOF
```

累積差分（Level1）

```
#!/bin/sh

# RMAN(Level1)
rman target / << EOF
RUN
{
    shutdown immediate;
    startup mount;
    RECOVER COPY OF DATABASE WITH TAG 'INCR_UPDATE' UNTIL TIME 'SYSDATE-1';
    DELETE NOPROMPT OBSOLETE;
    BACKUP INCREMENTAL LEVEL 1 CUMULATIVE FOR RECOVER OF COPY WITH TAG 'INCR_UPDATE' DATABASE;
    alter database open;
}
EOF
```

---

## 参照URL

RMAN(Recovery Manager)の使い方～バックアップ、リカバリ/リストア、コマンド、接続方法
https://blogs.oracle.com/oracle4engineer/rmanrecovery-manager

実践!! バックアップ・リカバリ ～ユーザー手動 VS RMAN コマンドライン対決～
https://blogs.oracle.com/oracle4engineer/vs-rman

最低限実施すべきRMAN設定
http://cosol.jp/tech/detail/d3_highly_recommended_rman_configurations.shtml

Oracle® Databaseバックアップおよびリカバリ・ユーザーズ・ガイド 12cリリース1(12.1)
https://docs.oracle.com/cd/E57425_01/121/BRADV/toc.htm


Oracle DBA & Developer Days 2014
しばちょう先生による特別講義！RMAN Backupの運用と高速化チューニング
https://www.oracle.com/webfolder/s/delivery_production/docs/FY15h1/doc8/B2-2-print.pdf

---

## 参考書籍

プロトしてのOracle運用管理入門（初版）
https://www.amazon.co.jp/dp/4797355123