現在地

マルチテナントのバックアップ、リストアについて



羅 英雄

オラクル事業部
システムインテグレーション担当

羅 英雄

はじめに

はじめまして。NTTデータ先端技術の羅です。Oracle Exadata Database Machineなどのオラクル製品のエンジニアとして業務を行っております。今回はマルチテナント環境でのバックアップ、リストアについてご説明していきます。

データベースを運用する中で一番重要な作業はバックアップとリストアです。Oracle Database 12cからマルチテナントが投入されるようになりましたが、マルチテナントでのバックアップ、リストアも従来のRMANによる操作と大きく変わりありません。コンテナデータベース(以下 CDB)ではもちろんプラガブルデータベース(以下PDB)単位でバックアップ、リストアを行うことで柔軟に対応でき且つバックアップ時間の短縮にもつながります。
※ なお、今回ご紹介するコマンドはあくまで一例です。関連するオプション含めコマンドの詳細はマニュアル「Database Backup and Recovery User's Guide」を参照してください。

以下はCDB単位でのバックアップコマンドの例です。
CDB単位でのバックアップは従来のバックアップと変わりはありません。ルートコンテナーに接続するということ以外は既存のバックアップと 同じ方法でPDBを含むDB全体のバックアップを行うことができます。

CDB全体のバックアップ

RMAN> BACKUP DATABASE;

PDB単位でのバックアップ

PDB単位でのバックアップ、リストアの場合も大きく違いはありません。ただしPDB専用のコマンドがいくつか用意されていることと、PDB内で制限される機能があることに注意が必要です。PDB単位でバックアップを行う方法は二つです。

  • ルートコンテナーでRMANを使用したPDBのバックアップ
  • PDB内でRMANを使用したPDBのバックアップ

RMANを使用し特定のPDBを選択してPDB単位でバックアップすることができます。 CDBに接続してバックアップする場合はルートコンテナーにオラクル管理者権限を持つユーザー(sysなど)またはSYSBACKUP、SYSDBA権限を持つ共通ユーザー(COMMONユーザー)で接続してバックアップをします。

※ PDBに直接接続する際のRMANの制限事項

  • アーカイブ・ログのバックアップ
  • アーカイブ・ログの削除
  • アーカイブ・ログのバックアップの削除
  • アーカイブ・ログのリストア(必要に応じて、メディア・リカバリ中にRMANによってアーカイブ・ログがリストアされます。)
  • 共有UNDOモード使用時のPoint-in-Timeリカバリ(PITR)
  • TSPITR
  • 表のリカバリ
  • データベースの複製
  • 共有UNDOモード使用時のフラッシュバック操作
  • データ・リカバリ・アドバイザの実行
  • 不要なもののレポート/削除
  • データベースの登録
  • カタログのインポート
  • データベースのリセット
  • RMAN環境の構成

ルートコンテナーでRMANを使用したPDBのバックアップ

RMAN> BACKUP PLUGGABLE DATABASE <PDB名>;

データベースがアーカイブ・ログモードの場合はアーカイブ・ログのバックアップを同時に取得することもできます。

RMAN> BACKUP PLUGGABLE DATABASE <PDB名> PLUS ARCHIVELOG;

または複数のPDBを同時にバックアップすることも可能です。

RMAN> BACKUP PLUGGABLE DATABASE <PDB名1>,<PDB名2>;

次はPDBに接続してRMANを使用したバックアップを行う手順になります。

PDB内でRMANを使用したPDBのバックアップ

ユーザーが生成したPDBに直接接続してPDBをバックアップします。共通ユーザーまたはPDB内のローカルユーザーで接続します。
BACKUP PLUGGABLE DATABASEはCDBでのみで実行することができます。
PDB内ではBACKUP DATABASEコマンドを利用することができます。

RMAN> BACKUP DATABASE;

ただし、PDB内でバックアップをする場合にはアーカイブ・ログファイルのバックアップができません。つまりアーカイブ・ログをバックアップするためにはPDBをシャットダウンしてバックアップを行うか、オンラインでPDBのバックアップが終わった後にルートコンテナーに接続してアーカイブ・ログのバックアップを行わなければなりません。

表領域、データファイルのバックアップ

BACKUP TABLESPACEコマンドは現在接続しているコンテナーの表領域のみをバックアップします。
例えばルートコンテナーに接続して表領域をバックアップする場合は、ルートコンテナーに属している表領域をバックアップすることができます。

RMAN> BACKUP TABLESPACE <表領域名1>, <表領域名2>;

RMAN> BACKUP DATABASE;

特定PDBの表領域をバックアップするためには下記のように指定する必要があります。

RMAN> BACKUP TABLESPACE <PDB名1>:<表領域名1>,<PDB名1>:<表領域名2>,<PDB名2>:<表領域名1>;

RMAN> BACKUP DATABASE;

ルートコンテナーのみをバックアップ

またRMANではルートコンテナーのみをバックアップすることもできます。

RMAN> BACKUP DATABASE ROOT;

リストア、リカバリの場合も従来の方法と変わりはありません。CDB全体または特定のPDB、複数のPDBに対してリストア、リカバリを行うことができます。CDBの場合はRMANを利用して従来と同じコマンドでリストア、リカバリを行います。

CDB全体のリストア、リカバリ

RMAN> RUN {
 SHUTDOWN IMMEDIATE;
 STARTUP MOUNT;
 RESTORE DATABASE;
 RECOVER DATABASE;
 STARTUP;
}

