ニフクラ ブログ

ニフクラ/FJ Cloud-Vやクラウドの技術について、エンジニアが語るブログです。

ニフクラOVM環境でAcronisを利用してバックアップ/リストアを実施してみた

こんにちは、CRE部 技術支援チームです。

ニフクラではOracle DatabaseライセンスのBYOL(Bring Your Own License)が可能な環境を利用できる、ニフクラOVMを提供しています。
今回はAcronis Cyber Protect Cloudを利用して、ニフクラOVM環境でデータのバックアップとリストアを行った検証手順をご紹介します。

構成イメージ

構成図

前提条件

本記事は、以下の前提知識がある方を想定しています。

  • ニフクラの基本的なコントロールパネルの操作、サービスを利用する知識
  • Linuxサーバー、Windowsサーバーの基本的な操作、知識
  • Oracle Databaseのバックアップ・リストアを含めた基本的な操作、知識

利用リソース

本検証を実施するにあたり、利用したニフクラのリソース情報に関して以下に記載します。

※各リソースのアクセス制限に関しては、ニフクラのファイアウォール等を用いて適切に設定の上実施しています。

リソース リソース名 数量
プライベートLAN OVMpvlan 1
ルーター(SNAT、DNAT用) OvmRouter 1
サーバー(NFS用)(サーバーOS:Rocky Linux 8.5)
IPアドレス:192.168.1.5
OVMnfs 1
OVMサーバー
(サーバーOS:Windows Server 2019 )
IPアドレス:192.168.1.11
OVMwin01 1

検証概要

今回の検証ではAcronisを利用してOracleのデータ領域のバックアップ/リストアが実施できることを確認します。
また、リストア時にRPO(Recovery Point Objective)を0に近づけられるように、REDOログを外部に出力する構成にします。
REDOログの外部出力先はIaaSで構築したNFSサーバーとします。今回はあくまで検証用のNFSサーバーであり、Oracleのサポート対象ではありません。

データ・ログの配置場所

 
今回の検証では以下の図のようにデータ、REDOログ、制御ファイルを配置します。
オンラインREDOログをNFSサーバー上に出力するために、Oracle Direct NFS を利用します。
アーカイブREDOログ、制御ファイルについてはWindowsのNFSクライアント機能でNFSサーバーを利用します。

検証の流れ

 
検証の全体の流れは以下の通りです。

  1. 事前準備
    1. サーバーを初期状態に戻せるようにするため、Acronisをセットアップしてホスト全体のバックアップを取得します。
  2. バックアップ検証
    1. Oracleのインストール、データベースの作成を実施します。
    2. リストア確認のためのテストデータを定期的に登録するように設定します。
    3. Oracle Direct NFS機能のセットアップ、REDOログ等の出力先追加設定を実施します。
    4. Acronisでデータ領域のみのバックアップを取得します。
    5. バックアップ取得後のテストデータ登録を確認して、バックアップ時点とデータの差分があることを確認します。
  3. リストア検証
    1. 事前準備で取得したバックアップを利用してサーバー全体を初期状態にします。
    2. 再度Oracleのインストール、データベースの作成等を行います。
    3. バックアップ検証「4.」のデータ領域のバックアップとNFSサーバー上のREDOログ、制御ファイルを利用してリストアを実施します。
    4. リストア後、バックアップ検証「5.」で確認したデータが復旧していることを確認します。

事前準備

OVMサーバーの準備

 
Oracleインストール前の準備作業を実施します。

  • NFSクライアントのインストール
     
    Windowsの「サーバーマネージャー」 を起動し、「役割と機能の追加」からNFSクライアントのインストールを実施します。
     

  • Acronisエージェントをインストール
     
    Acronisの設定方法についてはユーザーズガイドを参照ください。
     

  • マシン全体のバックアップを取得
     
    リストア検証の際にOracleインストール前のサーバー(初期化したサーバー)から検証を試行するため、Acronisでマシン全体のバックアップを取得します。

バックアップ検証

