4 Zero Downtime Migrationを使用したデータベースの移行

データベース移行ジョブを評価し、ジョブを実行し、データベースの移行中または移行後にその他の操作を実行します。

既知の問題、My Oracle Supportノートおよびランブックの最新情報は、Zero Downtime Migrationリリース・ノートを参照してください。

データベースの移行

次の手順に従って、Zero Downtime Migrationを使用してデータベースの移行を実行します。

このトピックの移行手順を開始する前に、必ずすべての前提条件を満たし、データベース移行の準備で説明されている必要な準備を完了しておきます。
  1. 必要なアクセス資格証明を取得します。
    Oracle Cloud Infrastructure Object Storageをバックアップ媒体として使用する場合は、Object Storageのアクセス資格証明を取得します。Oracle Cloud Infrastructureコンソール・ユーザーの場合はユーザーIDが、Object Storageの場合は認証トークンが必要です。既存の認証トークンを使用していない場合は、Oracle Cloud Infrastructureコンソールを使用して新しい認証トークンを生成できます。

    ソース・データベース・サーバーにrootユーザーでアクセスする場合は、rootユーザーのパスワードが必要です。ソース・データベース・サーバーとターゲット・データベース・サーバーに秘密鍵ファイルを使用してアクセスする場合は、秘密鍵ファイルが必要です。ソース・データベース環境のSYSパスワードも必要です。

    Zero Data Loss Recovery Applianceをバックアップ媒体として使用する場合は、Zero Data Loss Recovery Appliance仮想プライベート・カタログ(VPC)のユーザー資格証明を取得します。

  2. Zero Downtime Migrationのレスポンス・ファイルを準備します。
    データベースの移行は、タスクを完遂するために不可欠なパラメータを取得するレスポンス・ファイルによって決定されます。特定のソース、ターゲットおよびバックアップ環境に対してレスポンス・ファイルを設定するのに必要なエントリ例に、サンプルの$ZDM_HOME/rhp/zdm/template/zdm_template.rspファイルを使用します。
  3. データベースの移行プロセスを評価します。
    本番データベースのデータベース移行ジョブを発行する前に、テスト移行を実行して、ご使用の構成および設定でプロセスがどこまで対応できるかを判断します。移行のたびに、まずmigrate databaseを評価モードで実行することをお薦めします。この評価により、本番データベースで実際の移行を実行する前に、設定および構成の潜在的な問題を修正できるようになります。

    評価モードでは、移行プロセスが変更に影響を与えずに実行されます。実際の移行ジョブを実行する前に、-evalオプションを必要な回数だけ使用してコマンドを実行しても安全です。

    コマンド結果出力には、評価移行ジョブのジョブIDが示されます。このIDを使用して、ジョブのステータスを問い合せることができます。

    移行プロセスの評価を実行するには、次の例に示すように、ZDMCLIコマンドmigrate database-evalオプションを指定して実行します。

    Zero Downtime Migrationサービス・ホストにログインし、zdmuserインストール・ユーザーに切り替えます。

    su - zdmuser

    ソース・データベース・サーバーへの接続がルート資格証明によって行われる場合、コマンドは次のようになります。

    zdmuser> $ZDM_HOME/bin/zdmcli migrate database -sourcedb source_db_unique_name_value
    -sourcenode source_database_server_name -srcroot 
    -targetnode target_database_server_name 
    -backupuser Object_store_login_user_name  
    -rsp response_file_location
    -tgtauth zdmauth 
    -tgtarg1 user:target_database_server_login_user_name 
    -tgtarg2 identity_file:ZDM_installed_user_private_key_file_location
    -tgtarg3 sudo_location:/usr/bin/sudo -eval

    プロンプトに、ソース・データベースのSYSパスワードと、ソース・データベース・サーバーのrootユーザーのパスワードを指定します。バックアップ先がObject Store (バケット)の場合は、ユーザーswift認証トークンを指定します。バックアップ先がStorage Classic (コンテナ)の場合は、テナンシ・ログイン・パスワードを指定します。

    次に例を示します。

    zdmuser> $ZDM_HOME/bin/zdmcli migrate database -sourcedb zdmsdb -sourcenode ocicdb1
    -srcroot -targetnode ocidb1 -backupuser backup_user@example.com
    -rsp /u01/app/zdmhome/rhp/zdm/template/zdm_template_zdmsdb.rsp -tgtauth zdmauth 
    -tgtarg1 user:opc -tgtarg2 identity_file:/home/zdmuser/.ssh/zdm_service_host.ppk -tgtarg3
    sudo_location:/usr/bin/sudo -eval
    
    Enter source database zdmsdb SYS password:
    Enter source user "root" password:
    Enter user "backup_user@example.com" password:

    ソース・データベース・サーバーへの接続がSSH鍵によって行われる場合、コマンドは次のようになります。

    zdmuser> $ZDM_HOME/bin/zdmcli migrate database -sourcedb source_db_unique_name_value
    -sourcenode source_database_server_name -srcauth zdmauth 
    -srcarg1 user:source_database_server_login_user_name 
    -srcarg2 identity_file:ZDM_installed_user_private_key_file_location 
    -srcarg3 sudo_location:/usr/bin/sudo -targetnode target_database_server_name 
    -backupuser Object_store_login_user_name -rsp response_file_location 
    -tgtauth zdmauth -tgtarg1 user:target_database_server_login_user_name 
    -tgtarg2 identity_file:ZDM_installed_user_private_key_file_location  
    -tgtarg3 sudo_location:/usr/bin/sudo -eval

    プロンプトに、ソース・データベースのSYSパスワードを指定します。バックアップ先がObject Store (バケット)の場合は、ユーザーswift認証トークンを指定します。バックアップ先がStorage Classic (コンテナ)の場合は、テナンシ・ログイン・パスワードを指定します。

    zdmuser> $ZDM_HOME/bin/zdmcli migrate database -sourcedb zdmsdb -sourcenode ocicdb1 -srcauth zdmauth 
    -srcarg1 user:opc -srcarg2 identity_file:/home/zdmuser/.ssh/zdm_service_host.ppk 
    -srcarg3 sudo_location:/usr/bin/sudo -targetnode ocidb1 -backupuser backup_user@example.com 
    -rsp /u01/app/zdmhome/rhp/zdm/template/zdm_template_zdmsdb.rsp -tgtauth zdmauth -tgtarg1 user:opc 
    -tgtarg2 identity_file:/home/zdmuser/.ssh/zdm_service_host.ppk -tgtarg3 sudo_location:/usr/bin/sudo -eval
    
    Enter source database zdmsdb SYS password:
    Enter user "backup_user@example.com" password:

    ソースのシングル・インスタンス・データベースがGrid Infrastructureホームなしでデプロイされている場合、前述のコマンドでは、-sourcedbのかわりに-sourcesidを使用します。

    また、ソース・データベースがPASSWORDベースのウォレット用に構成されている場合、前述のコマンドに-tdekeystorepasswdオプションを追加し、プロンプトにソース・データベースのTDEキーストア・パスワード値を指定します。

    –backupuser引数は、Object Storageアクセス・ユーザーまたはZero Data Loss Recovery Appliance VPCユーザーを取り、NFSがバックアップ媒体の場合はスキップされます。NFSの場合は、ソース・データベース・ユーザーには、指定されたNFSパスに対する'rwx'アクセス権が必要です。

    移行コマンドでは、ソース・ホームとターゲット・ホームのパッチ・レベル間のパッチの互換性がチェックされ、ターゲット・ホームのパッチ・レベルがソース以上であることが要求されます。ターゲット・ホームのパッチ・レベルが想定どおりでない場合、移行ジョブは停止し、欠落しているパッチがレポートされます。ターゲット・ホームに必要なパッチを適用することも、–ignore PATCH_CHECKまたは-ignore ALLオプションを移行コマンドに追加することによって移行を強制的に続行することもできます。

    コマンド結果出力には、移行ジョブのジョブIDが示されます。このIDを使用して、ジョブのステータスを問い合せることができます。

    コマンドラインでパスワードを指定せずにコマンドを実行する場合は、ウォレットを使用した非対話型のパスワード指定を参照してください。

  4. データベース移行を開始する前に、移行プロセスを一時停止して再開する必要があるかどうかを決定します。移行ジョブが開始されると、ジョブ・システムによって、構成されたとおりにジョブが実行されます。

    移行ジョブを特定の時点で一時停止して再開する必要がある場合、詳細は、「移行ジョブのフェーズのリスト」および「移行ジョブの一時停止および再開」の各トピック(次の相互参照)を参照してください。

  5. データベースの移行プロセスを開始します。
    データベース移行ジョブは、zdmuserユーザーがZDMCLIコマンドmigrate databaseを使用してZero Downtime Migrationサービス・ホストから発行します。

    ソース・データベース・サーバーへの接続がルート資格証明によって行われる場合、コマンドは次のようになります。

    zdmuser> $ZDM_HOME/bin/zdmcli migrate database -sourcedb source_db_unique_name_value 
    -sourcenode source_database_server_name -srcroot 
    -targetnode target_database_server_name 
    -backupuser Object_store_login_user_name 
    -rsp response_file_location -tgtauth zdmauth 
    -tgtarg1 user:target_database_server_login_user_name
    -tgtarg2 identity_file:ZDM_installed_user_private_key_file_location  
    -tgtarg3 sudo_location:/usr/bin/sudo

    プロンプトに、ソース・データベースのSYSパスワードと、ソース・データベース・サーバーのrootユーザーのパスワードを指定します。バックアップ先がObject Store (バケット)の場合は、ユーザーswift認証トークンを指定します。バックアップ先がStorage Classic (コンテナ)の場合は、テナンシ・ログイン・パスワードを指定します。

    次に例を示します。

    zdmuser> $ZDM_HOME/bin/zdmcli migrate database -sourcedb zdmsdb -sourcenode ocicdb1 -srcroot
    -targetnode ocidb1 -backupuser backup_user@example.com -rsp /u01/app/zdmhome/rhp/zdm/template/zdm_template_zdmsdb.rsp
    -tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_file:/home/zdmuser/.ssh/zdm_service_host.ppk
    -tgtarg3 sudo_location:/usr/bin/sudo
    
    Enter source database zdmsdb SYS password:
    Enter source user "root" password:
    Enter user "backup_user@example.com" password:

    ソース・データベース・サーバーへの接続がSSH鍵によって行われる場合、コマンドは次のようになります。

    zdmuser> $ZDM_HOME/bin/zdmcli migrate database -sourcedb source_db_unique_name_value 
    -sourcenode source_database_server_name -srcauth zdmauth 
    -srcarg1 user:source_database_server_login_user_name 
    -srcarg2 identity_file:ZDM_installed_user_private_key_file_location 
    -srcarg3 sudo_location:/usr/bin/sudo -targetnode target_database_server_name 
    -backupuser Object_store_login_user_name -rsp response_file_location 
    -tgtauth zdmauth -tgtarg1 user:target_database_server_login_user_name 
    -tgtarg2 identity_file:ZDM_installed_user_private_key_file_location  
    -tgtarg3 sudo_location:/usr/bin/sudo 

    プロンプトに、ソース・データベースのSYSパスワードを指定します。バックアップ先がObject Store (バケット)の場合は、ユーザーswift認証トークンを指定します。バックアップ先がStorage Classic (コンテナ)の場合は、テナンシ・ログイン・パスワードを指定します。

    次に例を示します。

    zdmuser> $ZDM_HOME/bin/zdmcli migrate database -sourcedb zdmsdb -sourcenode ocicdb1 -srcauth zdmauth 
    -srcarg1 user:opc -srcarg2 identity_file:/home/zdmuser/.ssh/zdm_service_host.ppk 
    -srcarg3 sudo_location:/usr/bin/sudo -targetnode ocidb1 -backupuser backup_user@example.com 
    -rsp /u01/app/zdmhome/rhp/zdm/template/zdm_template_zdmsdb.rsp -tgtauth zdmauth -tgtarg1 user:opc 
    -tgtarg2 identity_file:/home/zdmuser/.ssh/zdm_service_host.ppk -tgtarg3 sudo_location:/usr/bin/sudo
    
    Enter source database zdmsdb SYS password:
    Enter user "backup_user@example.com" password:

    ソースのシングル・インスタンスがGrid Infrastructureホームなしでデプロイされている場合、前述のコマンドでは、-sourcedbのかわりに-sourcesidを使用します。

    ソース・データベースがPASSWORDベースのウォレット用に構成されている場合、前述のコマンドに-tdekeystorepasswdオプションを追加し、プロンプトにソース・データベースのTDEキーストア・パスワード値を指定します。

    –backupuser引数は、Object Storageアクセス・ユーザーまたはZero Data Loss Recovery Appliance VPCユーザーを取り、NFSがバックアップ媒体の場合はスキップされます。NFSの場合は、ソース・データベース・ユーザーには、指定されたNFSパスに対する'rwx'アクセス権が必要です。

    移行コマンドでは、ソース・ホームとターゲット・ホームのパッチ・レベル間のパッチの互換性がチェックされ、ターゲット・ホームのパッチ・レベルがソース以上であることが要求されます。ターゲット・ホームのパッチ・レベルが想定どおりでない場合、移行ジョブは停止し、欠落しているパッチがレポートされます。ターゲット・ホームに必要なパッチを適用することも、–ignore PATCH_CHECKまたは-ignore ALLオプションを移行コマンドに追加することによって移行を強制的に続行することもできます。

    コマンド結果出力には、移行ジョブのジョブIDが示されます。このIDを使用して、ジョブのステータスを問い合せることができます。

    コマンドラインでパスワードを指定せずにコマンドを実行する場合は、ウォレットを使用した非対話型のパスワード指定を参照してください。