PDB単位のリストア、完全リカバリもバックアップと同じく、ルートコンテナーでRMANを使用する方法とPDB内で行う方法があります。

  • ルートコンテナーでRMANを使用したPDBのリストア、完全リカバリ
  • PDB内でRMANを使用したPDBのリストア、完全リカバリ

ルートコンテナーでRMANを使用したPDBのリストアおよび完全リカバリ

RMAN> RUN { 
 ALTER PLUGGABLE DATABASE <PDB名> CLOSE;
 RESTORE PLUGGABLE DATABASE <PDB名>;
 RECOVER PLUGGABLE DATABASE <PDB名>;
 ALTER PLUGGABLE DATABASE <PDB名> OPEN;
}

バックアップと同じように特定のPDBまたは複数のPDBに対して同時に実行することができます。

RMAN> RUN {
 ALTER PLUGGABLE DATABASE <PDB名1>,<PDB名2> CLOSE;
 RESTORE PLUGGABLE DATABASE <PDB名1>,<PDB名2>;
 RECOVER PLUGGABLE DATABASE <PDB名1>,<PDB名2>;
 ALTER PLUGGABLE DATABASE <PDB名1>,<PDB名2> OPEN;
}

PDB内でRMANを使用したPDBのリストア、完全リカバリ

PDB内でのリストア、完全リカバリはCDB全体でリストア、完全リカバリを行う場合と同じコマンドを実行します。

RMAN> RUN {
 SHUTDOWN IMMEDIATE;
 STARTUP MOUNT;
 RESTORE DATABASE;
 RECOVER DATABASE;
 ALTER DATABASE OPEN;
}

表領域、データファイルのリストア、リカバリ

表領域、データファイルをリストア、完全リカバリする場合も従来の方法と大きな違いはありません。

RMAN> RUN {
 ALTER TABLESPACE USERS OFFLINE;
 RESTORE TABLESPACE USERS;
 RECOVER TABLESPACE USERS;
 ALTER TABLESPACE USERS ONLINE;
}

データファイルをリストア、完全リカバリする場合

RMAN> RUN {
 ALTER DATABASE DATAFILE <データファイル番号> OFFLINE;
 RESTORE DATAFILE <データファイル番号>;
 RECOVER DATAFILE <データファイル番号>;
 ALTER DATABASE DATAFILE <データファイル番号> ONLINE;
}

ルートコンテナーのみをリストア、完全リカバリする場合

バックアップと同様にRMANを利用してルートコンテナーのみをリストア、リカバリする RESTORE DATABASE ROOTコマンドを実行します。リカバリに関しては RECOVER DATABASE ROOTコマンドを実行します。リカバリを行うとPDBはクローズ状態になるため、手動でOPENする必要があります。

RMAN> RUN { 
 SHUTDOWN IMMEDIATE;
 STARTUP MOUNT;
 RESTORE DATABASE ROOT;
 RECOVER DATABASE ROOT;
 ALTER DATABASE OPEN;
}

PDBの不完全リカバリ

次に不完全リカバリの操作方法になります。(CDB全体の不完全リカバリは従来と同じ手順であるため省略します。)CDBで特定のPDBのPoint In Time Recovery(PITR)を行う場合も今までと同じ方法でおこなうことができます。まずPDBをCLOSEしてリストアします。その後必要な時点までリカバリを行います。その後にRESETLOGSオプションでOPENします。

RMAN> RUN { 
 ALTER PLUGGABLE DATABASE <PDB名> CLOSE;
 SET UNTIL TIME "<有効範囲内の日時>";
 RESTORE PLUGGABLE DATABASE <PDB名>;
 RECOVER PLUGGABLE DATABASE <PDB名>;
 ALTER PLUGGABLE DATABASE <PDB名> OPEN RESETLOGS;
}

PDB内ではアーカイブ・ログを使用した不完全リカバリは行えません。PDB内でのRESETLOGSでOPENする場合、コマンドは失敗します。PDBをRESETLOGSでOPENする場合にはPDBのインカネーションが変わります。

RMAN> RUN { 
 ALTER PLUGGABLE DATABASE <PDB名> CLOSE;
 SET UNTIL TIME "<有効範囲内の日時>";
 RESTORE PLUGGABLE DATABASE <PDB名>;
 RECOVER PLUGGABLE DATABASE <PDB名>;
 ALTER PLUGGABLE DATABASE <PDB名> OPEN RESETLOGS;
}

PDBはPDBのインカネーションを持ちます。PDBのインカネーションはv$pdb_incarnationで確認ができます。PDBのインカネーションはDB全体のインカネーションとは異なります。

select DB_INCARNATION#,PDB_INCARNATION#,INCARNATION_TIME,STATUS from v$pdb_incarnation;
select INCARNATION#,RESETLOGS_TIME,STATUS from v$database_incarnation;

終わりに

ここまで、マルチテナントのバックアップ、リストアについてご紹介いたしました。データベースを運用する中で一番重要な作業はバックアップとリストアです。今回は基本的なコマンドだけを紹介いたしましたが、実際のデータベースを運用する際には運用状況に合わせた適切なバックアップとリストアプランが必要になります。適切なバックアップのプランによりバックアップ時間及び復旧までの時間が決まります。またORACLEは多様な方法のバックアップとリストア方法を提供しております。バックアップ、リストアプランを立てる際にはマニュアル「Database Backup and Recovery User's Guide」をご参照ください。