Oracle Cloud Infrastructureドキュメント

アクティブ・データベースからのRMAN DUPLICATE

このトピックでは、RMAN Active Duplicationを使用して、アクティブなコンテナ・データベース(CDB)全体または非CDBデータベースをOracle Cloud Infrastructureに移行する方法について説明します。 移行するデータベースは、オンプレミスまたはOracle Cloud Infrastructure Classicに存在できます。 このトピックでは、プラガブル・データベースの複製、プラガブル・データベースまたは非CDBからクラウド内のCDBへの移行については説明しません。

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

  • ソース・データベース: 移行されるアクティブ・データベース。
  • ターゲット・データベース: Oracle Cloud Infrastructure内のDBシステムの(ソース・データベースから複製された)新規データベース。
ノート

バージョン11.2.0.4のデータベースは、ACFSストレージを使用してDBシステムに移行されます。

前提条件

ソース・データベースを移行するには、次のものが必要です:

  • ソース・データベース名、一意のデータベース名、リスナー・ポート、サービス名、データベース・ホーム・パッチ・レベル、およびSYSのパスワード。
  • ソース・データベース・ホームからのsqlpatchディレクトリのコピー。 これは、ターゲットDBシステムにこれらのパッチが含まれていない場合のロールバックに必要です。
  • ソース・データベースが透過データ暗号化(TDE)で構成されている場合は、暗号化されたデータを含むデータベースの複製を可能にするためにウォレットとウォレットのパスワードのバックアップが必要です。

ソース・データベースを既存のターゲット・データベースに移行する場合は、ソース環境をターゲット・データベース・ホームと同じデータベース・バンドル・パッチ・レベルにパッチすることをお薦めします。 ソース環境にsqlpatchコンポーネントを含む暫定パッチ(以前は一度限りのパッチと呼ばれていた)があり、sqlpatchがターゲット環境にない(または異なる累積パッチが適用されている)場合、暫定パッチは可能な場合は移行前にソース環境でロールバックされます。

ヒント

ソース・データベースまたはターゲット・データベースにインストールされている暫定パッチを検査するには、$ORACLE_HOME/OPatch/opatch lspatchesコマンドを使用します。
ターゲット・データベース内のSQL変更をロールバックするには、ソース環境からクラウド環境に$ORACLE_HOME/sqlpatch/<patch#>/postdeinstall.sqlスクリプトをコピーし、postdeinstall.sqlスクリプトを実行します。

ターゲット・データベースには、次のものが必要です:

  • ソース・データベース版と同じデータベース版をサポートするターゲットDBシステム。 DBシステムを起動すると、初期データベースが作成されます。 必要に応じて、dbcliコマンド・ライン・インタフェースを使用してそのデータベースを削除し、新しいデータベースを作成できます。 DBシステムの作成の詳細は、「ベア・メタルおよび仮想マシンDBシステムの管理」を参照してください。 DBCLIを使用してデータベースを作成する方法については、「Databaseコマンド」を参照してください。
  • ターゲット・データベース名、一意のデータベース名、補助サービス名、データベース・ホーム・パッチ・レベル。
  • 補助インスタンスを設定するための、ターゲット・データベース内のフリーのTCPポート。

パッチ環境がソース環境のパッチ・レベルと一致するようにターゲット環境で中間パッチをロールバックする必要がある場合は、ソースDBの$ORACLE_HOME/sqlpatch/<patch_number>ディレクトリをターゲット・データベース・ホームにコピーします。

パッチセット更新(PSU)を含むソース・データベースの移行

Oracle Cloud Infrastructure DBシステムでは、データベース・ホームにDatabaseプロアクティブ・バンドル・パッチがインストールされています。 ソースDBがPatch Set Updates (PSU)を使用している場合は、「MOSノート:1962125.1」 (Oracle Database- DBをOracle Cloud Infrastructureに移行するためのデータベース・パッチ配信メソッドの概要)。

環境の確認