移行ジョブのステータスの問合せ

ジョブの実行中に、移行ジョブのステータスを問い合せることができます。

ジョブIDを指定してZDMCLI query jobコマンドを使用し、データベース移行ジョブのステータスを問い合せます。ジョブIDは、データベース移行ジョブの発行時にコマンド出力に表示されます。

zdmuser> $ZDM_HOME/bin/zdmcli query job -jobid job-id

移行ジョブのコンソール出力は、query jobコマンド出力(結果ファイルのパス)に示されているファイルで確認できます。指定されたファイルで移行の進行状況メッセージを確認できます

移行ジョブのフェーズのリスト

移行ジョブに組み込まれている操作フェーズをリストできます。

移行ジョブに組み込まれている操作フェーズをリストするには、-listphasesオプションをZDMCLI migrateコマンドに追加します。このオプションは、操作に組み込まれているフェーズをリストします。

次に例を示します。

zdmuser> $ZDM_HOME/bin/zdmcli migrate database -sourcedb zdmsdb -sourcenode ocicdb1 -srcauth zdmauth
-srcarg1 user:opc -srcarg2 identity_file:/home/zdmuser/.ssh/zdm_service_host.ppk -srcarg3 sudo_location:/usr/bin/sudo
-targetnode ocidb1 -backupuser backup_user@example.com -rsp /u01/app/zdmhome/rhp/zdm/template/zdm_template_zdmsdb.rsp
-tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_file:/home/zdmuser/.ssh/zdm_service_host.ppk
-tgtarg3 sudo_location:/usr/bin/sudo -listphases

