OCI Classic Object Storeからのデータベースのリカバリ

この記事では、Oracle Database Backup Moduleによって作成され、Oracle Cloud Infrastructure Object Storage Classicに格納されたバックアップを使用して、データベースをリカバリする方法について説明します。

このトピックでは、次の用語が使用されています:

  • ソース・データベース: Object Storage Classic内のデータベース・バックアップ。
  • ターゲット・データベース: Oracle Cloud InfrastructureのDBシステム上の新しいデータベース。

前提条件

次のものが必要になります:

  • Oracle Cloud Infrastructure Object Storage Classicのサービス名、アイデンティティ名、コンテナ、ユーザー名およびパスワード。
  • Object Storage Classicへのバックアップの際にパスワードベースの暗号化が使用された場合は、バックアップ・パスワード。
  • ソース・データベースID、データベース名、一意のデータベース名(ストレージを設定するために必要)。
  • ソース・データベースがTransparent Data Encryption (TDE)で構成されている場合は、ウォレットおよびウォレット・パスワードのバックアップが必要になります。
  • データベース・リンクに対して設定するtnsnames。
  • ソース・データベースOracle_homeのOpatch lsinventoryの出力(参照用)。
  • ソース・データベース・ホームのsqlpatchディレクトリのコピー。ターゲット・データベースにこれらのパッチが含まれていない場合は、ロールバックの際にこれが必要です。

DBシステムでのストレージの設定

  1. DBシステムにSSH接続します。
    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. opcとしてログインし、sudoでrootユーザーに切り替えます。ハイフンを含むsudo su -を使用して、rootユーザーのプロファイルを起動します。これによって、PATHがdbcliディレクトリ(/opt/oracle/dcs/bin)に設定されます。
    login as: opc
    sudo su - 
  3. dbstorageコマンドを使用して、DATA、RECOおよびREDOストレージ用のディレクトリを設定します。次の例では、tdetestデータベースに10GBのACFSストレージを作成します。
    dbcli create-dbstorage --dbname tdetest --dataSize 10 --dbstorage ACFS 

    ノート:

    バージョン11.2データベースを移行する場合は、ACFSストレージを指定する必要があります。
  4. dbstorageコマンドを使用して、ストレージIDをリストします。このIDは、次のステップで必要になります。
    dbcli list-dbstorages
    出力:
    ID                                       Type   DBUnique Name        Status
    ---------------------------------------- ------ -------------------- ----------
    9dcdfb8e-e589-4d5f-861a-e5ba981616ed     Acfs   tdetest              Configured
  5. dbstorageコマンドを前のステップで取得したストレージIDとともに使用して、DATA、RECOおよびREDOの場所をリストします。
    dbcli describe-dbstorage --id 9dcdfb8e-e589-4d5f-861a-e5ba981616ed
    出力:
    DBStorage details
    ----------------------------------------------------------------
                         ID: 9dcdfb8e-e589-4d5f-861a-e5ba981616ed
                    DB Name: tdetest
              DBUnique Name: tdetest
             DB Resource ID:
               Storage Type: Acfs
              DATA Location: /u02/app/oracle/oradata/tdetest
              RECO Location: /u03/app/oracle/fast_recovery_area/
              REDO Location: /u03/app/oracle/redo/
                      State: ResourceState(status=Configured)
                    Created: August 24, 2016 5:25:38 PM UTC
                UpdatedTime: August 24, 2016 5:25:53 PM UTC 
  6. DATA、RECOおよびREDOの場所を書き留めます。これらは、後でデータベースにdb_create_file_destdb_create_online_log_destおよびdb_recovery_file_destパラメータを設定するために必要になります。

ORACLE_HOMEの選択

データベースのリストアに使用するORACLE_HOMEを決定し、ORACLE_BASE、ORACLE_HOMEおよびPATHが適切に設定されたそのホームに切り替えます。ORACLE_HOMEは、まだデータベースに関連付けられていない必要があります。

既存のORACLE_HOMEのリストを取得するにはdbhomeコマンドを使用し、ORACLE_HOMEが空であることを確認するにはdatabaseコマンドを使用します。新しいORACLE_HOMEを作成するには、dbhomeコマンドを使用します。

ソース・データベースのウォレットのコピー