Oracleのセットアップ

 

  • Oracleのインストール、データベースの作成
     
    今回の検証ではそれぞれ以下のバージョン・設定値を使用しています。
項目
Oracle Databaseの
バージョン
19c
グローバル・データベース名 GDB
プラガブル・データベース名 PDB
Oracle_home c:\app\oracle\product\19.3.0\dbhome_1
データベース・ファイルの
位置
d:\oradata\GDB
  • アーカイブログの有効化

オンラインバックアップを取得できるようにするためにアーカイブログモードを有効化します。
有効化後、データベースをオープンします。

SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
SQL> alter pluggable database all open;
  • リストア実施時の確認用データの登録

テストデータを登録するためにテーブルを作成し、データを登録します。

SQL> alter session set container = PDB;
SQL> create table testtable(name varchar2(64),created timestamp);
SQL> insert into testtable(name,created) values('test',systimestamp);
SQL> commit;
SQL> select * from testtable;
  • テストデータ登録用のスクリプト作成

テストデータ登録用のスクリプトを作成します。
今回は c:\app\oracle のディレクトリ内に作成します。

  • insert.bat
@echo off
cd c:\app\oracle
sqlplus -s system/XXXXXX@pdb @insert.sql
  • insert.sql
insert into testtable(name,created) values('test',systimestamp);
exit

※タスクスケジューラーでこの insert.bat を定期実行するようにを設定し、1分毎にデータ登録を行うようにしておきます。

Acronisのバックアップで利用するスクリプトの用意

 
Acronisバックアップの開始・終了時にOracleのバックアップモードを切り替えるためのスクリプトを用意します。
今回は c:\app\oracle のディレクトリ内に作成します。

  • backup-start.bat
REM バックアップ開始 
rman target system/XXXXXX @backup-start.rcv 
  • backup-end.bat
REM バックアップ終了 
rman target system/XXXXXX @backup-end.rcv 
  • backup-start.rcv
run{
  alter database begin backup;
}
  • backup-end.rcv
run{
  alter database end backup;
}

Acronisのバックアップ設定

 
Oracleデータ領域のバックアップ取得のための設定を作成します。
ここではマシン全体ではなく、データディレクトリのあるボリュームのみのバックアップを設定します。
以下にポイントのみを記載します。設定項目の詳細はユーザーズガイドを参照ください。

バックアップの対象は「ディスク/ボリューム」を指定します。
対象はOracleのデータディレクトリのあるボリューム(今回はD:)を指定します。

バックアップオプションでは「データ取り込みの前後に実行するコマンド」を選択し、用意したスクリプトを指定します。

 

ここまでの作業で、Acronisを利用した定期的なバックアップが実施可能となっています。
今回はデータの耐障害性を高めるため、さらにREDOログなどのファイルを外部のNFSサーバーに出力する設定を行います。

NFSサーバーの準備

 
サーバー(OVMnfs)でNFSサーバーの稼働に必要な設定を行います。

  • パッケージのインストール
# yum -y install nfs-utils
  • 共有用ディレクトリの作成
# mkdir /nfsv3
# chmod a+w /nfsv3
  • 設定ファイルの作成
# vi /etc/exports
/nfsv3 192.168.1.1/24(rw,async,no_wdelay,insecure,root_squash,insecure_locks,sec=sys,anonuid=1024,anongid=100)
  • 設定の反映・確認
# exportfs -a
# exportfs
/nfsv3          192.168.1.1/24
  • NFSサーバーの起動・自動起動設定
# systemctl start nfs-server
# systemctl enable nfs-server
  • ファイル出力先ディレクトリの作成
    Oracleで使用するファイル出力先ディレクトリを作成します。
# mkdir /nfsv3/archivelog
# mkdir /nfsv3/controlfile
# mkdir /nfsv3/onlinelog
# chmod a+w /nfsv3/archivelog
# chmod a+w /nfsv3/controlfile
# chmod a+w /nfsv3/onlinelog