移行ジョブの一時停止および再開

移行ジョブは、ZDM_SETUP_TGTフェーズ後の任意の時点で一時停止できます。また、いつでも再開できます。

移行ジョブを一時停止するには、ZDMCLI migrateコマンドで、一時停止する直前の有効なフェーズとともに–pauseafterオプションを指定します。

次の例で-pauseafter ZDM_SETUP_TGTと指定すると、移行ジョブはZDM_SETUP_TGTフェーズの完了後に一時停止します。

zdmuser> $ZDM_HOME/bin/zdmcli migrate database -sourcedb zdmsdb -sourcenode ocicdb1
-srcauth zdmauth -srcarg1 user:opc
-srcarg2 identity_file:/home/zdmuser/.ssh/zdm_service_host.ppk
-srcarg3 sudo_location:/usr/bin/sudo -targetnode ocidb1 
-backupuser backup_user@example.com -rsp /u01/app/zdmhome/rhp/zdm/template/zdm_template_zdmsdb.rsp -tgtauth zdmauth 
-tgtarg1 user:opc -tgtarg2 identity_file:/home/zdmuser/.ssh/zdm_service_host.ppk
-tgtarg3 sudo_location:/usr/bin/sudo -pauseafter ZDM_SETUP_TGT

一時停止する直前の移行ジョブ・フェーズの選択

