6.2.7 ユーザースクリプトの作成

ユーザースクリプトの作成について説明します。

この項の構成
(1) ユーザースクリプトの作成の概要
(2) ユーザースクリプトの記述規則
(3) ユーザースクリプトの記述項目
(4) ユーザースクリプトの環境変数
(5) ユーザースクリプトを使用したレプリカの作成

(1) ユーザースクリプトの作成の概要

Replication Managerでは,レプリカ管理の手作業を軽減するために,レプリカの作成時にあらかじめ作成しておいたユーザースクリプトを実行するように指定できます。

ユーザースクリプトは,スクリプトの記述規則に従って任意のコマンドを記述して作成します。

ユーザースクリプトを実行するためには,レプリカ作成ウィザードの[2.オプション設定]画面で[エージェントユーザスクリプトで,Pre/Postジョブを実行する]チェックボックスを選択してスクリプトファイルを指定します。ユーザースクリプトの記述内容によって,レプリカ作成の処理前または処理後にコマンドが実行されます。

(2) ユーザースクリプトの記述規則

ユーザースクリプトの記述規則を次の表に示します。

表6-1 ユーザースクリプトの記述規則

分類規則
ユーザースクリプト全体
  • 文字コードはASCIIを使用する。
  • 0x20未満のコードはCR(0x0d),LF(0x0a),TAB(0x09)を除き使用できない。
  • 改行コードはLF(0x0a)またはCR+LF(0x0d,0x0a)とする。
  • 1行の長さは8KBまでとする。
項目名,セクション名
  • 1行につき,1項目を指定する。
  • 大文字・小文字は区別しない。
  • 必ず半角で指定する。全角は使用できない。
  • 項目名と項目値の間は半角イコール(=)で区切る。
項目の値
  • 項目名のあとの半角イコール(=)に続けて1行で指定する。項目名と値の間に改行コードを入れてはいけない。
  • 項目名後の半角イコール(=)のあとから改行コードの手前までの間が,項目の値となる。
  • 項目名だけで,値が指定されていない記述は許されない。
