6 移行ジョブのカスタマイズ
指定した移行ジョブ・フェーズの最初または最後に実行できるスクリプトを使用して、Zero Downtime Migrationワークフローをカスタマイズできます。Zero Downtime Migrationでは、これらのカスタマイズはユーザー・アクションを含むカスタム・プラグインと呼ばれます。
次の各トピックでは、移行ジョブをカスタマイズする方法について説明します。
ユーザー・アクションを含むカスタム・プラグインについて
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を実行できます。
ユーザー・アクションを含むカスタム・プラグインに提供されるパラメータ
Zero Downtime Migrationは、実行時にユーザー・アクション・スクリプトを起動し、ロジックのプログラミングに使用できる自動移入ENV変数のセットを提供します。
これらの変数はENV変数として値とともに提供されるため、これらの値を使用してカスタム・プラグインをプログラミングできます。
たとえば、ZDM_SRCDBHOME
の値は、現在の移行ジョブのソース・データベースに関連付けられたデータベース・ホームを指定し、同様にSRC_SCAN_NAME
は、データベースへの接続に使用できるソース・データベースのスキャン・リスナー情報を示します。
次に、ユーザー・アクション・パラメータと予想される値のリストを示します。詳細は、脚注を参照してください。
RHP_OPTYPE=MIGRATE_DATABASE
RHP_PHASE=PRE
ZDM_SRCDB=src_db_name
ZDM_SRCDBHOME=src_db_home
ZDM_TARGETDB=tgt_db_name
ZDM_TARGETDBHOME=tgt_db_home
RHP_PROGRESSLISTENERHOST=zdm_node_name
RHP_PROGRESSLISTENERPORT=zdm_progress_listener_port
LOG_PATH=src/tgt_zdm_log_path1
SRC_SCAN_NAME=src_scan_name
SRC_SCAN_PORT=src_scan_port
TGT_SCAN_NAME=tgt_scan_name
TGT_SCAN_PORT=tgt_scan_port
RHP_USERACTIONDATA=user_action_data2
RHP_OP_PHASE=current_job_phase3
RHP_UA_CHAIN_LIST=list_of_useractions4
1LOG_PATH
は、将来の参照用にログ・ファイルを格納するカスタム・プラグインのソースまたはターゲット・ノードのZero Downtime Migrationログ・パスを指定します。
2RHP_USERACTIONDATA
は、zdmcli migrate database
コマンドのオプション-useractiondata user_action_data
で指定されたuseraction引数を指定します
3RHP_OP_PHASE
は、移行ジョブの現在のフェーズを指定します(例: ZDM_VALIDATE_SRC
)。
4RHP_UA_CHAIN_LIST
は、すべてのユーザー・アクション実行コールに渡されます。このパラメータは、実行中のユーザー・アクションに連鎖されたユーザー・アクションのリストを保持します。連鎖されたユーザー・アクションは、実行中のユーザー・アクションに出力が提供されるユーザー・アクションです。
ユーザー・アクション・スクリプト
次のユーザー・アクション・スクリプトの例を使用して、独自のスクリプトを作成できます。
オンプレミス・ソースおよびノード・アクセスのあるクラウド・ターゲットの場合、Zero Downtime Migrationではユーザー・アクションがスクリプトである必要があります。スクリプト・ファイルがそれぞれのノードにコピーされ、ローカルで実行されます。
Autonomous Databaseターゲットの場合、Zero Downtime Migrationでは、ユーザー・アクション・スクリプトがSQLファイル(.sql)である必要があり、これはJDBC接続を使用してAutonomous Databaseターゲットで実行されます。
例6-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 == *"RHP_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
例6-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 == *"RHP_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
例6-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;
ユーザー・アクションの登録
ユーザー・アクションを特定の操作フェーズのカスタマイズとしてプラグインするには、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
(カスタム・プラグインがエラーで終了した場合でも移行ジョブを続行する場合)のいずれかに設定できます。
次の例は、ユーザー・アクション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
zdmuser> $ZDM_HOME/bin/zdmcli add useraction
-useraction zdmvalsrc
-actionscript /home/zdmuser/useract1.sh
-optype MIGRATE_DATABASE
-phase ZDM_VALIDATE_SRC
-pre
-onerror CONTINUE
前述のコマンドでは、-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を参照してください
アクション・テンプレートの作成
ユーザーアクション・プラグインを登録したら、移行ジョブに関連付けることができる一連のアクション・プラグインをまとめるアクション・テンプレートを作成します。
アクション・テンプレートは、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
移行ジョブとのアクション・テンプレートの関連付け
移行ジョブを実行する際、移行ジョブの一環として実行するプラグインを指定するイメージ・タイプを指定できます。
例として、前述の例で作成したアクション・テンプレート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
アクション・プラグインの問合せ
Zero Downtime Migrationサービス・ホストに登録されたアクション・プラグインを問い合せることができます。
ユーザー・アクションの構成を表示するには:
zdmuser> $ZDM_HOME/bin/zdmcli query useraction -useraction user_action_name
使用方法の詳細は、query useractionを参照してください。
アクション・プラグインの更新
登録済のZero Downtime Migrationユーザー・アクション・プラグイン構成を更新できます。
次の例では、ユーザー・アクションzdmvalsrc
を変更して、フェーズZDM_VALIDATE_SRC
の前ではなく後でユーザー・アクション・スクリプトを実行する方法を示しています。
zdmuser> $ZDM_HOME/bin/zdmcli modify useraction
-useraction zdmvalsrc
-phase ZDM_VALIDATE_SRC
-optype MIGRATE_DATABASE
-post
この変更は、すべての関連するアクション・テンプレートに伝播されるため、アクション・テンプレートを更新する必要はありません。
ユーザー・アクション・スクリプトを変更し、ユーザー・アクションを更新するには、ユーザー・アクション・スクリプトの変更の手順に従います。
ユーザー・アクション・スクリプトの変更
ユーザー・アクション・スクリプトをローカルで編集し、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
連鎖ユーザー・アクション出力
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;