migrate database ... -listphasesコマンド出力でリストされる有効なフェーズを選択します。

-pauseafterオプションで指定できるフェーズは1つのみです。

ZDM_SETUP_TGTの後に移行ジョブを一時停止することをお薦めします。

フェーズZDM_CONFIGURE_DG_SRC-pauseafterを使用すると、フェーズの実行終了時にターゲット・データベースでスタンバイが作成され、ソース・データベースとターゲット・データベースの間で同期が発生します。

一時停止された移行ジョブ中のログ・ファイルの保持

移行ジョブの一時停止と再開の間でソース・データベース・ログ・ファイルとターゲット・データベース・ログ・ファイルがクリーン・アップされないように、ログ・ファイルはそれぞれのソース・データベース・サーバーとターゲット・データベース・サーバーの$ORACLE_BASE/zdm/zdm_db_unique_name_zdm_job_id/zdm/logに書き込まれます。

移行ジョブの再開

一時停止されたジョブは、それぞれのジョブIDを指定してZDMCLI resume jobコマンドを実行することで、いつでも再開できます。

zdmuser> $ZDM_HOME/bin/zdmcli resume job -jobid Job_ID 
[-pauseafter valid-phase]

別の一時停止をスケジュールするには、resumeコマンドで、一時停止する直前の有効なフェーズとともに–pauseafterオプションを指定します。migrate database ... -listphasesコマンド出力にリストされるフェーズで、現在一時停止しているフェーズより後の有効なフェーズを選択します。

