ページの先頭行へ戻る
ETERNUS SF AdvancedCopy Manager 15.2 運用ガイド
ETERNUS

A.2.2 バックアップ実行時の後処理

バックアップ実行時の後処理スクリプトは、以下のとおりです。

バックアップ時の後処理スクリプト

  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.3 スナップショット型バックアップ(OPC)の場合

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

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

注意

  • 同期処理開始およびバックアップの前処理では、他アプリケーションとの一時的なアクセス競合を回避するため、ロックに失敗した場合にロック処理をリトライします。既定のリトライ回数を超えた場合、コマンドは異常終了します。この場合、業務ボリューム/バックアップボリュームを使用しているプロセスが存在しているため、アプリケーションやサービスを停止するなどの対処を実施し、ほかのプロセスがボリュームを使用していない状態にしてください。リトライ回数は、「A.2.3 バックアップ用業務ボリュームロック動作指定ファイル」、「A.2.4 バックアップ用バックアップボリュームロック動作指定ファイル」で変更できます。
    なお、バックアップ処理実行時にほかのプロセスが処理対象ボリュームを使用しないための対策が適切に行われている場合、通常、これらのファイルは作成不要です。

  • クラスタシステム運用で同期型バックアップを行う場合、クラスタシステムの監視を回避するため、バックアップボリュームのロック保持期間は、バックアップ同期処理開始コマンドおよびバックアップ実行コマンドの動作中だけとなります(上図参照)。すなわち、バックアップ同期処理開始コマンドの実行後からバックアップ実行コマンドの実行前までは、バックアップボリュームはロックされません。このため、「13.1.1 全般的な注意事項」の「イベントビューアに出力されるメッセージについて」に記載されているメッセージがイベントログに出力されることがありますが、問題はないので無視してください。