移行を開始する前に、次のステップを実行します:

  1. ソースDBシステムがターゲットDBシステムから到達可能であることを確認してください。 2つのホスト間でSSHを実行できるはずです。
  2. ターゲット・ホストで、TNSPINGユーティリティを使用して、ソース・ホスト・リスナー・ポートが機能することを確認します。 例えば:

    tnsping <source_host>:1521
  3. ターゲット・ホストで、簡単接続を使用してソース・データベースへの接続を確認します:

    <host>:<port>/<service_name>

    例えば:

    sqlplus system@129.145.0.164:1521/proddb 

    接続文字列が64文字を超えないようにしてください。

  4. ソース・データベース・ホームからターゲット・データベースに、必要なsqlpatchファイル(ロールバック用)をコピーします。
  5. 少なくとも1つのアーカイブ・ログがソース・データベースに作成されていることを確認してください。そうでない場合は、RMANの複製はエラーで失敗します。
  6. ソース・データベースがウォレットを使用する場合は、パスワード・ベースのウォレットをバックアップし、DBシステムの標準のロケーションにコピーします:

    /opt/oracle/dcs/commonstore/wallets/tde/<db_unique_name>/
  7. ソース・データベースの互換性パラメータが少なくとも以下に設定されていることを確認します:

    • 18.0.0.0.0 18.1.0.0データベース用
    • 12.1.0.2.0 12.1.0.2または12.2.0.1のデータベースの場合
    • 11.2.0.4.0 11.2.0.4データベース用

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

  1. DBシステムへのSSH。

    ssh -i <private_key_path> opc@<db_system_ip_address> 
  2. opcとしてログインし、rootユーザーにsudoします。 ハイフンでsudo su -を使用してルート・ユーザー・プロファイルを呼び出すと、PATHがdbcliディレクトリ(/opt/oracle/dcs/bin)に設定されます。

    login as: opc
    			
    [opc@dbsys ~]$ sudo su - 
  3. dbcli create-dbstorageを使用して、DATA、RECO、およびREDOストレージのディレクトリを設定します。 次の例では、tdetestデータベース用に10GBのACFSストレージを作成します。

    [root@dbsys ~]# dbcli create-dbstorage --dbname tdetest --dataSize 10 --dbstorage ACFS 
    ノート

    バージョン11.2データベースを移行するときは、ACFSストレージを指定する必要があります。

  4. ストレージIDを表示するには、dbcli list-dbstoragesコマンドを使用します。 次のステップのIDが必要になります。

    [root@dbsys ~]# dbcli list-dbstorages
    ID Type DBUnique Name Status ---------------------------------------- ------ -------------------- ---------- 9dcdfb8e-e589-4d5f-861a-e5ba981616ed Acfs tdetest Configured
  5. 前のステップのストレージIDとともにdbcli describe-dbstorageコマンドを使用して、DATA、RECO、およびREDOのロケーションをリストします。

    [root@dbsys ~]# 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

    ロケーションに注意してください。 後でそれらを使用して、データベースのdb_create_file_destdb_create_online_log_dest、およびdb_recovery_file_destパラメータを設定します。

ORACLE_HOMEの選択

データベースのリストアに使用するORACLE_HOMEを決定し、正しいORACLE_BASE、ORACLE_HOMEおよびPATH設定を使用してそのホームに切り替えます。

