バックアップ実行時の後処理のスクリプトファイル名は、以下のとおりです。
非クラスタ運用の場合
<環境設定ディレクトリ>¥etc¥scripts¥OpcBackupPost.js
クラスタ運用の場合
<共有ディスク>:¥etc¥opt¥swstorage¥etc¥backup¥scripts¥OpcBackupPost.js
バックアップ時の後処理シェルスクリプト
1: // AdvancedCopy Manager for Windows
2: // All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2006
3: //
4: // OpcBackupPost.js: Post-Processing Script for swstbackup
5: //
6: // [Parameters]
7: // 1st argument: device name of transaction volume
8: //
9: // [Return Values]
10: // 0: The script ended normally.
11: // 2: The number of the arguments is incorrect.
12: // (1,3,5-8): not used, but must not be used because older versions use these values.
13: // 4: An error other than the above occurred.
14:
15: try {
16: // create global objects
17: var WshShell = WScript.CreateObject("WScript.Shell"); // create Shell object
18: var WshEnv = WshShell.Environment("PROCESS"); // create Environment object
19: var fsObj = WScript.CreateObject("Scripting.FileSystemObject"); // create FileSystemObject object
20:
21: // create SwstBackupPostProc object
22: var proc = new SwstBackupPostProc();
23:
24: // do nothing if postprocessing file exists
25: if (fsObj.FileExists(proc.postFileName) == false) {
26: SwstQuit(0);
27: }
28:
29: // get postprocessing type
30: var postProcType = proc.getPostProcData(proc.postFileName);
31: switch(postProcType) {
32: case "none":
33: proc.doNothing();
34: break;
35: }
36:
37: // do nothing if postprocessing file exists
38: if (fsObj.FileExists(proc.bdFileName) == true) {
39: var bvName = proc.getPostProcData(proc.bdFileName);
40: proc.doNothing();
41: }
42:
43: // clear temporary files
44: proc.deletePostFile(proc.postFileName);
45: proc.deletePostFile(proc.bdFileName);
46: SwstQuit(0);
47: } catch (e) {
48: SwstQuit(6);
49: }
50:
51: function SwstBackupPostProc()
52: {
53: // member variables
54: this.tvName = WScript.Arguments.length!=1?SwstQuit(1):WScript.Arguments.Item(0); // device name of transaction volume
55: this.postFileName = getDataPathName() + "¥¥" + getPutFileName(this.tvName) + ".pre"; // name of postprocessing file
56: this.bdFileName = getDataPathName() + "¥¥" + getPutFileName(this.tvName) + ".bd"; // name of postprocessing file
57:
58: // member functions
59: this.getPostProcData = getPostProcData; // self-explanatory
60: this.doNothing = doNothing; // self-explanatory
61: this.deletePostFile = deletePostFile; // self-explanatory
62: }
63:
64: function getPostProcData(postfile)
65: {
66: var iomode = 1; // means read-only mode
67: var create = false; // means not to create a file
68: var postFileStream = fsObj.OpenTextFile(postfile, iomode, create);
69: var postData = postFileStream.ReadAll();
70: postFileStream.Close();
71: return postData;
72: }
73:
74: function doNothing()
75: {
76: // do nothing
77: }
78:
79: function deletePostFile(postfile)
80: {
81: if (fsObj.FileExists(postfile) == true) {
82: fsObj.DeleteFile(postfile);
83: }
84: }
85:
86: function SwstQuit(exitStatus)
87: {
88: switch(exitStatus) {
89: case 0:
90: WScript.Quit(0);
91: case 1:
92: WScript.Echo("[Backup Postprocessing] The number of the arguments is incorrect.");
93: WScript.Quit(2);
94: default:
95: WScript.Echo("[Backup Postprocessing] The script exited abnormally.");
96: WScript.Quit(4);
97: }
98: }
99:
100: function getDataPathName()
101: {
102: return WshShell.RegRead(getSetupInfoKey() + "¥¥etcPathName") + "¥¥etc¥¥backup¥¥data¥¥DEFAULT";
103: }
104:
105: function getBinPathName()
106: {
107: return WshShell.RegRead(getSetupInfoKey() + "¥¥PathName") + "¥¥bin";
108: }
109:
110: function getSetupInfoKey()
111: {
112: var nodeName = WshEnv.Item("SWSTGNODE");
113: if( nodeName != "" ){
114: return "HKEY_LOCAL_MACHINE¥¥SOFTWARE¥¥Fujitsu¥¥AdvancedCopy Manager¥¥CurrentVersion¥¥" + nodeName;
115: }
116: return "HKEY_LOCAL_MACHINE¥¥SOFTWARE¥¥Fujitsu¥¥AdvancedCopy Manager¥¥CurrentVersion";
117: }
118:
119: function getPutFileName(deviceName){
120: var fileName;
121: if( isSafeDISKName(deviceName) ){
122: var re = /(¥S+)¥/(¥S+):(¥S+)/;
123: fileName = deviceName.replace(re, "$1_$2_$3");
124: }else{
125: fileName = deviceName;
126: }
127: return(fileName);
128: }
129:
130: function getGXDXPX(deviceName){
131: var gXdXpX;
132: if( isSafeDISKName(deviceName) ){
133: var re = /(¥S+)¥/(¥S+):(¥S+)/;
134: gXdXpX = deviceName.replace(re, "$3");
135: }else{
136: gXdXpX = deviceName;
137: }
138: return(gXdXpX);
139: }
140:
141: function isSafeDISKName(deviceName){
142: var key = ":g";
143: var s = deviceName.indexOf(key);
144: if ( s < 0 ) {
145: return (false);
146: } else {
147: return (true);
148: }
149: }ポイント
業務ボリュームのロック/ロック解除処理、バッファフラッシュ処理はスクリプトではなく、コマンド内で実施されています。したがって、バックアップ前処理スクリプト、バックアップ後処理スクリプトは、ボリュームのロック/ロック解除処理、バッファフラッシュ処理の直前、直後にそれぞれ実行されます。バックアップ前後処理スクリプトでは、実質的に何も処理を実施していません。
図A.1 スナップショット型バックアップ(OPC)の場合