NFSクライアントの確認

 
WindowsからNFSサーバーにアクセスできることを確認します。

  • NFSサーバーへの接続確認
     
    エクスプローラーを起動し、
    \\192.168.1.5\nfsv3 (192.168.1.5 はNFSサーバーのIPアドレス)
    にアクセスできることを確認します。

Oracle Direct NFSの設定

 
WindowsでオンラインREDOログファイルをNFSサーバー上に出力できるようにするために、Oracle Direct NFSの設定を行います。
設定内容の詳細についてはOracleのDatabaseインストレーション・ガイド(他社サイトへのリンクです)を参照ください。

  • oranfstabの作成

以下のパスで設定ファイルを作成します。
c:\app\oracle\product\19.3.0\dbhome_1\dbs\oranfstab
記載する内容は以下の通りです。

server: OVMnas                          ←NASサーバー名
path: 192.168.1.5                        ←NASサーバーのIPアドレス
local: 192.168.1.11                      ←OVMサーバーのIPアドレス
nfs_version: nfsv3                        ←NFSのバージョンを指定
export: /nfsv3 mount: d:\oradata\nfsdata1  ←マウント先のパス指定
  • dllファイルの移動・コピー

エクスプローラーで c:\app\oracle\product\19.3.0\dbhome_1\bin に移動して以下のファイル操作を実施します。

・oraodm19.dll を oraodm19.dll.orig にリネーム
・oranfsodm19.dll を oraodm19.dll のファイル名でコピー

  • Oracle Direct NFS の有効化

コマンドプロンプトを起動して、以下のコマンドを実行します。

set ORACLE_HOME=c:\app\oracle\product\19.3.0\dbhome_1  
cd c:\app\oracle\product\19.3.0\dbhome_1\bin
enable_dnfs.bat
  • oracleの再起動
SQL> shutdown immediate
SQL> startup
  • 接続確認
     
    テスト用のファイルを作成します。
SQL> create tablespace test_tbs datafile 'd:\oradata\nfsdata1\test_tbs.dbf' size 10M;

表領域が作成されました。

※NFS上にファイルが作成されることを確認します。  

テスト用ファイルを削除します。

SQL> drop tablespace test_tbs including contents and datafiles;

表領域が削除されました。

※NFS上のファイルが削除されることを確認します。

オンラインREDOログの出力追加

 
Oracle Direct NFSで設定したパスでログの出力設定を追加します。  

  • 現在の設定を確認
SQL> select group#, member from v$logfile;
  • ログの出力設定を追加

各グループにNFS上のパスを追加します。

SQL> alter database add logfile member 'd:\oradata\nfsdata1\onlinelog\redo01_01.log' to group 1;
SQL> alter database add logfile member 'd:\oradata\nfsdata1\onlinelog\redo01_02.log' to group 2;
SQL> alter database add logfile member 'd:\oradata\nfsdata1\onlinelog\redo01_03.log' to group 3;
  • 設定を確認
SQL> select group#, member from v$logfile;

以下のようにパスが追加されていることを確認します。

アーカイブログの出力追加

 
パラメータファイルを修正して、アーカイブログの出力先ディレクトリを追加します。

  • Oracleを停止
SQL> shutdown immediate
  • パラメータファイルの修正
     
    パラメータファイルを修正するため、バイナリ方式のSPFILEからテキスト方式のPFILEに変換します。
SQL> create pfile from spfile;

以下のファイルが生成されるので、テキストエディタで開きます。
c:\app\oracle\product\19.3.0\dbhome_1\database\INITGDB.ORA

log_archive_dest_1,log_archive_dest_2の設定をファイルの末尾に追加します。

*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST'
*.log_archive_dest_2='location=\\192.168.1.5\nfsv3\archivelog'

※NFSサーバー上のパスは直接指定します。Oracle Direct NFSのパス指定だと動作しませんでした。
 
変更後、ファイルを上書き保存します。

修正したパラメータファイルをバイナリ方式のSPFILEに変換します。

SQL> create spfile from pfile;
  • Oracleを起動
