機械翻訳について

OCI Classicオブジェクト・ストアからのデータベースのリカバリ

この記事では、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 SystemにSSHを実行します。
    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. opcとしてログインし、rootユーザーにsudoを実行します。 sudo su -をハイフンとともに使用して、PATHをdbcliディレクトリ(/opt/oracle/dcs/bin)に設定するrootユーザー・プロファイルを起動します。
    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. 前のステップのストレージIDとともに「Dbstorageコマンド」を使用して、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_HOMEsのリストを取得し、ORACLE_HOMEが空であることを確認するには、それぞれ「Dbhomeコマンド」および「データベース・コマンド」を使用します。 新しい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モジュールを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の使用」「OCIクラシックのOracle Database Cloud Backupモジュールのインストール時に作成されたファイル」を参照してください。

復号化がオンになっていることを確認

すべての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. データベースをnomountモードで起動します。
    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コマンドはdatapatchの実行を試行します。これには読取り/書込みモードが必要です。 PDBがある場合は、datapatchが確実に実行されるように、読取り/書込みモードである必要があります。

  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システムでのデータベースの登録

「データベース・コマンド」は、リストアされたデータベースを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/rdbms/adminディレクトリに書き込まれたファイルと$ORACLE_HOME/sqlpatchディレクトリが含まれる場合があります。 Oracleでは、データベースを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

ノート:

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

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

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

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