7 移行ジョブのカスタマイズ
指定した移行ジョブ・フェーズの最初または最後に実行できるスクリプトを使用して、Zero Downtime Migrationワークフローをカスタマイズできます。Zero Downtime Migrationでは、これらのカスタマイズはユーザー・アクションを含むカスタム・プラグインと呼ばれます。
次の各トピックでは、移行ジョブをカスタマイズする方法について説明します。
7.1 ユーザー・アクションを含むカスタム・プラグインについて
Zero Downtime Migrationでは、プラグインして移行ジョブの一部として実行するカスタム・スクリプトまたはスクリプトのバンドルは、ユーザー・アクションを含むカスタム・プラグインと呼ばれます。
ユーザー・アクションを含むカスタム・プラグインは、ユーザー・アクションとも呼ばれ、移行ジョブの操作フェーズに関連付けて、フェーズの前または後に実行できます。
事前アクションは、関連付けられたフェーズの開始時に実行されるユーザー・アクションです。同様に、事後アクションは、関連付けられたフェーズの終了時に実行されます。
ユーザー・アクションが移行フェーズに関連付けられると、Zero Downtime Migrationはそれを各ノードにコピーし(Autonomous Database以外の場合)、ユーザー・アクションをローカルで実行します。Zero Downtime Migrationは、開発者がDBNAME、DBHOME、DB SCANおよびZDMログの場所を使用するための一連のパラメータと、その他の多数のパラメータをユーザー・アクション・スクリプトの実行に提供します。
Autonomous Databaseの場合、Zero Downtime Migrationを使用すると、SQLをユーザー・アクションとして登録し、JDBC接続を介してZero Downtime MigrationサーバーからAutonomous DatabaseインスタンスでSQLを実行できます。
7.2 シェル・スクリプト・ユーザー・アクションを含むカスタム・プラグインに提供されるパラメータ
Zero Downtime Migrationは、実行時にユーザー・アクション・スクリプトを起動し、ロジックのプログラミングに使用できる自動移入される環境変数のセットをそれに提供します。
これらの変数は環境変数として値とともに提供されるため、これらの値を使用してカスタム・プラグインをプログラミングできます。
たとえば、ZDM_SRCDBHOME
の値は、現在の移行ジョブのソース・データベースに関連付けられたデータベース・ホームを指定し、同様にSRC_SCAN_NAME
は、データベースへの接続に使用できるソース・データベースのスキャン・リスナー情報を示します。
次に、ユーザー・アクション・パラメータと予想される値のリストを示します。詳細は、脚注を参照してください。
ZDM_OPTYPE=MIGRATE_DATABASE
ZDM_PHASE=PRE
ZDM_SRCDB=src_db_name
ZDM_SRCDBHOME=src_db_home
ZDM_TARGETDB=tgt_db_name
ZDM_TARGETDBHOME=tgt_db_home
ZDM_PROGRESSLISTENERHOST=zdm_node_name
ZDM_PROGRESSLISTENERPORT=zdm_progress_listener_port
SRC_SCAN_NAME=src_scan_name
SRC_SCAN_PORT=src_scan_port
TGT_SCAN_NAME=tgt_scan_name
TGT_SCAN_PORT=tgt_scan_port
ZDM_USERACTIONDATA=user_action_data1
ZDM_OP_PHASE=current_job_phase2
RHP_UA_CHAIN_LIST=list_of_useractions3
ZDM_SRCDBSID=src_db_sid
ZDM_TGTDBSID=tgt_db_sid
ZDM_VERSION=zdm_version
ZDM_CLI=zdm_command
TGT_LOG_PATH= tgt_log_path4
SRC_LOG_PATH=src_log_path5
TGT_DB_SERVICE=tgt_db_service
SRC_DB_SERVICE=src_db_service
ZDM_DATAPUMP_EXPORT_DIR_NAME=DATA_PUMP_DIR_NAME
ZDM_DATAPUMP_EXPORT_DIR_PATH=data_pump_dir_path
ZDM_DATAPUMP_DUMP_PREFIX=data_pump_prefix
ZDM_SRCDBPDB= <the pdb name of the source database>
ZDM_TGTDBPDB=<the pdb name of the target database> Note: This is populated
using: SQL> 'SELECT * FROM DBA_PDBS'
1 ZDM_USERACTIONDATA
は、zdmcli migrate database
コマンドのオプション-useractiondata user_action_data
で指定されたuseraction引数を指定します
2 ZDM_OP_PHASE
は、移行ジョブの現在のフェーズを指定します(たとえば、ZDM_VALIDATE_SRC
)。
3 ZDM_UA_CHAIN_LIST
は、すべてのユーザー・アクション実行コールに渡されます。このパラメータは、実行中のユーザー・アクションに連鎖されたユーザー・アクションのリストを保持します。連鎖されたユーザー・アクションは、実行中のユーザー・アクションに出力が提供されるユーザー・アクションです。
4 TGT_LOG_PATH
は、将来の参照用にログ・ファイルを格納するカスタム・プラグインのターゲット・ノードのZero Downtime Migrationログ・パスを指定します。
5 SRC_LOG_PATH
は、将来の参照用にログ・ファイルを格納するカスタム・プラグインのソース・ノードのZero Downtime Migrationログ・パスを指定します。
7.3 SQLベースのユーザー・アクションを含むカスタム・プラグインに提供される変数
SQLベースのユーザー・アクションは、Oracle Autonomous Database (ADB)など、データベース・ノードにアクセスできないデータベースに使用されます。
AS_USER
: ユーザー・アクションは、このデータベース・ユーザーによって実行されます。このユーザーは、-asuser
オプションを使用してユーザー・アクションを作成する際に設定されます。ORACLE_HOME
: データベースのホーム・パス。-
ACTION_OUTPUT_DIR
: 進行中の移行について、すべてのユーザー・アクションの出力が格納されるディレクトリ。 OUTPUT_FILE
- これは、ユーザー・アクションの出力が次の形式の変数値で格納される出力ファイルへのフルパスを示します:<ACTION_OUTPUT_DIR>/<USER_ACTION_NAME>.out
:
を付けて指定します。たとえば、SQLの:ACTION_OUTPUT_DIR
は実際のACTION_OUTPUT_DIR
に置き換えられます。
7.4 ユーザー・アクション・スクリプト
次のユーザー・アクション・スクリプトの例を使用して、独自のスクリプトを作成できます。
オンプレミス・ソースおよびノード・アクセスのあるクラウド・ターゲットの場合、Zero Downtime Migrationではユーザー・アクションがスクリプトである必要があります。スクリプト・ファイルがそれぞれのノードにコピーされ、ローカルで実行されます。
--USERACTION_SERVICE=<SERVICE NAME ALIAS from tnsnames for example TP or TP_TLS>
次に例を示します: --USERACTION_SERVICE=TP or
--USERACTION_SERVICE=LOW
この後に実際のSQLが続きます。 Autonomous Databaseターゲットの場合、Zero Downtime Migrationでは、ユーザー・アクション・スクリプトがSQLファイル(.sql)である必要があり、これはJDBC接続を使用してAutonomous Databaseターゲットで実行されます。
例7-1 action.sh
指定されたパラメータを検出するユーザー・アクション・スクリプトの例を次に示します。
#!/bin/sh
for var in $@
do
if [[ ${var} == *"ZDM_SRCDB="* ]]
then
IFS='=' read -ra DBARR <<< "${var}"
SRCDBNAME=${DBARR[1]}
fi
if [[ ${var} == *"ZDM_TARGETDB="* ]]
then
IFS='=' read -ra DBARR <<< "${var}"
TARGETDBNAME=${DBARR[1]}
fi
if [[ $var == *"ZDM_SRCDBHOME="* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
SRCDBHOME=${PATHARR[1]}
fi
if [[ $var == *"ZDM_TARGETDBHOME="* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
TARGETDBHOME=${PATHARR[1]}
fi
if [[ $var == *"ZDM_OP_PHASE="* ]]
then
IFS='=' read -ra PHASEARR <<< "$var"
ZDMPHASE=${PHASEARR[1]}
fi
if [[ $var == *"eval"* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
EVALRUN=${PATHARR[1]}
fi
if [[ $var == *"LOG_PATH"* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
LOGPATH=${PATHARR[1]}
fi
done
echo "`date` Starting CUSTOM_USERACTION" >> $LOG_PATH/CUSTOM_USERACTION.log
echo $@ >> $LOG_PATH/CUSTOM_USERACTION.log
例7-2 ユーザー・アクションでのSQL*Plusの実行
#!/bin/sh
for var in $@
do
if [[ ${var} == *"ZDM_SRCDB="* ]]
then
IFS='=' read -ra DBARR <<< "${var}"
SRCDBNAME=${DBARR[1]}
fi
if [[ ${var} == *"ZDM_TARGETDB="* ]]
then
IFS='=' read -ra DBARR <<< "${var}"
TARGETDBNAME=${DBARR[1]}
fi
if [[ $var == *"ZDM_SRCDBHOME="* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
SRCDBHOME=${PATHARR[1]}
fi
if [[ $var == *"ZDM_TARGETDBHOME="* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
TARGETDBHOME=${PATHARR[1]}
fi
if [[ $var == *"ZDM_OP_PHASE="* ]]
then
IFS='=' read -ra PHASEARR <<< "$var"
ZDMPHASE=${PHASEARR[1]}
fi
if [[ $var == *"eval"* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
EVALRUN=${PATHARR[1]}
fi
if [[ $var == *"LOG_PATH"* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
LOGPATH=${PATHARR[1]}
fi
done
check_dv_staus()
{
export ORACLE_HOME=${2}
export PATH=$ORACLE_HOME/bin:$PATH
export LOGFILE=$3
export currenthostname=`hostname -a` >> $LOGFILE
echo "Current DB Host=$currenthostname" >> $LOGFILE
CURRENTNODE=`srvctl status database -db ${1} | grep $currenthostname | cut -d" " -f2` >> $LOGFILE
SQLRETURN=$?
echo "Curent DB Node=${CURRENTNODE}" >> $LOGFILE
if [ "$SQLRETURN" -ne "0" ]; then
return 1
fi
export ORACLE_SID=${CURRENTNODE}
echo "`date` Checking Database Vault Status" >> $LOGFILE
$ORACLE_HOME/bin/sqlplus -s / as sysdba 2>> $LOGFILE << EOF > /dev/null
whenever sqlerror exit 1
SET PAGESIZE 60
SET LINESIZE 1300
SET VERIFY OFF TRIMSPOOL ON HEADING OFF TERMOUT OFF FEEDBACK OFF
spool ${LOGFILE} append;
SELECT 'Check Status : '||PARAMETER FROM V\$OPTION WHERE PARAMETER = 'Oracle Database Vault' AND VALUE='TRUE';
SELECT 'Check Grant : '||GRANTED_ROLE from dba_role_privs where GRANTED_ROLE in ('DV_PATCH_ADMIN') and grantee='SYS';
select distinct ('Check TDE enabled ' || ENCRYPTED) from dba_tablespaces where ENCRYPTED='YES';
spool off
EOF
SQLRETURN=$?
if [ "$SQLRETURN" -ne "0" ]; then
return 1
fi
if grep -q "Check Status : Oracle Database Vault" $LOGFILE;
then
echo "`date`:$ORACLE_SID:Database Vault is enabled " >> $LOGFILE
if grep -q "Check Grant : DV_PATCH_ADMIN" $LOGFILE;
then
return 3 # sys privs already granted
else
return 4 # sys privs are not granted
fi
else
echo "`date`:$ORACLE_SID: DV is not enabled" >> $LOGFILE
return 2
fi
}
if [[ $ZDMPHASE == "ZDM_VALIDATE_SRC" || $ZDMPHASE == "ZDM_VALIDATE_TGT" ]]
then
export LOGFILE=$LOG_PATH/${SRCDBNAME}_${ZDMPHASE}_datavault.log
echo "`date` Start User Action for Phase: $ZDMPHASE " > $LOGFILE
echo $@ >> $LOGFILE
check_dv_staus $SRCDBNAME $SRCDBHOME $LOGFILE
CHECKDV_STATUS_RETURN_CODE=$?
if [ "$CHECKDV_STATUS_RETURN_CODE" -eq "1" ]; then
echo "`date`:${SRCDBNAME}:Unable to check DataVault status" >> $LOGFILE
exit 1
fi
if [ "$CHECKDV_STATUS_RETURN_CODE" -eq "2" ]; then
echo "`date`:${SRCDBNAME}:DataVault is not enabled " >> $LOGFILE
exit 0
fi
if [ "$CHECKDV_STATUS_RETURN_CODE" -eq "3" ];
then
echo "`date`:${SRCDBNAME}:Database Vault SYS privileges granted" >> $LOGFILE
exit 0
fi
例7-3 アクション・ファイル・アーカイブ展開プログラムaction_extract.sh
ユーザー・アクションの登録の説明に従って複数のユーザー・アクションをアクション・ファイルにバンドルする場合は、この例に示すように、アクション・ファイルを解凍するスクリプトも指定する必要があります。
#!/bin/sh
MKDIR=/bin/mkdir
DATE=/bin/date
UNZIP=/usr/bin/unzip
#get the current location, extract path from it and then from the same
directory perform unzip to /tmp directory
script_path=$0
script_dir=${script_path%/*}
timestamp=$($DATE +%s)
unzip_dir=/tmp/rhp_${timestamp}
$MKDIR $unzip_dir
$UNZIP ${script_dir}/pack.zip -d $unzip_dir
echo "/bin/sh ${unzip_dir}/pack/main.sh $@"
/bin/sh ${unzip_dir}/pack/main.sh "$@"
アーカイブが抽出されると、action_extract.shによってmain.shが実行され、ユーザー・アクション・スクリプトが実行されます。
#!/bin/sh
script_path=$0
script_dir=${script_path%/*}
#extract args and execute all scripts
echo "/bin/sh ${script_dir}/wc_add_pre.sh $@"
/bin/sh ${script_dir}/wc_add_pre.sh "$@"
action_phase_pre.sh
#!/bin/sh
touch /tmp/SAMPLE_PRE_OUT.txt;
echo $* >> /tmp/SAMPLE_PRE_OUT.txt;
7.5 Oracle Autonomous DatabaseターゲットおよびAmazon Web Services RDSソースのユーザー・アクション
ソース・データベースがAmazon Web Services (AWS) RDSのOracle Databaseで、ターゲット・データベースがOracle Autonomous Database (ADB)の場合、SQLコマンドを使用してユーザー・アクション・スクリプトを作成できます。
Amazon Web Services (AWS) RDSソースおよびOracle Autonomous Database (ADB)ターゲットのOracle Databaseは、シェル・スクリプト・ユーザー・アクションをサポートしていません。SQLのみのユーザー・アクションをサポートしています。
SQLアクションは、Amazon Web Services RDSソースにアクセスするために指定されたユーザーとして実行されます。
7.6 ユーザー・アクションの登録
ユーザー・アクションを特定の操作フェーズのカスタマイズとしてプラグインするには、Zero Downtime Migrationサービス・ホストに登録する必要があります。
Zero Downtime Migrationソフトウェア・インストール・ユーザー(zmduser
など)を使用してデータベース移行ジョブにユーザー・アクションを追加します。
ZDMCLIコマンドadd useraction
は、カスタム・アクション・スクリプトを登録します。ユーザー・アクション・スクリプト、およびその実行時期に指定されたワークフロー・オプションは、Zero Downtime Migrationメタデータにコピーされます。
add useraction
コマンドで、次のオプションを指定します。
-
-useraction user_action_name
(必須)ユーザー・アクションに名前を割り当てます。
-
-actionscript script_name
(必須)フル・パスおよびスクリプト・ファイル名(
/home/zdmuser/useract.sh
など)を指定します。 -
-optype MIGRATE_DATABASE
(必須)ユーザー・アクションが構成されている操作を
MIGRATE_DATABASE
として定義します。 -
-phase
移行ジョブ・ワークフローの適切なフェーズでスクリプトを実行するには、アクションを関連付ける必要のある移行ジョブ・フェーズを指定します。カスタム・プラグインは、移行ジョブ・ワークフローの
ZDM_SETUP_TGT
の後のフェーズに登録できます。Zero Downtime Migrationプロセスのフェーズを参照してください
-
-pre
および-post
ユーザー・アクションを、指定したフェーズの前または後のどちらで実行するかを示します。
-
-onerror
実行時にユーザー・アクションでエラーが発生した場合の動作を指定できます。この動作は、
ABORT
(処理を終了する場合)またはCONTINUE
(カスタム・プラグインがエラーで終了した場合でも移行ジョブを続行する場合)のいずれかに設定できます。 -asuser
ユーザー・アクションでSQLコマンドを実行するデータベース・ユーザーを指定できます。
「WALLET_USERACTION」を参照してください
次の例は、ユーザー・アクションzdmvaltgt
およびzdmvalsrc
を追加する方法を示しています。
zdmuser> $ZDM_HOME/bin/zdmcli add useraction
-useraction zdmvaltgt
-actionscript /home/zdmuser/useract.sh
-optype MIGRATE_DATABASE
-phase ZDM_VALIDATE_TGT
-pre
-onerror ABORT
-asuser dbuser
zdmuser> $ZDM_HOME/bin/zdmcli add useraction
-useraction zdmvalsrc
-actionscript /home/zdmuser/useract1.sh
-optype MIGRATE_DATABASE
-phase ZDM_VALIDATE_SRC
-pre
-onerror CONTINUE
-asuser dbuser
前述のコマンドでは、-actionscript
オプションに指定されているスクリプトuseract.sh
およびuseract1.sh
がZero Downtime Migrationサービス・ホストのリポジトリ・メタデータにコピーされ、アクション・テンプレートを使用して実行される移行ジョブに関連付けられている場合に実行されます。
1つのアクションでの複数のスクリプトの実行
複数のスクリプトを単一のユーザー・アクションとして実行する必要がある場合は、次の例に示すように、すべてのアクション・スクリプトをアクション・ファイル・アーカイブとしてバンドルし、アクション・スクリプトとともに指定できます。アクション・スクリプトは、アクション・ファイルを解凍し、その中のスクリプトを起動する必要があります。
zdmuser> $ZDM_HOME/bin/zdmcli add useraction
-useraction reconfigure_services
-actionscript /home/zdmuser/action_extract.sh
-actionfile /home/zdmuser/pack.zip
-optype MIGRATE_DATABASE
-phase ZDM_RECOVER_TGT
-post
-onerror ABORT
スクリプトの例およびスクリプトの要件については、ユーザー・アクション・スクリプトを参照してください。
ZDMCLIコマンドadd useraction
で使用できるその他のオプションの詳細は、add useractionを参照してください
7.7 アクション・テンプレートの作成
ユーザーアクション・プラグインを登録したら、移行ジョブに関連付けることができる一連のアクション・プラグインをまとめるアクション・テンプレートを作成します。
アクション・テンプレートは、ZDMCLIコマンドadd imagetype
を使用して作成します(イメージ・タイプimagetype
は、特定のタイプのデータベース移行に必要なすべてのユーザーアクションをまとめたものです)。データベースの移行に必要なすべてのユーザーアクション・プラグインを関連付けるイメージ・タイプを作成します。作成したイメージ・タイプは、同じプラグイン・セットを必要とするすべての移行操作で再利用できます。
ここで作成するイメージ・タイプの基本タイプは、次の例に示すようにCUSTOM_PLUGIN
である必要があります。
たとえば、前述の例で作成したユーザーアクションzdmvalsrcとzdmvaltgtの両方をまとめるイメージ・タイプACTION_ZDM
を作成できます。
zdmuser> $ZDM_HOME/bin/zdmcli add imagetype -imagetype ACTION_ZDM -basetype
CUSTOM_PLUGIN -useractions zdmvalsrc,zdmvaltgt
7.8 移行ジョブとのアクション・テンプレートの関連付け
移行ジョブを実行する際、移行ジョブの一環として実行するプラグインを指定するイメージ・タイプを指定できます。
例として、前述の例で作成したアクション・テンプレートACTION_ZDMを指定して(-imagetype ACTION_ZDM
)移行コマンドを実行すると、イメージ・タイプが組み込まれて移行ジョブ・ワークフローの一環としてuseract.shスクリプトおよびuseract1.shスクリプトが実行されます。
デフォルトでは、アクション・プラグインは、クラスタのすべてのノードの指定された操作フェーズで実行されます。移行コマンド・オプション-tgtarg2
で指定されたアクセス資格証明が指定のターゲット・ノードに対して一意である場合、追加のauth引数を組み込んで、他のクラスタ・ノードへのアクセスに必要な認証資格証明を指定する必要があります。たとえば、-tgtarg2 nataddrfile:auth_file_with_node_and_identity_file_mapping
と指定します。
node1およびnode2で構成される2クラスタ・ノード用の一般的なnataddrfileを次に示します。
node1:node1:identity_file_path_available_on_zdmservice_node
node2:node2:identity_file_path_available_on_zdmservice_node
7.9 アクション・プラグインの問合せ
Zero Downtime Migrationサービス・ホストに登録されたアクション・プラグインを問い合せることができます。
ユーザー・アクションの構成を表示するには:
zdmuser> $ZDM_HOME/bin/zdmcli query useraction -useraction user_action_name
使用方法の詳細は、query useractionを参照してください。
7.10 アクション・プラグインの更新
登録済のZero Downtime Migrationユーザー・アクション・プラグイン構成を更新できます。
次の例では、ユーザー・アクションzdmvalsrc
を変更して、フェーズZDM_VALIDATE_SRC
の前ではなく後でユーザー・アクション・スクリプトを実行する方法を示しています。
zdmuser> $ZDM_HOME/bin/zdmcli modify useraction
-useraction zdmvalsrc
-phase ZDM_VALIDATE_SRC
-optype MIGRATE_DATABASE
-post
この変更は、すべての関連するアクション・テンプレートに伝播されるため、アクション・テンプレートを更新する必要はありません。
ユーザー・アクション・スクリプトを変更し、ユーザー・アクションを更新するには、ユーザー・アクション・スクリプトの変更の手順に従います。
7.11 ユーザー・アクション・スクリプトの変更
ユーザー・アクション・スクリプトをローカルで編集し、ZDMCLIコマンドmodify useraction
を使用してユーザー・アクション・メタデータのスクリプトを更新できます。
-
スクリプトのローカル・コピーがない場合は、ZDMCLIコマンド
query useraction
を使用して、キャッシュされたユーザー・アクション・スクリプトをユーザー・アクション・メタデータで見つけることができます。zdmuser> $ZDM_HOME/bin/zdmcli query useraction -useraction zdmvalsrc
スクリプトへのフル・ベース・パスが表示されます。
ノート:
コマンド出力に示されている場所にあるスクリプトを直接変更しないでください。 -
スクリプトを一時的な場所にコピーし、編集します。
-
ZDMCLIコマンド
modify useraction
を使用して、ユーザー・アクション・メタデータのスクリプトを更新します。zdmuser> $ZDM_HOME/bin/zdmcli modify useraction -useraction zdmvalsrc -actionscript /home/zdmuser/useract1.sh
7.12 アクション・テンプレートの変更
アクション・テンプレートを変更して、移行ジョブに関連付けられたアクション・プラグインのセットを変更できます。
アクション・テンプレートは、ZDMCLIコマンドのmodify imagetype
を使用して変更します。このコマンドは、新しいユーザー・アクション・スクリプトを登録し、それを既存のテンプレートに追加する場合に役立ちます。
たとえば、zdmclonetgtという名前の新しいユーザー・アクションをイメージ・タイプACTION_ZDM
に追加するには、次のように、ユーザー・アクションをすべて示す新しいリストを指定してmodify imagetype
を実行します。
zdmuser> $ZDM_HOME/bin/zdmcli modify imagetype -imagetype ACTION_ZDM
-useractions zdmvalsrc,zdmvaltgt,zdmclonetgt
7.13 連鎖ユーザー・アクション出力
1つ以上のユーザー・アクションからデータを取得し、そのデータを使用して別のユーザー・アクションを実行できます。たとえば、ソース・データベースでアクションを実行し、そのデータを使用してターゲット・データベースでアクションを実行できます。
ユーザー・アクションを追加する場合は、-outputfrom
オプションを使用して、追加されるユーザー・アクションに出力が提供されるユーザー・アクションのリストを指定できます。
次の例では、Zero Downtime Migrationにすでに登録されている2つのユーザー・アクション、USERAC1とUSERAC2があり、どちらもなんらかの出力を生成します。この出力は、次に示すように、-outputfrom
オプションで出力をリストすることによって、第3のユーザーアクション USERAC3で使用できます。
$ZDM_HOME/bin/zdmcli add useraction
-useraction USERAC3
-actionscript useractionscript.sh
-outputfrom USERAC1,USERAC2
データへのアクセス
出力ファイルは、useractionファイルの実行元と同じ場所にコピーされるため、出力ファイルの内容は同じ場所からアクセスできます。
-
Autonomous Databaseシステムの場合:
Autonomous Databaseシステムのユーザー・アクションSQLスクリプトの出力ファイルにアクセスするには、次を使用します
@:ACTION_OUTPUT_DIR/useraction_name.out
ACTION_OUTPUT_DIR
は出力を格納するディレクトリを示し、@
はこの変数を実際のディレクトリ・パスに置き換えます。たとえば、get_ddl1ユーザー・アクションからの出力を使用するには、次を指定します
@:ACTION_OUTPUT_DIR/get_ddl1.out;
。 -
共同管理データベース・システムの場合:
共同管理データベース・システムで実行されるユーザー・アクション・スクリプトの出力ファイルにアクセスするには、次を使用します
OUTPUTFILE=$CURR_DIR/useraction_name.out;
。ここで、
CURR_DIR
は、ターゲット・ユーザーのアクション・ファイルおよび他のユーザー・アクションからの出力が配置される現在のディレクトリです。たとえば、get_ddl1ユーザー・アクションからの出力を使用するには、次を指定します
OUTPUTFILE=$CURR_DIR/get_ddl1.out;
。ユーザー・アクション・スクリプトには、連鎖ユーザー・アクション名のリストを提供するパラメータ
RHP_UA_CHAIN_LIST
も含まれている必要があります。
Autonomous Database移行におけるユーザー・アクションの例
次の例は、ソース・データベースからDDL出力を取得し、ターゲット・データベースで実行する方法を示しています。
ユーザー・アクションget_ddl1
はソース・データベースで実行され、DDL出力を生成します。
$ZDM_HOME/bin/zdmcli add useraction
-useraction get_ddl1
-phase ZDM_VALIDATE_SRC
-pre
-optype MIGRATE_DATABASE
-runscope ONENODE
-onerror ABORT
-actionscript /home/useraction1.sh
ユーザー・アクションtable_fromddl
はターゲット・データベースで実行され、ユーザー・アクションget_ddl1
からの出力を使用します。
$ZDM_HOME/bin/zdmcli add useraction
-useraction table_fromddl
-phase ZDM_VALIDATE_TGT
-pre
-optype MIGRATE_DATABASE
-runscope ONENODE
-onerror ABORT
-actionscript /home/useraction2.sh
-outputfrom get_ddl1
imagetypeへの両方のユーザー・アクションの追加:
$ZDM_HOME/bin/zdmcli add imagetype
-imagetype OUTPUTIMG1
-basetype CUSTOM_PLUGIN
-useractions get_ddl1,table_fromddl
useraction1.shの内容:
#!/bin/sh
for var in $@
do
if [[ $var == *"ZDM_SRCDBHOME="* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
SRCDBHOME=${PATHARR[1]}
fi
if [[ $var == *"LOG_PATH"* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
LOGPATH=${PATHARR[1]}
fi
done
echo $SRCDBHOME;
ORACLE_HOME=$SRCDBHOME;
export ORACLE_HOME;
ORACLE_SID=zdm1121;
export ORACLE_SID;
export TMPLOG=/tmp/tmptmp.log;
true>$TMPLOG;
export PATH=$ORACLE_HOME/bin:$PATH
#echo "home is $ORACLE_HOME";
$ORACLE_HOME/bin/sqlplus -s / as sysdba 2>> $TMPLOG << EOF > /tmp/testlog
whenever sqlerror exit 1
SET PAGESIZE 60
SET LINESIZE 1300
SET VERIFY OFF TRIMSPOOL ON HEADING OFF TERMOUT OFF FEEDBACK OFF
spool ${TMPLOG} append;
select dbms_metadata.get_ddl('TABLE', 'TEST1') from DUAL;
spool off
EOF
SQLRETURN=$?
if [ "$SQLRETURN" -ne "0" ]; then
echo "Failed to run $SQLRETURN";
fi
sed -i 's/PCTFREE 10 PCTU//g' $TMPLOG;
echo "$(cat $TMPLOG)";
useraction2.shの内容:
select name from v$database;
@:ACTION_OUTPUT_DIR/ZDM_VALIDATE_SRC_PRE_get_ddl1.out;
select name from v$database;
共同管理データベース移行におけるユーザー・アクションの例
この例では、add useraction
およびadd imagetype
コマンドは、Autonomous Databaseのユースケースでの前述のコマンドと同じですが、スクリプトの内容は異なります。
useraction1.shの内容
#!/bin/sh
for var in $@
do
if [[ $var == *"ZDM_SRCDBHOME="* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
SRCDBHOME=${PATHARR[1]}
fi
done
ORACLE_HOME=$SRCDBHOME;
export ORACLE_HOME;
ORACLE_SID=zdmsrc1;
export ORACLE_SID;
export TMPLOG=/tmp/tmptmp.log;
true>$TMPLOG;
export PATH=$ORACLE_HOME/bin:$PATH
#echo "home is $ORACLE_HOME";
$ORACLE_HOME/bin/sqlplus -s / as sysdba 2>> $TMPLOG << EOF > /tmp/testlog
whenever sqlerror exit 1
SET PAGESIZE 60
SET LINESIZE 1300
SET VERIFY OFF TRIMSPOOL ON HEADING OFF TERMOUT OFF FEEDBACK OFF
spool ${TMPLOG} append;
select dbms_metadata.get_ddl('TABLE', 'TEST1') from DUAL;
spool off
EOF
SQLRETURN=$?
if [ "$SQLRETURN" -ne "0" ]; then
echo "Failed to run $SQLRETURN";
fi
echo "$(cat $TMPLOG)";
useraction2.shの内容:
#!/bin/sh
for var in $@
do
if [[ $var == *"ZDM_TARGETDBHOME="* ]]
then
IFS='=' read -ra PATHARR <<< "$var"
TARGETDBHOME=${PATHARR[1]}
fi
done
CURR_DIR=$(dirname "$(readlink -f "$0")")
export OUTPUTFILE=$CURR_DIR/get_ddl1.out;
# export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1;
ORACLE_HOME=$TARGETDBHOME;
export ORACLE_HOME;
ORACLE_SID=zdmnov19;
export ORACLE_SID;
export TMPLOG=/tmp/tmptmp.log;
sed -i 's/PCTFREE 10 PCTUS//g' $OUTPUTFILE;
export OUTPUT=$(cat $OUTPUTFILE);
echo $OUTPUT;
echo "">$TMPLOG;
$ORACLE_HOME/bin/sqlplus -s / as sysdba 2>> $TMPLOG << EOF > /tmp/testlog
whenever sqlerror exit 1
SET PAGESIZE 60
SET LINESIZE 1300
SET VERIFY OFF TRIMSPOOL ON HEADING OFF TERMOUT OFF FEEDBACK OFF
spool ${TMPLOG} append;
$OUTPUT;
spool off
EOF
echo "$(cat $TMPLOG)";
#SELECT 'NAME: '|| NAME FROM V\$DATABASE;
7.14 スタンバイを設定するためのジョブのカスタマイズ
-stopafter
オプションを使用して、クラウド上にスタンバイを作成し、ZDMフローを停止します。
-stopafter
オプションにより、指定したフェーズでワークフローを切り捨てて、指定したフェーズの完了時に移行ジョブに完了ステータスでマークを付けます。
使用情報については、migrate databaseを参照してください。