Share via


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 インスタンスを作成します。

データベース環境を準備する

  1. VM で Secure Shell (SSH) セッションを作成するには、次のコマンドを使用します。 <publicIpAddress> を VM のパブリック アドレスの値で置き換えます。

    ssh azureuser@<publicIpAddress>
    
  2. ルート ユーザーに切り替えます。

    sudo su -
    
  3. 次のように oracle ユーザーを /etc/sudoers ファイルに追加します。

    echo "oracle   ALL=(ALL)      NOPASSWD: ALL" >> /etc/sudoers
    
  4. この手順では、vmoracle19c という仮想マシンで実行されている Oracle インスタンス (test) があることを前提としています。

    oracle ユーザーに切り替えます。

    sudo su - oracle
    
  5. 接続する前に、次のように環境変数 ORACLE_SID を設定します。

    export ORACLE_SID=test;
    

    次のコマンドを使用して、今後のサインインのために oracle ユーザーの .bashrc ファイルに ORACLE_SID 変数を追加する必要もあります。

    echo "export ORACLE_SID=test" >> ~oracle/.bashrc
    
  6. 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
    
  7. 次のように高速回復領域の場所を作成します。

    mkdir /u02/fast_recovery_area
    
  8. データベースに接続します。

    sqlplus / as sysdba
    
  9. データベースがまだ実行されていない場合は、起動します。

    SQL> startup
    
  10. 次のように高速回復領域のデータベース環境変数を設定します。

    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;
    
  11. データベースが、オンライン バックアップを有効にするための 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;
    
  12. テーブルを作成して、バックアップおよび復元操作をテストします。

    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 にバックアップするには、これらの手順を実行します。

  1. Azure Files を設定します。
  2. Azure Files 共有を VM にマウントします。
  3. データベースをバックアップします。
  4. データベースを復元して復旧します。

Azure Files を設定する

このセクションでは、Oracle RMAN を使用して、Oracle データベースを Azure Files にバックアップします。 Azure ファイル共有は、クラウド内に存在するフル マネージドのファイル共有です。 これらには SMB プロトコルまたはネットワーク ファイル システム (NFS) プロトコルのどちらかを使用してアクセスできます。

以下の手順は、VM へのマウントに SMB プロトコルを使用するファイル共有の作成をカバーします。 NFS を使用してマウントする方法については、「NFS 共有の作成」を参照してください。

Azure ファイル共有をマウントする場合は、cache=none オプションを使用してファイル共有データのキャッシュを無効にします。 oracle ユーザーが共有に作成されたファイルを所有していることを保証するために、uid=oracle および gid=oinstall オプションを設定します。