SQL> startup
  • アーカイブログの出力先の確認
SQL> select dest_id,dest_name,destination from v$archive_dest where dest_id=1 or dest_id=2;

以下のようにパスが追加されていることを確認します。

制御ファイルの出力追加

 
パラメータファイルを修正して、制御ファイルのパスを追加します。

  • Oracleを停止
SQL> shutdown immediate
  • パラメータファイルの修正
     
    パラメータファイルを修正するため、バイナリ方式のSPFILEからテキスト方式のPFILEに変換します。
SQL> create pfile from spfile;

以下のファイルが生成されるので、テキストエディタで開きます。
c:\app\oracle\product\19.3.0\dbhome_1\database\INITGDB.ORA

control_filesの設定の末尾に制御ファイルのパスを追加します。

*.control_files='D:\ORADATA\GDB\CONTROLFILE\O1_MF_K9CKZSST_.CTL','D:\FAST_RECOVERY_AREA\GDB\CONTROLFILE\O1_MF_K9CKZSVS_.CTL','\\192.168.1.5\nfsv3\controlfile\O1_MF_K9CKZSST_.CTL'

※ここで追加したのは「,'\192.168.1.5\nfsv3\controlfile\O1_MF_K9CKZSST_.CTL'」の部分。
※NFSサーバー上のパスは直接指定します。Oracle Direct NFSのパス指定だと動作しませんでした。
 
変更後、ファイルを上書き保存します。

修正したパラメータファイルをバイナリ方式のSPFILEに変換します。

SQL> create spfile from pfile;
  • 制御ファイルのコピー
     
    ローカルディスク上の制御ファイルを追加設定した制御ファイルのパスにコピーします。
     
    コピー元
    D:\ORADATA\GDB\CONTROLFILE\O1_MF_K9CKZSST_.CTL
    コピー先
    \\192.168.1.5\nfsv3\controlfile\O1_MF_K9CKZSST_.CTL
     

  • Oracleを起動

SQL> startup
  • 制御ファイルの場所の確認
SQL> select name from v$controlfile;

以下のように制御ファイルが追加されていることを確認します。

Acronisでデータ領域のバックアップを取得

 
Acronisのバックアップ設定で作成した設定を利用してリストアに使用するデータ領域のバックアップを取得します。

リストア検証

リカバリ直前データの確認

 
リストア後に直前までのREDOログが反映できていることを確認するため、バックアップ取得後のデータが登録されていることを確認します。

SQL> alter session set container = PDB;
SQL> select * from testtable;

サーバー初期化

 
事前準備で取得したAcronisのバックアップからシステム全体をOracleインストール前の状態に戻します。
復元方法についてはユーザーズガイドを参照ください。

Oracleのインストール、データベースの作成

 
Oracleインストール前の状態に戻っているので、最初と同じようにOracleのインストール・データベースの作成を行います。
データベース名やデータディレクトリの設定も最初と同じ値を設定します。
データベース作成後、Oracleは停止しておきます。

Acronisからデータ復元

 
Acronisで取得したデータ領域のバックアップを復元します。
復元後、以下のディレクトリ内のファイルが復元されていることを確認します。

d:\oradata
d:\fast_recovery_area

パラメータファイルの修正

 
パラメータファイルを修正するためバイナリ方式のSPFILEからテキスト方式のPFILEに変換します。

SQL> create pfile from spfile;

以下のファイルが生成されるので、テキストエディタで開きます。
c:\app\oracle\product\19.3.0\dbhome_1\database\INITGDB.ORA

control_filesの各ファイル名を復元後のファイル名に合わせて修正します。
control_filesの設定の末尾にNFSサーバー上の制御ファイルのパスを追加します。

*.control_files='D:\ORADATA\GDB\CONTROLFILE\O1_MF_K9CKZSST_.CTL','D:\FAST_RECOVERY_AREA\GDB\CONTROLFILE\O1_MF_K9CKZSVS_.CTL','\\192.168.1.5\nfsv3\controlfile\O1_MF_K9CKZSST_.CTL'

