Azure Files を使用して Azure Linux VM で Oracle Database をバックアップおよび復旧する
適用対象: ✔️ Linux VM
この記事では、Azure 仮想マシン (VM) で実行されている Oracle データベースをバックアップおよび復元するためのメディアとしての Azure Files の使用方法について説明します。 この記事の手順は、Oracle 12.1 以降に対してテストされました。
この記事では、Oracle Recovery Manager (RMAN) を使用して、サーバー メッセージ ブロック (SMB) プロトコルを使用して VM にマウントされた Azure ファイル共有にデータベースをバックアップします。 バックアップ メディアに Azure Files を使用することは、コスト効率とパフォーマンスの点で優れています。 ただし、大規模なデータベースの場合は、Azure Backup の方が優れたソリューションを提供します。
前提条件
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
バックアップと復旧プロセスを実行するには、最初にインストール済みの Oracle Database のインスタンスがある Linux VM を作成する必要があります。 Oracle 12.x 以降を使用することをお勧めします。
「Azure VM の Oracle Database インスタンスの作成」の手順に従って、Oracle Database インスタンスを作成します。
データベース環境を準備する
VM で Secure Shell (SSH) セッションを作成するには、次のコマンドを使用します。
<publicIpAddress>
を VM のパブリック アドレスの値で置き換えます。ssh azureuser@<publicIpAddress>
ルート ユーザーに切り替えます。
sudo su -
次のように
oracle
ユーザーを /etc/sudoers ファイルに追加します。echo "oracle ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
この手順では、vmoracle19c という仮想マシンで実行されている Oracle インスタンス (test) があることを前提としています。
oracle
ユーザーに切り替えます。sudo su - oracle
接続する前に、次のように環境変数
ORACLE_SID
を設定します。export ORACLE_SID=test;
次のコマンドを使用して、今後のサインインのために
oracle
ユーザーの .bashrc ファイルにORACLE_SID
変数を追加する必要もあります。echo "export ORACLE_SID=test" >> ~oracle/.bashrc
Oracle リスナーがまだ実行されていない場合は、起動します。
lsnrctl start
出力は次の例のようになるはずです。
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 18-SEP-2020 03:23:49 Copyright (c) 1991, 2019, Oracle. All rights reserved. Starting /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 19.0.0.0.0 - Production System parameter file is /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora Log messages written to /u01/app/oracle/diag/tnslsnr/vmoracle19c/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 18-SEP-2020 03:23:49 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/vmoracle19c/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) The listener supports no services The command completed successfully
次のように高速回復領域の場所を作成します。
mkdir /u02/fast_recovery_area
データベースに接続します。
sqlplus / as sysdba
データベースがまだ実行されていない場合は、起動します。
SQL> startup
次のように高速回復領域のデータベース環境変数を設定します。
SQL> alter system set db_recovery_file_dest_size=4096M scope=both; SQL> alter system set db_recovery_file_dest='/u02/fast_recovery_area' scope=both;
データベースが
ARCHIVELOG
モードになっていて、オンライン バックアップが有効であることを確認します。次のようにログ アーカイブの状態を確認します。
SQL> SELECT log_mode FROM v$database; LOG_MODE ------------ NOARCHIVELOG
ログ アーカイブが
NOARCHIVELOG
モードの場合は、SQL Plus で次のコマンドを実行します。SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; SQL> ALTER DATABASE ARCHIVELOG; SQL> ALTER DATABASE OPEN; SQL> ALTER SYSTEM SWITCH LOGFILE;
テーブルを作成して、バックアップおよび復元操作をテストします。
SQL> create user scott identified by tiger quota 100M on users; SQL> grant create session, create table to scott; SQL> connect scott/tiger SQL> create table scott_table(col1 number, col2 varchar2(50)); SQL> insert into scott_table VALUES(1,'Line 1'); SQL> commit; SQL> quit
Azure Files にバックアップする
Azure Files にバックアップするには、これらの手順を実行します。
Azure Files を設定する
このセクションでは、Oracle RMAN を使用して、Oracle データベースを Azure Files にバックアップします。 Azure ファイル共有は、クラウド内に存在するフル マネージドのファイル共有です。 これらには SMB プロトコルまたはネットワーク ファイル システム (NFS) プロトコルのどちらかを使用してアクセスできます。
以下の手順は、VM へのマウントに SMB プロトコルを使用するファイル共有の作成をカバーします。 NFS を使用してマウントする方法については、「NFS 共有の作成」を参照してください。
Azure ファイル共有をマウントする場合は、cache=none
オプションを使用してファイル共有データのキャッシュを無効にします。 oracle
ユーザーが共有に作成されたファイルを所有していることを保証するために、uid=oracle
および gid=oinstall
オプションを設定します。
次のようにストレージ アカウントを設定します。
Azure portal で、[+ リソースの作成] を選択した後に、[ストレージ アカウント] を検索して選択します。
[ストレージ アカウントの作成] ペインで次の操作を行います。
- [リソース グループ] では、既存のリソース グループである [rg-oracle] を選択します。
- [ストレージ アカウント名] では、「oracbkup1」と入力します。
- [場所] が、リソース グループ内の他のすべてのリソースと同じリージョンに設定されていることを確認します。
- [パフォーマンス] を [Standard] に設定します。
- [アカウントの種類] では、[StorageV2 (汎用 v2)] を選択します。
- [レプリケーション] には [ローカル冗長ストレージ (LRS)] を選択します。
[詳細] タブを選択します。[Azure Files] で、[大きいファイルの共有] を [有効] に設定します。 [確認と作成]、[作成] の順に選択します。
ストレージ アカウントが作成されたら、リソースに移動し、[ファイル共有] を選択します。
[+ ファイル共有] を選択した後に、[新しいファイル共有] パネルで次の操作を行います。
[名前] では、「orabkup1」と入力します。
[クォータ] を [10240] ギビバイト (GiB) に設定します。
クォータは、ファイル共有を拡張できる上限を反映します。 この例では Standard Storage を使用しているため、リソースは従量課金制であり、プロビジョニングされません。 クォータを 10 テビバイト (TiB) に設定しても、使用量を超えるコストは発生しません。 バックアップ戦略で、より多くのストレージが必要な場合は、すべてのバックアップを保持するための適切なレベルにクォータを設定します。
[レベル] で、[トランザクション最適化] を選択します。
[作成] を選択します。
ファイル共有が作成されたら、[ファイル共有設定] ペインで [orabkup1] を選択します。
[接続] タブを選択して [接続] パネルを開いた後に、[Linux] タブを選択します。表示されている SMB プロトコルを使用してファイル共有をマウントするためのコマンドをコピーします。
Azure ファイル共有を VM にマウントする
マウント ポイントを作成します。
sudo mkdir /mnt/orabackup
資格情報を設定します。
if [ ! -d "/etc/smbcredentials" ]; then sudo mkdir /etc/smbcredentials fi
次のコマンドを実行します。
<Your Storage Account Key1>
を先ほど取得したストレージ アカウント キーで置き換えます。if [ ! -f "/etc/smbcredentials/orabackup1.cred" ]; then sudo bash -c 'echo "username=orabackup1" >> /etc/smbcredentials/orabackup1.cred' sudo bash -c 'echo "password=<Your Storage Account Key1>" >> /etc/smbcredentials/orabackup1.cred' fi
資格情報ファイルのアクセス許可を変更します。
sudo chmod 600 /etc/smbcredentials/orabackup1.cred
そのマウントを /etc/fstab ファイルに追加します。
sudo bash -c 'echo "//orabackup1.file.core.windows.net/orabackup /mnt/orabackup cifs nofail,vers=3.0,credentials=/etc/smbcredentials/orabackup1.cred,dir_mode=0777,file_mode=0777,serverino,cache=none,uid=oracle,gid=oinstall" >> /etc/fstab'
次のように SMB プロトコルを使用して Azure ファイル共有をマウントするコマンドを実行します。
sudo mount -t cifs //orabackup1.file.core.windows.net/orabackup /mnt/orabackup -o vers=3.0,credentials=/etc/smbcredentials/orabackup1.cred,dir_mode=0777,file_mode=0777,serverino,cache=none,uid=oracle,gid=oinstall
次の例のようなエラーが発生した場合、Linux ホストに Common Internet File System (CIFS) パッケージがインストールされていない可能性があります。
mount: wrong fs type, bad option, bad superblock on //orabackup1.file.core.windows.net/orabackup
CIFS パッケージがインストールされているかどうかを確認するには、次のコマンドを実行します。
sudo rpm -qa|grep cifs-utils
コマンドが出力を返さない場合は、次のコマンドを使用して CIFS パッケージをインストールします。 次に Azure ファイル共有をマウントするための
mount
コマンドを再実行します。sudo yum install cifs-utils
次のコマンドを使用して、ファイル共有が適切にマウントされていることを確認します。
df -h
出力はこの例のようになります。
$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 3.3G 0 3.3G 0% /dev tmpfs 3.3G 0 3.3G 0% /dev/shm tmpfs 3.3G 17M 3.3G 1% /run tmpfs 3.3G 0 3.3G 0% /sys/fs/cgroup /dev/sda2 30G 9.1G 19G 34% / /dev/sdc1 59G 2.7G 53G 5% /u02 /dev/sda1 497M 199M 298M 41% /boot /dev/sda15 495M 9.7M 486M 2% /boot/efi tmpfs 671M 0 671M 0% /run/user/54321 /dev/sdb1 14G 2.1G 11G 16% /mnt/resource tmpfs 671M 0 671M 0% /run/user/54322 //orabackup1.file.core.windows.net/orabackup 10T 0 10T 0% /mnt/orabackup
データベースをバックアップする
このセクションでは、Oracle RMAN を使用して、データベースとアーカイブ ログの完全バックアップを取ります。 その後、バックアップをバックアップ セットとして、先ほどマウントした Azure ファイル共有に書き込みます。
Azure Files マウント ポイントにバックアップするように RMAN を構成します。
rman target / RMAN> configure snapshot controlfile name to '/mnt/orabkup/snapcf_ev.f'; RMAN> configure channel 1 device type disk format '/mnt/orabkup/%d/Full_%d_%U_%T_%s'; RMAN> configure channel 2 device type disk format '/mnt/orabkup/%d/Full_%d_%U_%T_%s';
この例では、RMAN バックアップ ピースのサイズを 4 GiB に制限します。 ただし、RMAN バックアップの
maxpiecesize
の値は最大 4 TiB まで上げられます。これは、Azure Standard ファイル共有と Premium ファイル共有のファイル サイズ上限です。 詳細については、「Azure Files のスケーラビリティおよびパフォーマンスのターゲット」を参照してください。RMAN> configure channel device type disk maxpiecesize 4000G;
構成変更の詳細を確認します。
RMAN> show all;
バックアップを実行します。 次のコマンドは、アーカイブ ログ ファイルを含めた完全なデータベース バックアップを、圧縮形式のバックアップ セットとして取得します。
RMAN> backup as compressed backupset database plus archivelog;
Oracle RMAN を使ってデータベースをオンラインでバックアップし、バックアップは Azure Files に格納されました。 Azure Files にバックアップを保存しているため、データベースを複製する必要がある場合に、他の VM からバックアップにアクセスできます。
データベースのバックアップに RMAN と Azure Files を使うと、多くの利点があります。 バックアップと復元の時間は、データベースのサイズに関連しています。 大規模なデータベースの場合、これらの操作にかなりの時間がかかる可能性があります。
Azure Backup を通してアプリケーション整合性 VM バックアップを使用するという代替案があります。 このメカニズムでは、スナップショット テクノロジを使用して、データベース サイズに関係しない高速バックアップを実行します。 Recovery Services コンテナーとの統合により、Oracle Database バックアップのクラウド ストレージが提供されるため、他の VM や他の Azure リージョンからそれらにアクセスできます。
データベースを復元して復旧する
Oracle インスタンスをシャットダウンします。
sqlplus / as sysdba SQL> shutdown abort ORACLE instance shut down.
データベース データファイルを削除します。
cd /u02/oradata/TEST rm -f *.dbf
次のコマンドでは、RMAN を使用して、不足しているデータファイルを復元し、データベースを復旧します。
rman target / RMAN> startup mount; RMAN> restore database; RMAN> recover database; RMAN> alter database open;
次のようにデータベースの内容が完全に復旧されたことを確認します。
RMAN> SELECT * FROM scott.scott_table;
これで、Azure Linux VM での Oracle Database 19c データベースのバックアップと復旧が完了しました。
VM の削除
VM が必要なくなったら、次のコマンドを使用して、リソース グループ、VM、およびすべての関連リソースを削除できます。
az group delete --name rg-oracle