ソース・データベースがTDEで構成されていない場合、この項は省略してください。

  1. DBシステムで、oracleユーザーになります:
    sudo su - oracle
  2. 次のディレクトリが存在しない場合は作成します:
    mkdir /opt/oracle/dcs/commonstore/wallets/tde/<db_unique_name>
  3. ソース・データベースのewallet.p12ファイルを、前のステップで作成したディレクトリにコピーします。
  4. ターゲット・ホストで、$ORACLE_HOME/network/admin/sqlnet.oraに次の行が含まれていることを確認します:
    ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME)))

    この行がファイルに存在しない場合は追加します。(これが新しいホームであり、このホスト上にまだデータベースがまだ作成されていない場合、この行が存在しない可能性があります。)

  5. パスワードベースのウォレットから自動ログイン・ウォレットを作成して、リストアおよびリカバリ操作中にウォレットの自動オープンを許可します。

    バージョン12.1以降のデータベースの場合は、ADMINISTER KEY MANAGEMENTコマンドを使用します:

    $cat create_autologin_12.sh
    
    #!/bin/sh
    if [ $# -lt 2 ]; then
            echo "Usage: $0 <dbuniquename><remotewalletlocation>"
            exit 1;
    fi
    
    mkdir /opt/oracle/dcs/commonstore/wallets/tde/$1
    cp $2/ewallet.p12* /opt/oracle/dcs/commonstore/wallets/tde/$1
    rm -f autokey.ora
    echo "db_name=$1"  > autokey.ora
    autokeystoreLog="autologinKeystore_`date +%Y%m%d_%H%M%S_%N`.log"
    echo "Enter Keystore Password:"
    read -s keystorePassword
    echo "Creating AutoLoginKeystore -> "
    sqlplus "/as sysdba"  <<EOF
    spool $autokeystoreLog
    set echo on
    startup nomount pfile=autokey.ora
    ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE
    FROM KEYSTORE '/opt/oracle/dcs/commonstore/wallets/tde/$1' -- Keystore location
    IDENTIFIED BY "$keystorePassword";
    shutdown immediate;
    EOF

    cwallet.ssoの権限をoracle:asmadminからoracle:oinstallに調整します。

    ls -ltr /opt/oracle/dcs/commonstore/wallets/tde/<db_unique_name>
    出力:
    total 20
    -rw-r--r-- 1 oracle oinstall 5680 Jul  6 11:39 ewallet.p12
    -rw-r--r-- 1 oracle asmadmin 5725 Jul  6 11:39 cwallet.sso

    バージョン11.2のデータベースの場合は、orapkiコマンドを使用します:

    orapki wallet create -wallet wallet_location -auto_login [-pwd password]

Oracle Database Backup Moduleのインストール

バックアップ・モジュールのJARファイルはDBシステムに含まれていますが、インストールする必要があります。

  1. DBシステムにSSH接続して、opcとしてログインし、oracleユーザーになります。
    ssh -i <path to SSH key used when launching the DB System> opc@<DB System IP address or hostname>
    sudo su - oracle
  2. バックアップ・モジュールopc_install.jarファイルが含まれるディレクトリに変更します。
    cd /opt/oracle/oak/pkgrepos/orapkgs/oss/<version>/
  3. バックアップ・モジュールをインストールするには、Oracle Database Backup Cloud Serviceの使用Oracle Database Cloud Backup Module for OCI Classicのインストールで説明されているコマンド構文を参照してください。

環境変数の設定

データベースのRMANおよびSQL*Plusセッションに対する次の環境変数を設定します:

ORACLE_HOME=<path of Oracle Home where the database is to be restored>
ORACLE_SID=<database instance name>
ORACLE_UNQNAME=<db_unique_name in lower case>
NLS_DATE_FORMAT="mm/dd/yyyy hh24:mi:ss"

RMAN SBTチャネルの割当て

リストア操作ごとに、SBTチャネルを割り当て、SBT_LIBRARYパラメータをlibopc.soファイルの場所に設定し、OPC_FILEパラメータをopc_sbt.oraファイルの場所に設定します。例:

ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/<ORACLE_HOME>/dbs/opc_sbt.ora)';

これらのファイルの詳細は、Oracle Database Backup Cloud Serviceの使用Oracle Database Cloud Backup Module for OCI Classicのインストール時に作成されるファイルを参照してください。

復号化が有効になっていることの確認

すべてのRMANリストア・セッションに対して復号化が有効になっていることを確認します。

set decryption wallet open identified by <keystore password>;

詳細は、暗号化バックアップの復号化に必要なパスワードの指定を参照してください。

spfileのリストア

