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