移行ジョブの再実行

移行ワークフローに予期しないエラーがある場合は、それらを修正して移行ジョブを再実行できます。

エラーはジョブ出力に記録され、ZDMCLI query jobコマンドを使用して問い合せることができます。エラーを解決したら、失敗したジョブを障害が発生した時点から続行できます。

次に示すように、再実行するジョブのジョブIDを指定してZDMCLI resume jobコマンドを実行し、移行ジョブを再実行します。

zdmuser> $ZDM_HOME/bin/zdmcli resume job -jobid Job_ID

実行中の移行ジョブの終了

指定したデータベースに対してデータベース移行ジョブを再発行する場合は、まず、実行中の移行ジョブを停止する必要があります。

Zero Downtime Migrationでは、データベースがすでに進行中の移行ジョブの一部である場合、指定されたデータベースに対してMIGRATE DATABASEコマンドの再実行の試行をブロックします。

指定されたデータベースのデータベース移行ジョブを再発行する場合は、まずZDMCLI ABORT JOBコマンドを使用して、EXECUTINGまたはPAUSEDのいずれかの状態にある実行中の移行ジョブを終了する必要があります。

zdmuser> $ZDM_HOME/bin/zdmcli abort job -jobid job-id

移行後のタスク

次のトピックでは、データベース移行ジョブの完了後に実行するタスクについて説明します。

ターゲット・データベースでのdatapatchの実行

ターゲット・データベース環境がソース・データベースよりも高いパッチ・レベルである場合、ターゲット・データベースでdatapatchユーティリティを実行する必要があります。レスポンス・ファイルにTGT_SKIP_DATAPATCH=FALSEを設定し、datapatchが移行ジョブの一環として実行された場合は、このタスクをスキップします。

たとえば、ソース・データベースがJan 2020 PSU/BPで、ターゲットがApril 2020 PSU/BPである場合、datapatchユーティリティを実行する必要があります。ターゲットでdatapatchを実行する前に、必ずソース(スタンバイ)データベースのバイナリにターゲット・パッチ・レベルを適用します。

  1. マルチテナント・アーキテクチャを実行している場合は、PDBを開きます。
    SQL> alter pluggable database all open;

    すべてのPDBでdatapatchを実行することをお薦めします。ただし、CDB内のPDBのサブセットのみを開く場合は、かわりに次のコマンドを使用できます。datapatchは、CDBおよびオープンされたPDBでのみ実行されます。

    SQL> alter pluggable database PDB_NAME open

    後からdatapatchを(以前にスキップされた、または新しくプラグインされた) PDBで実行するには、alter pluggable databaseコマンドを使用してデータベースを開き、datapatchユーティリティを再実行します。

  2. ORACLE_HOMEのOPatchディレクトリに移動し、datapatchユーティリティを実行します。
    % cd $ORACLE_HOME/OPatch
    % ./datapatch -verbose
    datapatchユーティリティにより、必要な適用スクリプトが実行され、変更されたSQLファイルがデータベースにロードされます。dba_registry_sqlpatchビューに、パッチの適用を示すエントリが追加されます。
  3. エラーがないか確認します。
    エラー・ログは、$ORACLE_BASE/cfgtoollogs/sqlpatch/patch#/unique patch IDディレクトリに次の形式で格納されています。

    patch#_apply_database_SID_CDB_name_timestamp.log

    database_SIDはデータベースSID、CDB_nameはマルチテナント・コンテナ・データベースの名前、timestampはYYYYMMMDD_HH_MM_SS形式です。