Windows 環境で Oracle データベースを保護して復元する

始める前に

Windows 環境で Oracle データベースを検出して保護し、マウントする前に、次のことを確認してください。

  1. データベース サーバーで次の設定を確認します。

    1. Oracle データベースと Oracle リスナーが稼働している(Windows サービスを確認)。

    2. SID という名前の tns エントリがあることを確認します。tnsnames.ora ファイルは

      %ORACLE_HOME%\network\admin
      
    3. 次のコマンドを実行して、tns エントリが有効であることを確認します。

      %ORACLE_HOME%\bin\tnsping <SID>
      
  2. ログモードがアーカイブログ モードに設定されているかどうかを確認します。

    sql> archive log list
    

    データベースがアーカイブ ログ モードでない場合は、アーカイブ ログ モードに戻します。

    sql> shutdown immediate;
    sql> startup mount;
    sql> alter database archivelog;
    sql> alter database open;
    
  3. データベース変更ブロック トラッキングを有効にします。データベース BCT がオフの場合、増分バックアップ時間に影響します。変更ブロックのトラッキング機能は Oracle Enterprise Edition で使用できます。SQL クエリを実行して、変更ブロックのトラッキングが有効になっていることを確認します。クエリを実行します。

    sqlplus / as sysdba
    sql> select * from v$block_change_tracking;
    

変更ブロック トラッキングを有効にするには:

    sql> alter database enable block change tracking
    using file '<Oracle home directory>\orcl.bct';

Windows 環境で Oracle データベースをバックアップする

Windows 環境で Oracle データベースをバックアップする手順は次のとおりです。

  1. Oracle データベースのアプリケーションの詳細と設定を設定します。

  2. バックアップ プランを適用してデータベースを保護します。

報告されている問題

Oracle 19c SQLPlus(sqlplus.exe)が、exit コマンドを実行するときに Windows でハングすることがあります(Doc ID 2820655.1)。このバグは Windows に固有のものです。Oracle は、この問題が SQLPlus バージョン 19.10、19.11、19.12 で発生することを確認しています。Oracle は次のソリューションを提供しました。

  • SQL*Plus 21.1 以降を使用する(または)
  • パッチ 31466370 を適用します。このパッチは 19.11 と 19.13 で利用できます。

アーカイブログがバックアップと DR で保護されていない場合、Windows 環境の Oracle データベースを RMAN を使用してスケジュールされたバックアップ ポイントに手動で復元する

Windows 環境で Oracle データベース全体を復元するには:

  1. Oracle データベースを標準マウントとしてマウントするで説明されているように、バックアップと DR からデータベース バックアップ スナップショットを Oracle サーバーにマウントします。

  2. バックアップと DR のマウントされたボリュームのパラメータ ファイルを使用して、データベース環境を設定し、マウントされていない状態でデータベースを起動します(E: にマウントされたデータベース ボリュームの場合など)。

    sqlplus / as sysdba
    sql> startup nomount pfile='E:\<sid>___backup.ora';
    
  3. pfile から spfile を作成します。

    sql> create spfile='%ORACLE_HOME%\database\spfile<sid>.ora'
    from pfile='E:\<sid>___backup.ora';
    
  4. spfile が nomount 状態のデータベースを起動します。

    sql> shutdown immediate;
    sql> startup nomount;
    
  5. バックアップと DR のマウントされたボリュームから RMAN を使用して制御ファイルを復元します。

    rman target /
    rman> restore controlfile from 'E:\cf-D_<sid>-id_<id>.ctl';
    
  6. データベースをマウントします。

    rman> alter database mount;
    
  7. バックアップと DR にマウントされたボリュームからデータファイルとアーカイブ ファイル フォルダを RMAN にカタログに登録します。

    rman> run
    {
    catalog start with 'E:\datafile' noprompt;
    catalog start with 'E:\archivelog' noprompt;
    }
    
  8. データベースを復元して復元します。

    rman> run
    {
    restore database;
    recover database;
    }
    
  9. ログをリセットするオプションを使用してデータベースを開きます。

    rman> alter database open resetlogs;
    