既存のORACLE_HOMEのリストを取得するには、dbcli list-dbhomesコマンドを使用します。 新しいORACLE_HOMEを作成するには、dbcli create-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. パスワード・ベースのウォレットから自動ログイン・ウォレットを作成して、リストアおよびリカバリ操作中にウォレットの自動オープンを許可します。

    バージョン12cの場合は、ADMINISTER KEY MANAGEMENTコマンドを使用します:

    $cat create_autologin_12.sh
    
    #!/bin/sh
    if [ $# -lt 2 ]; then
            echo "Usage: $0 <db_unique_name> <remote_wallet_location>"
            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

    バージョン11gの場合は、orapkiコマンドを使用します:

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

静的リスナーの設定

RMAN複製用の補助インスタンス用の静的リスナーを設定します。

  1. DBシステムで、$ORACLE_HOME/network/admin/listener.oraを作成し、次の内容を追加します。

  2. LISTENER_aux_<db_unique_name>=
      (DESCRIPTION=
        (ADDRESS_LIST=
          (ADDRESS=(PROTOCOL=TCP)(HOST=<hostname> or <ip_address>)(PORT=<available_TCP_port>))
        )
       )
    SID_LIST_LISTENER_aux_<db_unique_name>=
      (SID_LIST=
        (SID_DESC= 
          (GLOBAL_DBNAME=<auxServiceName_with_domain>) 
           (ORACLE_HOME=<Oracle_home_for_target_database>) 
           (SID_NAME=<database_name>) 
           (ENVS="TNS_ADMIN=<path_to_tnsnames.ora>") 
           (ENVS="ORACLE_UNQNAME=<db_unique_name(in lower case)>"))
    )
  3. (PORT=<available_TCP_port>)で指定されたポートがDBシステムのiptablesおよびDBシステム・クラウド・ネットワークのセキュリティ・リストで開いていることを確認してください。

RMAN重複コマンドを使用したデータベースの移行

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

    ORACLE_HOME=<path_of_Oracle_home_where_the database_is_to_be_restored> 
    ORACLE_SID=<database_name>
    ORACLE_UNQNAME=<db_unique_name(in lower case)>
    NLS_DATE_FORMAT="mm/dd/yyyy hh24:mi:ss"
  2. リスナーを開始します:

    lsnrctl start listener_aux_<db_unique_name>
  3. 「初期化パラメータ・ファイルの作成と補助インスタンスの起動」で説明されているように、必要最小限のパラメータでinit.oraファイルを作成し、補助インスタンスとして使用します。

  4. nomountモードで補助インスタンスを開始します:

    startup nomount
  5. 次のコマンドを実行して、データベースを複製します。 以下の例では、指定する値を示す変数を使用しています:

    rman target sys/$sourceSysPassword@$sourceNode:$sourceListenerPort/$sourceDb auxiliary sys/$auxSysPassword@$targetNode:$targetListenerPort/$auxService<<EOF
    
    spool log to "`date +%Y%m%d_%H%M%S_%N`_duplicate_${targetDbUniqueName}_from_${sourceDb}.log"
    set echo on
    
    duplicate target database to $targetDb from active database
    password file
    spfile
     PARAMETER_VALUE_CONVERT $sourceDb $targetDb $sourceDbUniqueNameCaps $targetDbUniqueNameCaps
     set cluster_database='false'
     set db_name='$targetDb'
     set db_unique_name='$targetDbUniqueName'
     set db_create_file_dest='$dataLoc'
     set db_create_online_log_dest_1='$redoLoc'
     set db_recovery_file_dest='$recoLoc'
     set audit_file_dest = '$auditFileDest'
     reset control_files
    nofilenamecheck
    ;
    EOF

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

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

  1. データベースのCOMPATIBLEパラメータ値が受け入れ可能であることを確認してください。

    11.2データベースの場合、互換性の最小値は11.2.0.4です。

    12cデータベースの場合、互換性の最小値は12.1.0.2です。

    値が最小値より小さい場合は、データベースの互換性をアップグレードするまでデータベースを登録できません。

  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;

    後でデータベースを登録するには、読み取り書き込みモードが必要です。 どのPDBも読み取り書き込みモードでなければなりません。

  5. 移行されたデータベース・ホストのOracleホームから、次のコマンドを使用してSYSへの接続を確認します。

    conn sys/<password>@<service_name> as sysdba

    後でデータベースを登録するには、この接続が必要です。 続行する前に、接続の問題を修正してください。

  6. $ORACLE_HOME/sqlpatchフォルダをソース・データベースからターゲット・データベースにコピーします。 これにより、dbcli register-databaseコマンドは競合するパッチをすべてロールバックできます。

    ノート

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

  7. 次のSQL*Plusコマンドを使用して、データベースがspfileを使用していることを確認します。

    SHOW PARAMETERS SPFILE 

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

dbcli register-databaseコマンドは、移行されたデータベースをdcs-agentに登録し、dcs-agentスタックによって管理されるようにします。

ノート

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

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

[root@dbsys ~]# dbcli register-database --dbclass OLTP --dbshape odb1 --servicename crmdb.example.com --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: crmdb.example.com",
  "updatedTime" : "August 08, 2016 05:55:49 AM EDT"
}