次のようにストレージ アカウントを設定します。

  1. Azure portal で、[+ リソースの作成] を選択した後に、[ストレージ アカウント] を検索して選択します。

    リソースを作成してストレージ アカウントを選択する場所を示すスクリーンショット。

  2. [ストレージ アカウントの作成] ペインで次の操作を行います。

    1. [リソース グループ] では、既存のリソース グループである [rg-oracle] を選択します。
    2. [ストレージ アカウント名] では、「oracbkup1」と入力します。
    3. [場所] が、リソース グループ内の他のすべてのリソースと同じリージョンに設定されていることを確認します。
    4. [パフォーマンス][Standard] に設定します。
    5. [アカウントの種類] では、[StorageV2 (汎用 v2)] を選択します。
    6. [レプリケーション] には [ローカル冗長ストレージ (LRS)] を選択します。

    ストレージ アカウントを作成するための基本的な情報を示すスクリーンショット。

  3. [詳細] タブを選択します。[Azure Files] で、[大きいファイルの共有][有効] に設定します。 [確認と作成][作成] の順に選択します。

    大きいファイルの共有を有効化するためのタブを示すスクリーンショット。

  4. ストレージ アカウントが作成されたら、リソースに移動し、[ファイル共有] を選択します。

    リソースのファイル共有を選択する場所を示すスクリーンショット。

  5. [+ ファイル共有] を選択した後に、[新しいファイル共有] パネルで次の操作を行います。

    1. [名前] では、「orabkup1」と入力します。

    2. [クォータ][10240] ギビバイト (GiB) に設定します。

      クォータは、ファイル共有を拡張できる上限を反映します。 この例では Standard Storage を使用しているため、リソースは従量課金制であり、プロビジョニングされません。 そのため、クォータを 10 テビバイト (TiB) に設定しても、使用した分以上のコストは発生しません。 バックアップ戦略で、より多くのストレージが必要な場合は、すべてのバックアップを保持するための適切なレベルにクォータを設定します。

    3. [レベル] で、[トランザクション最適化] を選択します。

    4. [作成] を選択します。

    新しいファイル共有の追加のための選択肢を示すスクリーンショット。

  6. ファイル共有が作成されたら、[ファイル共有設定] ペインで [orabkup1] を選択します。

  7. [接続] タブを選択して [接続] パネルを開いた後に、[Linux] タブを選択します。表示されている SMB プロトコルを使用してファイル共有をマウントするためのコマンドをコピーします。

    ファイル共有を Linux コンピューターに接続するためのコマンドにアクセスするためのパネルを示すスクリーンショット。

Azure ファイル共有を VM にマウントする

  1. マウント ポイントを作成します。

    sudo mkdir /mnt/orabackup
    
  2. 資格情報を設定します。

    if [ ! -d "/etc/smbcredentials" ]; then
     sudo mkdir /etc/smbcredentials
    fi
    
  3. 次のコマンドを実行します。 <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
    
  4. 資格情報ファイルのアクセス許可を変更します。

    sudo chmod 600 /etc/smbcredentials/orabackup1.cred
    
  5. そのマウントを /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'
    
  6. 次のように 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
    
  7. 次のコマンドを使用して、ファイル共有が適切にマウントされていることを確認します。

    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 ファイル共有に書き込みます。

  1. 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';
    
  2. この例では、RMAN バックアップ ピースのサイズを 4 GiB に制限します。 ただし、RMAN バックアップの maxpiecesize の値は最大 4 TiB まで上げられます。これは、Azure Standard ファイル共有と Premium ファイル共有のファイル サイズ上限です。 詳細については、「Azure Files のスケーラビリティおよびパフォーマンスのターゲット」を参照してください。

    RMAN> configure channel device type disk maxpiecesize 4000G;
    
  3. 構成変更の詳細を確認します。

    RMAN> show all;
    
  4. バックアップを実行します。 次のコマンドは、アーカイブ ログ ファイルを含めた完全なデータベース バックアップを、圧縮形式のバックアップ セットとして取得します。

    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 リージョンからそれらにアクセスできます。

データベースを復元して復旧する

  1. Oracle インスタンスをシャットダウンします。

    sqlplus / as sysdba
    SQL> shutdown abort
    ORACLE instance shut down.
    
  2. データベース データファイルを削除します。

    cd /u02/oradata/TEST
    rm -f *.dbf
    
  3. 次のコマンドでは、RMAN を使用して、不足しているデータファイルを復元し、データベースを復旧します。

    rman target /
    RMAN> startup mount;
    RMAN> restore database;
    RMAN> recover database;
    RMAN> alter database open;
    
  4. 次のようにデータベースの内容が完全に復旧されたことを確認します。

    RMAN> SELECT * FROM scott.scott_table;
    

これで、Azure Linux VM での Oracle Database 19c データベースのバックアップと復旧が完了しました。

VM の削除

VM が必要なくなったら、次のコマンドを使用して、リソース グループ、VM、およびすべての関連リソースを削除できます。

az group delete --name rg-oracle

次のステップ

高可用性 VM の作成

VM デプロイの Azure CLI サンプルを探す