バックアップと DR で保護されたアーカイブログのローリング フォワードを使用して、RMAN を使用して Windows 環境の Oracle データベースを手動でスケジュール設定されたバックアップ ポイントに復元する

  1. ソース データベース サーバーからイメージをマウントして復元します。Oracle データベースを標準マウントとしてマウントするで説明されているように、バックアップと DR からバックアップ スナップショットを Oracle サーバーにマウントします。

  2. バックアップと DR のマウントされたボリュームのパラメータ ファイルを使用して、データベース環境を設定し、マウントされていない状態でデータベースを起動します。この例では、データベースのバックアップ イメージは E:\ にマウントされ、保護されたアーカイブ ログは Z: にマウントされています。

       sqlplus / as sysdba
    
       startup nomount pfile='E:\<sid>___backup.ora';
    
  3. pfile から spfile を作成します。

    sql> create spfile='%ORACLE_HOME%\database\spfile<sid>.ora' from
    pfile='E:\<sid>___backup.ora';
    
  4. spfile を nomount 状態でデータベースを起動します。

    ```sql
    shutdown immediate;
    startup nomount;
    ```
    
  5. バックアップと DR にマウントされたアーカイブ ログ イメージから RMAN を使用して制御ファイルを復元します。

    ```rman
    rman target /
    rman> restore controlfile from 'Z:\cf-D_<sid>-id_<id>.ctl';
    ```
    
  6. データベースをマウントします。

    ```rman
    rman> alter database mount;
    ```
    
  7. バックアップと DR にマウントされたデータベース イメージとアーカイブログ イメージから、データファイルとアーカイログ フォルダを RMAN にカタログに登録します。

    ```rman
    rman> run
    {
    catalog start with 'E:\datafile' noprompt;
    catalog start with 'E:\archivelog' noprompt;
    catalog start with 'Z:\archivelog' noprompt;
    }
    ```
    
  8. データベースを復元して復元します。

    ```rman
    rman> run
    {
    restore database;
    recover database;
    }
    ```
    

    特定の時点の復元の場合は、次のように recover コマンドを実行します。

    ```rman
    rman> run
     {
      restore database;
      recover database until time "to_date('<time stamp>','yyyymmddhh24mi')";
     }
     ```
    
  9. ログをリセットするオプションを使用してデータベースを開きます。

    ```rman
    rman> alter database open resetlogs;
    ```
    

    データベースは読み取りと書き込みに使用できます。

データベース ボリュームのマウントを監視するウォッチ スクリプト

アプリケーション対応のマウントを作成する場合は、ウォッチ スクリプトを使用して、バックアップと DR からマウントされているボリュームと、実行中の Oracle プロセスを表示できます。アプリケーション認識型マウントについては、Oracle データベースを仮想アプリケーションとしてマウントするをご覧ください。

アプリケーション対応のマウントを実行する場合は、このウォッチ スクリプトを使用できます。スクリプトの場所は C:\Program Files\Backup and DR\scripts にする必要があります。Windows ホストで実行されるスクリプトは、.bat ファイルまたは .vbs ファイルである必要があります。

    ```Windows
    @echo off
    :loop
    echo. > watchtemp
    echo ------------------ >> watchtemp
    echo  Oracle Processes >> watchtemp
    echo ------------------ >> watchtemp
    tasklist /svc | findstr oracle >> watchtemp
    echo. >> watchtemp
    echo ------------------ >> watchtemp
    echo   Backup and DR Mounts >> watchtemp
    echo ------------------ >> watchtemp
    wmic volume get label, name | findstr Backup and DR >> watchtemp
    echo. >> watchtemp
    cls
    type watchtemp
    timeout 2 > null
    goto loop
    ```

出力は次のようになります。

    Oracle Processes
    ------------------
    oracle.exe                    1492 OracleServiceORCL
    oracle.exe                    3768 OracleServiceTestDB
    oracle.exe                     872 OracleServiceTestDB2
    ------------------
      Backup and DR Mounts
    ------------------
    Backup and DR-Backup-ORCL    D:\mount_1