SQLパッチ・コンポーネントを含むバージョン12.1以降のデータベースの移行

バージョン12.1以上の1ノードのDBシステムの場合、dbcli register-databaseコマンドはデータ・パッチの実行を自動化します。 dbcli register-databaseコマンドを実行する前に、すべてのPDBを読み書きモードで開きます。 すでにdbcli register-databaseコマンドを実行していて、すべてのPDBを開いていない場合、またはソース・データベース・ホームから$ORACLE_HOME/sqlpatchディレクトリをコピーしていない場合は、datapatchユーティリティを手動で再実行して既存の暫定パッチのSQL部分を構成します。 これは、コマンド$ORACLE_HOME/OPatch/opatch datapatchを実行すると実行できます。

ヒント

ソース・データベースにパッチ23170620が含まれ、ターゲット・データベースが2017年10月パッチまたはそれより後のパッチで実行されている場合、パッチの内容がすでにターゲット・データベースにインストールされているため、$ORACLE_HOME/sqlpatchディレクトリをターゲット・データベースにコピーする必要はありません。

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

バージョン11.2データベースの場合、sqlpatchアプリケーションは自動化されていないため、インストール済みPSUの一部ではないソース・データベースに適用された(以前は"one-off"パッチとして知られていた)暫定パッチはターゲット・データベースで手動でロールバックする必要があります。 データベースを登録した後、以下で説明するように、catbundle.sqlスクリプトを実行し、次に対応するPSUパッチ(またはPSUパッチの上にオーバーレイ・パッチ)を含むpostinstall.sqlスクリプトを実行します。

ヒント

仮パッチとしては、$ORACLE_HOME/rdbms/adminディレクトリに書き込まれるファイルや、$ORACLE_HOME/sqlpatchディレクトリなどがあります。
データベースをOCI環境に移行する前に、読取りパッチの指示に従ってソース・データベースにこれらのパッチをロールバックすることをお薦めします。 これらのパッチのロールバックに関する支援が必要な場合は、Oracle Supportにお問い合わせください。
  1. DBシステムでは、dbcli list-dbhomesコマンドを使用して、バージョン11.2データベース・ホームのPSUパッチ番号を検索します。 次のサンプル・コマンド出力では、PSUパッチ番号はDB Version列の2番目の番号です:

    [root@dbsys ~]# 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スクリプトを実行します。次に例を示します:

    SQL> startup 
    SQL> connect / as sysdba
    SQL> @$ORACLE_HOME/rdbms/admin/catbundle.sql psu apply
    exit
    
  4. 前のステップのオーバーレイ・パッチ番号を使用して、たとえばsqlpatchを適用します:

    SQL> connect / as sysdba
    SQL> @$ORACLE_HOME/sqlpatch/24460960/postinstall.sql 
    exit

バックアップ構成の作成(オプション)

dbcliコマンド・ライン・インタフェースを使用してデータベース・バックアップを管理する場合は、新規または既存のバックアップ構成を、登録したときまたは登録した後に、移行したデータベースに関連付けることができます。 バックアップ構成では、データベースのバックアップ先とリカバリ・ウィンドウを定義します。 rootユーザーとして、次のコマンドを使用して、バックアップ構成を作成、表示、および表示します:

移行後のチェックリスト

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

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