次のサンプル・シェル・スクリプトでは、spfileがリストアされます。$dbID変数を、リストアするデータベースのdbidに設定します。デフォルトでは、spfileは$ORACLE_HOME/dbs/spfile<sid>.oraにリストアされます。

rman target / <<EOF

spool log to "`date +%Y%m%d_%H%M%S_%N`_dbid_${dbID}_restore_spfile.log"
startup nomount
set echo on
run {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
SET DBID=$dbID;
RESTORE SPFILE FROM AUTOBACKUP;
shutdown immediate;
EOF

データベース・パラメータの設定

  1. データベースを非マウント・モードで起動します。
    startup nomount
  2. spfileを更新し、次のパラメータを変更します。
    • データベース・ストレージ・タイプがACFSの場合は、DBシステムでのストレージの設定の説明に従って、dbcli describe-dbstorageコマンド出力から取得したDATA、RECOおよびREDOの場所を使用します。

      alter system set db_create_file_dest='/u02/app/oracle/oradata/' scope = spfile;
      alter system set db_create_online_log_dest_1='/u03/app/oracle/redo' scope = spfile;
      alter system set db_recovery_file_dest='/u03/app/oracle/fast_recovery_area' scope = spfile;
    • データベース・ストレージ・タイプがASMの場合:

      alter system set db_create_file_dest='+DATA' scope = spfile;
      alter system set db_create_online_log_dest_1='+RECO' scope = spfile;
      alter system set db_recovery_file_dest='+RECO' scope = spfile;
    • db_recovery_file_dest_sizeが設定されていないか、正しく設定されていません:

      alter system set db_recovery_file_dest_size=<sizeG> scope=spfile;
    • audit_file_destを正しい値に設定します:

      alter system set audit_file_dest=/u01/app/oracle/admin/<db_unique_name in lower case>/adump
  3. control_filesパラメータを削除します。制御ファイルの作成には、Oracle Managed Files (OMF)のパラメータが使用されます。
    alter system reset control_files scope=spfile;
  4. 新しく追加されたパラメータを使用して、非マウント・モードでデータベースを再起動します。
    shutdown immediate
    startup nomount

制御ファイルのリストア

次のサンプル・シェル・スクリプトをご使用の環境に合せて変更して、制御ファイルをリストアします。$dbID変数を、リストアするデータベースのdbidに設定します。SBT_LIBRARYを、バックアップ・モジュールをインストールしたときに-libDirパラメータで指定された場所に設定します。OPC-PFILEを-configFileパラメータで指定された場所に設定します。デフォルト値はORACLE_HOME/dbs/opcSID.oraです。

rman target / <<EOF

spool log to "`date +%Y%m%d_%H%M%S_%N`_dbid_${dbID}_restore_controlfile.log"
set echo on
run {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/<Backup Module libDir>/libopc.so ENV=(OPC_PFILE=/<Backup Module configFile>/opcSID.ora)';
SET DBID=$dbID;
RESTORE CONTROLFILE FROM AUTOBACKUP;
alter database mount;
}

exit;
EOF

データベースのリストア

  1. バックアップをプレビューして検証します。データベースがマウントされ、RMANはリストアされた制御ファイルからバックアップを検出できるようになります。このステップによって、アーカイブ・ログのリストが存在することと、バックアップ・コンポーネントをリストアできることを確認できます。

    次の例では、SBT_LIBRARYおよびOPC_PFILEをご使用の環境の必要に応じて変更します。

    rman target / <<EOF
    
    spool log to "`date +%Y%m%d_%H%M%S_%N`_restore_database_preview.log"
    set echo on
    run {
        ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        ALLOCATE CHANNEL c2 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        ALLOCATE CHANNEL c3 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        restore database validate header preview;
    }

    出力を確認し、エラー・メッセージがある場合は問題の原因を調査します。

  2. set newnameを使用してリストアをリダイレクトして、データ・ファイルをOMF形式でリストアし、switch datafile allを使用して、制御ファイルを新しいデータ・ファイルのコピーで更新できるようにします。
    rman target / <<EOF
    
    spool log to "`date +%Y%m%d_%H%M%S_%N`_restore_database_preview.log"
    set echo on
    run {
        ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        ALLOCATE CHANNEL c2 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        ALLOCATE CHANNEL c3 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        set newname for database to new;
        restore database;
        switch datafile all;
        switch tempfile all;
        recover database;
    }

    このリカバリでは、最新の使用可能なアーカイブ・ログ・バックアップの使用を試みますが、エラーで失敗します。例:

    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of recover command at 07/20/2016 12:09:02
    RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 22 and starting SCN of 878327
  3. 未完了のリカバリを完了するには、RMAN-06054メッセージに示されている順序番号とスレッド番号を使用してリカバリを実行します。例:
    recover database until sequence 22 thread 1;

ログのリセット

ログをリセットします。

alter database open resetlogs;

データベースの登録の準備

データベースを登録する前に:

  1. データベースのCOMPATIBLEパラメータ値が許容値であることを確認してください。この値が最小値より小さい場合は、データベースの互換性をアップグレードするまでデータベースを登録できません。
  2. データベースがリスナーおよびサービス名に登録されていることを確認します。
    lsnrctl services
  3. 新しいデータベース用のパスワード・ファイルがリストアまたは作成されたことを確認します。
    ls -ltr $ORACLE_HOME/dbs/orapw<oracle sid>

    このファイルが存在しない場合は、orapwdユーティリティを使用して作成します。

    orapwd file=<$ORACLE_HOME/dbs/orapw<$ORACLE_SID>> password=<sys password>
  4. リストアされたデータベースが読取り/書込みモードでオープンされていることを確認します。
    select open_mode from v$database;

    コマンド出力に読取り/書込みモードが示されている必要があります。dbcli register-databaseコマンドはデータパッチの実行を試みますが、これには読取り/書込みモードが必要です。PDBが存在する場合は、データパッチがPDB上で動作するように、PDBも読取り/書込みモードになっている必要があります。

  5. リストアされたデータベースのoracleホームから、次のコマンドを実行して、SYSへの接続を確認します:
    conn sys/<password>@//<hostname>:1521/<database service name>

    この接続は、後でデータベースを登録するために必要です:接続の問題を修正してから続行します。

  6. SQL*Plusコマンドを使用して、spfileでデータベースが実行されていることを確認します。
    SHOW PARAMETERS SPFILE
  7. (オプション) dbcliコマンドライン・インタフェースを使用してデータベースのバックアップを管理する場合は、新規または既存のバックアップ構成を、登録時または登録後に、移行済のデータベースに関連付けることができます。バックアップ構成によって、データベースのバックアップ保存先とリカバリ・ウィンドウが定義されます。backupconfigコマンドを使用して、バックアップ構成を作成、リストおよび表示します。
  8. ソース・データベースのフォルダ$ORACLE_HOME/sqlpatchをターゲット・データベースにコピーします。これにより、dbcli register-databaseコマンドで競合するパッチをロールバックできるようになります。

    ノート:

    バージョン11.2のデータベースを移行している場合は、データベースの登録後に追加のステップが必要になります。詳細は、バージョン11.2のデータベースでのパッチのロールバックを参照してください。

DBシステムでのデータベースの登録

databaseコマンドは、リストアされたデータベースをdcs-agentに登録して、dcs-agentスタックによって管理できるようにします。

ノート:

dbcli register-databaseコマンドは、2ノードのRAC DBシステムでは使用できません。

rootユーザーとして、dbcli register-databaseコマンドを使用して、データベースをDBシステムに登録します。例:

dbcli register-database --dbclass OLTP --dbshape odb1 --servicename tdetest --syspassword

出力:

Password for SYS:
{
  "jobId" : "317b430f-ad5f-42ae-bb07-13f053d266e2",
  "status" : "Created",
  "message" : null,
  "reports" : [ ],
  "createTimestamp" : "August 08, 2016 05:55:49 AM EDT",
  "description" : "Database service registration with db service name: tdetest",
  "updatedTime" : "August 08, 2016 05:55:49 AM EDT"
}

tnsnames.oraの更新

バックアップの場所でtnsnames.oraを確認し、クローン・データベースで使用されるデータベース・リンクを確認してから、関連する接続文字列を$ORACLE_HOME/network/admin/tnsnames.oraにあるクローン・データベース・ファイルに追加します。

バージョン11.2のデータベースでのパッチのロールバック

バージョン11.2のデータベースでは、sqlpatchアプリケーションは自動化されません。したがって、ソース・データベースに適用された暫定パッチ(以前の呼称は「個別」パッチ)のうち、インストールされたPSUに含まれていないものは、ターゲット・データベースで手動でロールバックする必要があります。データベースの登録後、次に示すように、catbundle.sqlスクリプトを実行してから、対応するPSUパッチ(またはPSUパッチのオーバーレイ・パッチ)を指定してpostinstall.sqlスクリプトを実行します。

ヒント :

一部の暫定パッチには、$ORACLE_HOME/sqlpatchディレクトリと同様に$ORACLE_HOME/rdbms/adminディレクトリに書き込まれるファイルが含まれる場合があります。データベースをOCI環境に移行する前に、パッチのread-meの手順を使用してソース・データベースでこれらのパッチをロールバックすることをお薦めします。これらのパッチのロールバックについてヘルプが必要な場合は、Oracle Supportに連絡してください。
  1. DBシステムで、dbcli list-dbhomesコマンドを使用して、バージョン11.2のデータベース・ホームのPSUパッチ番号を見つけます。次のサンプル・コマンド出力では、PSUパッチ番号は「DB Version」列の2つ目の番号です:
    dbcli  list-dbhomes
    出力:
    ID                                   Name               DB Version                             Home Location                             Status 
    ------------------------------------ -----------------  -------------------------------------  ----------------------------------------- ----------
    59d9bc6f-3880-4d4f-b5a6-c140f16f8c64 OraDB11204_home1	11.2.0.4.160719 (23054319, 23054359)   /u01/app/oracle/product/11.2.0.4/dbhome_1 Configured

    (前述の例の最初のパッチ番号23054319は、データベース・ホームのOCWコンポーネントに対応するものです。)

  2. lsinventoryコマンドを使用して、オーバーレイ・パッチ(ある場合)を見つけます。次の例では、パッチ番号24460960が、23054359 PSUパッチのオーバーレイ・パッチです。
    $ORACLE_HOME/OPatch/opatch lsinventory
    出力:
    ...
    Installed Top-level Products (1): 
    
    Oracle Database 11g                                                  11.2.0.4.0
    There are 1 products installed in this Oracle Home.
    
    
    Interim patches (5) :
    
    Patch  24460960     : applied on Fri Sep 02 15:28:17 UTC 2016
    Unique Patch ID:  20539912
       Created on 31 Aug 2016, 02:46:31 hrs PST8PDT
       Bugs fixed:
         23513711, 23065323, 21281607, 24006821, 23315889, 22551446, 21174504
       This patch overlays patches:
         23054359
       This patch needs patches:
         23054359
       as prerequisites
  3. SQL*Plusを起動し、catbundle.sqlスクリプトを実行します。例:
    startup 
    connect / as sysdba
    @$ORACLE_HOME/rdbms/admin/catbundle.sql psu apply
    exit
  4. 前のステップのオーバーレイ・パッチ番号を使用して、sqlpatchを適用します。例:
    connect / as sysdba
    @$ORACLE_HOME/sqlpatch/24460960/postinstall.sql 
    exit

ノート:

ソース・データベースに1回限りのパッチがインストールされており、それらのパッチがクラウド環境にインストールされているPSUの一部ではない場合、これらの1回限りのパッチに対応するSQL変更をロールバックする必要があります。SQL変更をロールバックするには、ソース環境の$ORACLE_HOME/sqlpatch/<patch#>/postdeinstall.SQLスクリプトをクラウド環境にコピーし、postdeinstall.SQLスクリプトを実行します。

リストア後のチェックリスト

データベースがリストアされ、DBシステムに登録されたら、次のチェックリストを使用して結果を確認し、リストア後のカスタマイズを実行します。

  1. データベース・ファイルがOMF形式でリストアされたことを確認します。
  2. databaseコマンドの出力にそのデータベースがリストされていることを確認します。
  3. データベース内にある次の外部参照を確認し、必要に応じて更新します:
    • 外部表: ソース・データベースで外部表が使用されている場合は、そのデータをバックアップしてターゲット・ホストに移行します。
    • ディレクトリ: リストアされたデータベースの必要に応じてデフォルト・ディレクトリをカスタマイズします。
    • データベース・リンク: ORACLE_HOMEのtnsnames.oraファイルですべての必要なTNSエントリが更新されていることを確認します。
    • 電子メールおよびURL: データベースで使用される電子メール・アドレスおよびURLに、DBシステムからまだアクセスできることを確認します。
    • スケジュール済ジョブ: ソース・データベースでスケジュールされているジョブを確認し、リストアされたデータベースで同様のジョブを必要に応じてスケジュールします。
  4. データベースを登録したときにバックアップ構成を関連付けた場合は、backupコマンドを使用してテスト・バックアップを実行します。
  5. リストアされたデータベースにCDBおよびPDBが含まれている場合は、パッチがすべてのPDBに適用されていることを確認します。