図A.2 同期型バックアップ(EC)かつ非クラスタシステムの場合

図A.3 同期型バックアップ(EC)かつクラスタシステム運用の場合

注意
同期処理開始前処理、および、バックアップ前処理では、他アプリケーションとの一時的なアクセス競合を回避するために、ロック処理に失敗した場合、ロック処理のリトライを実施します。既定のリトライ回数を超えた場合、コマンドは異常終了します。この場合、業務ボリューム、バックアップボリュームを使用しているプロセスが存在していますので、アプリケーションやサービスの停止を行う等の対処を実施して、他のプロセスからボリュームが使用されていない状態にしてください。なお、ボリュームロック動作指定ファイルと呼ばれる設定ファイルを作成することにより、規定のリトライ回数の変更を行うことが可能ですが(詳細については、「A.2.2.1 バックアップ用業務ボリュームロック動作指定ファイル」、「A.2.2.2 バックアップ用バックアップボリュームロック動作指定ファイル」を参照してください)、バックアップ処理実行時に他のプロセスが処理対象ボリュームを使用しないための対策が適切に行われている場合は、通常これらのファイルを作成する必要はありません。
注意
クラスタシステム運用において同期型バックアップを行う場合、クラスタシステムの監視を回避するため、バックアップボリュームのロック保持期間はバックアップ同期処理開始コマンドおよびバックアップ実行コマンドの動作中のみとなります(上図参照)。すなわち、バックアップ同期処理開始コマンドの実行後からバックアップ実行コマンドの実行前まではバックアップボリュームはロックされません。これにより、「13.1.1 全般的な注意事項」の「イベントビューアに出力されるメッセージについて」に記載されているメッセージがイベントログに出力されることがありますが、問題はないため無視してください。
業務ボリュームのバックアップ前処理では、他アプリケーションとの一時的なアクセス競合を回避するために、ロック処理に失敗した場合、ロック処理のリトライを実施します。標準のリトライ動作は以下のとおりです。
ロック処理に失敗した場合は、1秒間待った後、再度、ロック処理を実施します。
ロック処理のリトライを20回(初回と合わせて計21回)実施しても、ロックが取得できない場合は、処理を中断してコマンドを異常終了させます。
リトライ上限(デフォルト値=20回)とリトライ間隔(デフォルト値=1秒)は、バックアップ用業務ボリュームロック動作指定ファイルと呼ばれる設定ファイルを作成することにより変更できます。また、この設定ファイルでは、業務ボリュームのバックアップ前処理に対して、以下の動作を指示することもできます。
ロック処理のリトライを行う前に、そのボリューム内の全てのファイルハンドルを無効にすることを指定する(強制ロック機能)。
バックアップ前処理において、ロック/ロック解除の代わりにファイルシステムバッファのフラッシュを行うことを指定する(Xflushオプションと同等の機能)。
注意
バックアップ用業務ボリュームロック動作指定ファイルは、12.2.3.2 資源バックアップコマンド(swstresback)ではバックアップされません。バックアップ用業務ボリュームロック動作指定ファイルを使用する運用の場合は、copyコマンド等を使用してバックアップしておく必要があります。
バックアップ用業務ボリュームロック動作指定ファイルは以下のファイル名で作成してください。
ファイル名 | [クラスタ運用でない場合] |
バックアップ用業務ボリュームロック動作指定ファイルの設定例を以下に示します。
[g1d1p1] BufferFlushOnly=off LockForceMode=on LockRetryNumber=10 LockRetryInterval=10 [g1d1p2] BufferFlushOnly=on [ANY] BufferFlushOnly=off LockForceMode=off LockRetryNumber=20 LockRetryInterval=100
バックアップ用業務ボリュームロック動作指定ファイルの作成方法は以下のとおりです。
ロック動作を変更するボリュームのセクションを作成し、パラメーターを記述します。上記の例ではg1d1p1、g1d1p2のセクションが作成されています。変更可能なパラメーターは下表に示された4つのパラメーターですが、4つ全てを記述する必要はなく、変更したいパラメーターのみを記述してください。記述しなかったパラメーターについては、デフォルト値が使用されます。
また、デフォルトのロック動作を変更するためには「ANY」というセクションを作成し、パラメーターを記述します。これにより、バックアップ用業務ボリュームロック動作指定ファイルに明示的に記述されているボリューム以外の全てのボリュームのロック動作を変更することができます。上記の例ではg1d1p1、g1d1p2以外の全てのボリュームのロック動作は「ANY」セクションの値にしたがって動作します。
BTRANLOCK.INIの設定項目
キー | 説明 |
|---|---|
BufferFlushOnly | 業務ボリュームのロックを実施する代わりに、業務ボリュームのファイルシステムバッファのフラッシュを実施することを指定します: off(デフォルト値)=バッファフラッシュを実施しない(ロックを実施する) on=バッファフラッシュを実施する(ロックを実施しない) swstbackup、swstbackup_exchangeにXflushオプションが指定され、かつ、BufferFlushOnly=offの場合は、Xflushオプションが優先されます。 また、BufferFlushOnlyがonに指定されている場合は、他のパラメーター(LockForceMode、LockRetryNumber、LockRetryInterval)は全て無効となります。 本設定項目をonに指定する場合、業務ボリュームに対する書き込み処理を事前に全て停止する必要があります。書き込み処理を停止しない状態で複製作成を実施した場合、業務ボリュームのデータ内容は保証されません。 NoPrePostがonに指定されている場合は、本パラメーターは無効となります。 |
LockForceMode | 業務ボリュームのロックに失敗した場合、ロック処理のリトライを実施しますが、リトライを実施する前にボリュームのマウントを解除することを指定します。 off(デフォルト値)=ロックのリトライ前にマウント解除を実施しない on=ロックのリトライ前にマウント解除を実施する ボリュームのマウントが解除されると、そのボリュームに対して開いているハンドルは、全て無効となります。 ※マウント解除後にすぐにボリュームが使用中になってしまう場合には、ロックが取得できないことがあります。 BufferFlushOnlyまたはNoPrePostがonに指定されている場合は、本パラメーターは無効となります。 |
LockRetryNumber | 業務ボリュームのロックに失敗した場合、ロック処理のリトライを実施しますが、本パラメーターでリトライ回数を指定します。指定可能な数値は、1から10000までです。 デフォルトの設定値は20(回)です。 指定されたリトライ回数、リトライを実施しても業務ボリュームのロックができない場合は、処理を中断してコマンドを異常終了させます。 BufferFlushOnlyまたはNoPrePostがonに指定されている場合は、本パラメーターは無効となります。 |
LockRetryInterval | 業務ボリュームのロックに失敗した場合、ロック処理のリトライを実施しますが、本オプションでリトライの間隔(ミリ秒単位)を指定します。指定可能な数値は、1から600000(10分)までです。デフォルトの設定値は1000(1秒)です。 BufferFlushOnlyまたはNoPrePostがonに指定されている場合は、本パラメーターは無効となります。 |
NoPrePost | バックアップ前後処理を実施しないことを指定します。 off(デフォルト値)=バックアップ前後処理を実施する on=バックアップ前後処理を実施しない NoPrePostがonに指定されている場合は、他のパラメーター(BufferFlushOnly、LockForceMode、LockRetryNumber、LockRetryInterval)はすべて無効となります。 |
バックアップボリュームのバックアップ前処理では、他アプリケーションとの一時的なアクセス競合を回避するために、ロック処理に失敗した場合、ロック処理のリトライを実施します。
標準のリトライ動作は以下のとおりです。
ロック処理に失敗した場合は、1秒間待った後、再度、ロック処理を実施します。
ロック処理のリトライを20回(初回と合わせて計21回)実施しても、ロックが取得できない場合は、処理を中断してコマンドを異常終了させます。
リトライ上限(デフォルト値=20回)とリトライ間隔(デフォルト値=1秒)は、バックアップ用バックアップボリュームロック動作指定ファイルと呼ばれる設定ファイルを作成することにより変更できます。
また、この設定ファイルでは、バックアップボリュームのバックアップ前処理に対して、以下の動作を指示することもできます。
ロック処理のリトライを行う前に、そのボリューム内の全てのファイルハンドルを無効にすることを指定する(強制ロック機能)。
注意
バックアップ用バックアップボリュームロック動作指定ファイルは、12.2.3.2 資源バックアップコマンド(swstresback)ではバックアップされません。バックアップ用バックアップボリュームロック動作指定ファイルを使用する運用の場合は、copyコマンド等を使用してバックアップしておく必要があります。
バックアップ用バックアップボリュームロック動作指定ファイルは以下のファイル名で作成してください。
ファイル名 | [クラスタ運用でない場合] |
バックアップ用バックアップボリュームロック動作指定ファイルの設定例を以下に示します。
[g1d1p1] LockForceMode=on LockRetryNumber=10 LockRetryInterval=10 [ANY] LockForceMode=off LockRetryNumber=20 LockRetryInterval=100
バックアップ用バックアップボリュームロック動作指定ファイルの作成方法は以下のとおりです。
ロック動作を変更するボリュームのセクションを作成し、パラメーターを記述します(上記の例ではg1d1p1のセクションが作成されています)。変更可能なパラメーターは下表に示された3つのパラメーターですが、3つ全てを記述する必要はなく、変更したいパラメーターのみを記述してください。記述しなかったパラメーターについては、デフォルト値が使用されます。
また、デフォルトのロック動作を変更するためには「ANY」というセクションを作成し、パラメーターを記述します。これにより、バックアップ用バックアップボリュームロック動作指定ファイルに明示的に記述されているボリューム以外の全てのボリュームのロック動作を変更することができます(上記の例ではg1d1p1以外の全てのボリュームのロック動作は「ANY」セクションの値にしたがって動作します)。
BBACKLOCK.INIの設定項目
キー | 説明 |
|---|---|
LockForceMode | バックアップボリュームのロックに失敗した場合、ロック処理のリトライを実施しますが、リトライを実施する前にボリュームのマウントを解除することを指定します。 off(デフォルト値)=ロックのリトライ前にマウント解除を実施しない on=ロックのリトライ前にマウント解除を実施する ボリュームのマウントが解除されると、そのボリュームに対して開いているハンドルは、全て無効となります。 ※マウント解除後にすぐにボリュームが使用中になってしまう場合には、ロックが取得できないことがあります。 |
LockRetryNumber | バックアップボリュームのロックに失敗した場合、ロック処理のリトライを実施しますが、本パラメーターでリトライ回数を指定します。指定可能な数値は、1から10000までです。 デフォルトの設定値は20(回)です。 指定されたリトライ回数、リトライを実施しても業務ボリュームのロックができない場合は、処理を中断してコマンドを異常終了させます。 |
LockRetryInterval | バックアップボリュームのロックに失敗した場合、ロック処理のリトライを実施しますが、本オプションでリトライの間隔(ミリ秒単位)を指定します。指定可能な数値は、1から600000(10分)までです。デフォルトの設定値は1000(1秒)です。 |