注釈
  • 半角シャープ(#)で始まる行は注釈行とする。
  • 行の途中に半角シャープ(#)が入力されていても,それ以降の部分が注釈にはならない。
  • 半角シャープ(#)の前にある文字が,タブや半角空白だけの場合,注釈行となる。
空行
  • 空行を入力できる。
  • タブや半角空白だけで構成されている行は,空行と見なされる。
重要
1つのセクション内で実行されるコマンドが出力するテキストの長さの合計が2,000バイトを超えるような,長いテキストを表示するコマンドを実行しないでください。コマンドが出力した長いテキストを参照する必要がある場合は,コマンドが出力するテキストをファイルにリダイレクトして,出力したファイルを参照してください。

(3) ユーザースクリプトの記述項目

ユーザースクリプトの記述項目を次の表に示します。ユーザー処理セクションに次のどちらかを指定すれば,レプリカ作成の処理前または処理後に記述したコマンドを実行できます。

表6-2 ユーザースクリプトの記述項目

項目名項目の意味および指定する値複数指定省略
LOCAL_BACKUPYESを指定します。××
[PRE_PROC]ユーザー処理セクション「ユーザー前処理」の先頭を示します。このセクションでは,レプリカ作成前に実行するコマンドおよびスクリプトを定義します。×
[POST_PROC]ユーザー処理セクション「ユーザー後処理」の先頭を示します。このセクションでは,レプリカ作成後に実行するコマンドおよびスクリプトを定義します。×
[CMD]コマンド定義セクションの先頭を示します。
この項目には,次の規則があります。
  • ユーザー処理セクション内で指定する必要がある。
  • コマンド定義を複数指定した場合,記述した順番に1つずつ実行される。
  • TIMEOUT=NOWAIT以外を指定した場合,実行したコマンドが終了またはタイムアウトするのを待ってから,次のコマンドが実行される(一度に実行されるコマンドは常に1つ)。
  • TIMEOUT=NOWAITを指定した場合,コマンドの終了を待たないで後続のコマンドを実行する。
  • コマンド定義セクション内で指定した項目は,該当するコマンド定義セクション内に対してだけ有効で,ほかのコマンド定義セクションには影響を与えない。
CMDLINE実行させるコマンドラインを指定します。
この項目には,次の規則があります。
  • オプションを指定する場合,コマンド名とオプションを半角空白文字で区切って指定する。
  • コマンド定義セクション1つにつき,コマンドラインを1つ指定できる。
  • コマンドラインは2,048文字まで指定できる。
  • 空白を含むパス名またはファイル名は,引用符(")で囲む。
  • コマンド名およびファイル名は絶対パスで指定する。ただし,引用符(")が入れ子になるような指定はできない。
  • コマンド名およびコマンドのパス名に環境変数を含めない(例えば,「%SystemRoot%¥notepad.exe」のような指定はできない)。
  • dirコマンドなどのシェルコマンドを使いたい場合はcmd.exeの子プロセスとして実行させる。例えば,「C:¥WINNT¥System32¥cmd.exe /c dir」と指定する。
  • リダイレクトする場合は「C:¥WINNT¥System32¥cmd.exe /c」を必ず指定する。
  • ファイルの拡張子に「.exe」,「.com」,「.cmd」,または「.bat」を指定した場合,コマンドラインをそのまま実行する。そのほかの拡張子を指定した場合は,拡張子(ファイルタイプ)に関連付けられているアプリケーションを使用してコマンドラインを実行する。
  • 画面やメッセージが表示されて入力待ちになるような実行ファイルを指定してはいけない。
××
ENV指定したコマンドを実行する時の環境変数を指定します。
この項目には,次の規則があります。
  • 1行に1つの環境変数を定義する。
  • 環境変数名と値の間は半角イコール(=)で区切る。
  • 1つの環境変数定義当たり最大2,048文字まで指定できる。
  • 環境変数の値を省略すると,その環境変数は削除される。例えば,「ENV=ABC=」と指定すると環境変数ABCは削除される。
  • ENVの設定は該当するコマンドについてだけ有効である。設定内容は後続のコマンドに引き継がれない。
  • 「%」を使用した環境変数を指定しても,内容は展開されない。例えば,「ENV=ABC=%PATH%」のように指定した場合,環境変数ABCに「%PATH%」という文字列が設定される。
END_CODE実行したコマンドの戻り値への対応方法を指定します。デフォルト値はTERMINATE_NZです。次の値が指定できます。
TERMINATE_NZ:0以外の戻り値が返るとスクリプト処理を終了する。
IGNORE:戻り値に関係なくスクリプト処理を継続する。
<エラーのしきい値>:0~255の整数を指定する。指定された数値より大きい戻り値が返ると,スクリプト処理を終了する。
この項目には,次の規則があります。
  • 値は半角文字で指定する。
  • 実行したコマンドがタイムアウトした場合,TERMINATE_NZ,およびエラーのしきい値を指定した場合は処理が終了し,IGNOREを指定した場合は,処理が継続される。
×
TIMEOUTコマンドのタイムアウト値を指定します。デフォルト値は600(10分)です。次の値が指定できます。
<タイムアウト値>(単位:秒):0~86400の整数を半角文字で指定する。0を指定した場合,タイムアウトしない。
NOWAIT:コマンドの起動が成功すると,完了を待たない。このとき,コマンドの戻り値は0になる。
×
LOCATION指定したコマンドの実行サーバを指定します。デフォルト値はLOCALです。次の値が指定できます。
LOCAL:指定したコマンドをデータベースサーバで実行する。
REMOTE:指定したコマンドをバックアップサーバで実行する。
×
PARENT_STAT親コマンド(スクリプトを呼び出すコマンド)の実行状態によってスクリプトを実行するかどうかを指定します。デフォルト値はNORMALです。次の値が指定できます。
NORMAL:親コマンドの実行状態が正常な場合だけ,CMDLINEで指定したコマンドを実行する。
ERROR:親コマンドの実行状態がエラーの場合だけ,CMDLINEで指定したコマンドを実行する。親コマンドの実行結果は,スクリプトの結果に関係なくエラーとなる。
ANY:常にCMDLINEで指定したコマンドを実行する。親コマンドの実行状態がエラーの場合,親コマンドの実行結果は,スクリプトの結果に関係なくエラーとなる。
[PRE_PROC]セクションではANYまたはNORMALを指定します。ERRORを指定すると,[PRE_PROC]セクションのコマンドが実行されません。
×
(凡例)
○:複数指定または省略できる
×:複数指定または省略できない
注※
レプリカ作成ウィザードの[Pre/Postジョブを実行する]ラジオボタンで指定したコマンドについても同じ規則が適用されます。

(4) ユーザースクリプトの環境変数

ユーザー後処理セクションのコマンドで参照できるApplication Agentのスクリプト環境変数を次の表に示します。スクリプト環境変数は,データベースサーバおよびバックアップサーバで参照できます。

表6-3 ユーザースクリプトの環境変数

環境変数内容説明
DRMENV_L_BACKUPIDデータベースサーバのバックアップID次の場合に有効になります。
  • コマンドがデータベースサーバで実行されている。
  • 親コマンドの実行状態が正常である。
DRMENV_R_BACKUPIDバックアップサーバのバックアップID次の場合に有効になります。
  • コマンドがバックアップサーバで実行されている。
  • 親コマンドの実行状態が正常である。
  • レプリカの作成時にレプリカ作成ウィザードで[レプリカカタログを副ボリュームに転送する]チェックボックスを選択している。
DRMENV_CMD_STATコマンド実行状態NORMAL:正常
ERROR:エラー

(5) ユーザースクリプトを使用したレプリカの作成

ユーザースクリプトを使用したレプリカの作成手順を次に示します。

  1. ユーザースクリプトファイルおよびバッチファイルを作成します。
    ユーザースクリプトファイルの作成例

    LOCAL_BACKUP=YES
    #後処理セクション
    [POST_PROC]
    #副ボリュームのテープバックアップ
    [CMD]
    CMDLINE=C:¥tmp¥tapebackup.bat
    TIMEOUT=NOWAIT
    END_CODE=TERMINATE_NZ
    LOCATION=REMOTE
    PARENT_STAT=NORMAL

    このユーザースクリプトファイルを使用する場合,テープ装置へのバックアップの完了を待たないで,レプリカ作成の実行が完了します。
    副ボリュームをテープバックアップするtapebackup.batの作成例

    rem NTBACKUPでジョブ「Job1」を実行してテープ「Tape1」にG:¥をコピーバックアップ
    rem 環境変数DRMENV_COMMENTとして渡されるバックアップコメントをバックアップジョブの説明に設定
    "C:¥Windows¥system32¥ntbackup.exe" backup G:¥ /j "Job1" /a /t "Tape1" /D "%DRMENV_COMMENT%" /m copy
    IF NOT "%errorlevel%"=="0" GOTO ERROR
    rem テープバックアップ後,バックアップサーバにインポートされたバックアップIDを指定して副ボリュームをアンマウント
    "C:¥Program Files¥Hitachi¥DRM¥bin¥drmumount.exe" %DRMENV_R_BACKUPID%
    IF NOT "%errorlevel%"=="0" GOTO ERROR
    exit 0
    :ERROR
    exit 1

  2. ユーザースクリプトファイルをデータベースサーバの任意のフォルダに格納します。
  3. バッチファイルをバックアップサーバの「C:¥tmp」に格納します。
  4. レプリカ作成ウィザードを使用してレプリカを作成します。
    レプリカ作成ウィザードの[2. オプション設定]画面で[エージェントユーザスクリプトで,Pre/Postジョブを実行する]ラジオボタンを選択して,[スクリプトファイル]に手順1で作成したユーザースクリプトファイルの格納先を設定してください。
    重要
    バックアップサーバでユーザースクリプトファイルを実行する場合は,[バックアップサーバ]にユーザースクリプトファイルを実行するバックアップサーバを設定してください。
    レプリカの作成方法については,「6.2.2 データベースのレプリカの作成」の「(5) レプリカの作成」を参照してください。