※「,'\\192.168.1.5\nfsv3\controlfile\O1_MF_K9CKZSST_.CTL'」の部分を追加し、「.CTL」のファイル名は実際のファイル名に合わせる
 
log_archive_dest_1、log_archive_dest_2の設定をファイルの最後に追加します。

*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST'
*.log_archive_dest_2='location=\\192.168.1.5\nfsv3\archivelog'

変更後、ファイルを上書き保存します。

修正したパラメータファイルをバイナリ方式のSPFILEに変換します。

SQL> create spfile from pfile;

制御ファイルのコピー

 
Oracle起動時に各制御ファイルに差分があるとMOUNTができないため、nfsサーバー上にある最新の制御ファイルをコピーして復元したファイルに上書きします。  

エクスプローラーで以下のパスにアクセスします。
\\192.168.1.5\nfsv3\controlfile

「.CTL」ファイルをコピーして、以下のファイルに上書きします。
d:\fast_recovery_area\GDB\CONTROLFILE*_.CTL
d:\oradata\GDB\CONTROLFILE*_.CTL
 
※「.CTL」のファイル名はDB作成時に自動生成されるので、適宜読み替えます。

Oracle Direct NFSの設定

 
最初と同じ手順でOracle Direct NFSの設定を行います。

※ Oracleはリカバリ実施時に起動するため、ここではOracleの再起動の前までの手順を実施します。

リカバリ実施

  • マウントモードでOracleを起動
SQL> startup mount
  • データファイルのステータスを確認
SQL> select name, status from v$datafile;

以下のようにSTATUSがSYSTEMかONLINEになっていることを確認する。  

  • オンラインREDOログの設定確認
SQL> select group#, member from v$logfile;

正しいパスが設定されていることを確認する。
 

  • アーカイブログの設定確認
SQL> select dest_id,dest_name,destination from v$archive_dest where dest_id=1 or dest_id=2;

以下のようにパスが設定されていることを確認します。  

  • リカバリの実施
SQL> set autorecovery on
SQL> recover database;
メディア・リカバリが完了しました。

エラー無く完了することを確認する。

  • データベースのオープン
SQL> alter database open;
  • プラガブルDBのオープン
SQL> alter pluggable database all open;

データ確認

サーバー初期化前に確認したテストデータが参照できることを確認します。

SQL> alter session set container = PDB;
SQL> select * from testtable;

まとめ

今回はAcronisを利用してOVM環境のバックアップを取得するパターンを検証しました。RMANコマンドを利用してバックアップを作成するよりも短時間でバックアップでき、RMANで必要となる一時領域が不要になることがメリットになると思います。
また、REDOログをNFSサーバー上にも追加出力することで、リカバリ時に障害直前のデータに戻せることが検証できました。
今回の構成にすることでRPOを0に近づけられる反面、以下のようなデメリットがありますので利用を検討する場合はご注意ください。

  • Oracleサーバーの正常動作のためにNFSサーバーの正常動作が必須になるため、単一障害点が増えます。
  • 常にNFSサーバーへのアクセスが必要になるため、外部サーバーに対する処理が増えることでOracleの処理性能が頭打ちになる可能性があります。

OVM環境でのバックアップ方法の一つとして、本検証を参考にしていただければ幸いです。

注意事項

  • 本記事に記載されている会社名、製品名等の固有名詞は各社の商号、登録商標または商標です。
  • 本記事の他社サイトへのリンクにつきまして、リンク切れの際はご容赦ください。
  • 本記事で記載した各サービス/ニフクラの機能等は、2022年6月時点の情報です。ご利用の際は、各サービス/ニフクラの機能の最新情報をご確認ください。
  • 本記事については検証結果の一つとなります。実際に構成を検討されるときは、それぞれの要件を鑑みて十分に検証を実施してください。
  • 本記事ではOS上の操作についても記載していますが、ニフクラではOS以上はご利用者様の責任範囲となりますのでご留意ください。