テープコピー実行時の後処理のスクリプトファイル名は、以下のとおりです。
非クラスタ運用の場合
“環境設定ディレクトリ”¥etc¥backup¥scripts¥TapeCopyPost.js
クラスタ運用の場合
<共有ディスク>:¥etc¥opt¥swstorage¥etc¥backup¥scripts¥TapeCopyPost.js
スクリプトファイルの内容は、以下のとおりです。
1 // AdvancedCopy Manager for Windows 2 // All Rights Reserved, Copyright FUJITSU LIMITED, 2005-2006 3 // 4 // TapeCopyPost.js: Post-Processing Script for tape copy 5 // 6 // [Parameters] 7 // 1st argument: device name of backup volume 8 // 9 // [Return Values] 10 // 0: The script ended normally. 11 // 2: The number of the arguments is incorrect. 12 // 4: An error other than the above occurred. 13 14 try { 15 // create global objects 16 var WshShell = WScript.CreateObject("WScript.Shell"); // create Shell object 17 var WshEnv = WshShell.Environment("PROCESS"); // create Environment object 18 var fsObj = WScript.CreateObject("Scripting.FileSystemObject"); // create FileSystemObject object 19 20 // create SwstTapeCopyPostProc object 21 var proc = new SwstTapeCopyPostProc(); 22 23 // do nothing if postprocessing file exists 24 if (fsObj.FileExists(proc.postFileName) == false) { 25 SwstQuit(0); 26 } 27 28 // get postprocessing type 29 var postProcType = proc.getPostProcData(proc.postFileName); 30 switch(postProcType) { 31 case "none": 32 proc.doNothing(); 33 break; 34 } 35 36 // clear temporary files 37 proc.deletePostFile(proc.postFileName); 38 SwstQuit(0); 39 } catch (e) { 40 SwstQuit(6); 41 } 42 43 function SwstTapeCopyPostProc() 44 { 45 // member variables 46 this.bvName = WScript.Arguments.length!=1?SwstQuit(1):WScript.Arguments.Item(0); // device name of transaction volume 47 this.postFileName = getDataPathName() + "¥¥" + getPutFileName(this.bvName) + ".pre"; // name of postprocessing file 48 49 // member functions 50 this.getPostProcData = getPostProcData; // self-explanatory 51 this.doNothing = doNothing; // self-explanatory 52 this.deletePostFile = deletePostFile; // self-explanatory 53 } 54 55 function getPostProcData(postfile) 56 { 57 var iomode = 1; // means read-only mode 58 var create = false; // means not to create a file 59 var postFileStream = fsObj.OpenTextFile(postfile, iomode, create); 60 var postData = postFileStream.ReadAll(); 61 postFileStream.Close(); 62 return postData; 63 } 64 65 function doNothing() 66 { 67 // do nothing 68 } 69 70 function deletePostFile(postfile) 71 { 72 if (fsObj.FileExists(postfile) == true) { 73 fsObj.DeleteFile(postfile); 74 } 75 } 76 77 function SwstQuit(exitStatus) 78 { 79 switch(exitStatus) { 80 case 0: 81 WScript.Quit(0); 82 case 1: 83 WScript.Echo("[Tape copy Postprocessing] The number of the arguments is incorrect."); 84 WScript.Quit(2); 85 default: 86 WScript.Echo("[Tape copy Postprocessing] The script exited abnormally."); 87 WScript.Quit(4); 88 } 89 } 90 91 function getDataPathName() 92 { 93 return WshShell.RegRead(getSetupInfoKey() + "¥¥etcPathName") + "¥¥etc¥¥backup¥¥data¥¥DEFAULT"; 94 } 95 96 function getSetupInfoKey() 97 { 98 var nodeName = WshEnv.Item("SWSTGNODE"); 99 if( nodeName != "" ){ 100 return "HKEY_LOCAL_MACHINE¥¥SOFTWARE¥¥Fujitsu¥¥AdvancedCopy Manager¥¥CurrentVersion¥¥" + nodeName; 101 } 102 return "HKEY_LOCAL_MACHINE¥¥SOFTWARE¥¥Fujitsu¥¥AdvancedCopy Manager¥¥CurrentVersion"; 103 } 104 105 function getPutFileName(deviceName){ 106 var fileName; 107 fileName = deviceName; 108 return(fileName); 109 }
ポイント
バックアップボリュームのロック/ロック解除処理はスクリプトではなく、プログラム内で実施されています。したがって、テープコピーの前処理スクリプト、テープコピーの後処理スクリプトは、ボリュームのロック/ロック解除処理の直前、直後にそれぞれ実行されます。テープコピーの前後処理スクリプトでは、実質的に何も処理を実施していません。
図A.1 バックアップボリュームのロック/ロック解除とテープコピーの前後処理スクリプトの関係
注意
テープコピーの前処理では、他アプリケーションとの一時的なアクセス競合を回避するために、ロック処理に失敗した場合、ロック処理のリトライを実施します。既定のリトライ回数を超えた場合、コマンドは異常終了します。この場合、バックアップボリュームを使用しているプロセスが存在していますので、アプリケーションやサービスの停止を行う等の対処を実施して、他のプロセスからボリュームが使用されていない状態にしてください。なお、ボリュームロック動作指定ファイルと呼ばれる設定ファイルを作成することにより、規定のリトライ回数の変更を行うことが可能です(詳細については、「A.4.11 Windowsのテープコピー用バックアップボリュームロック動作指定ファイル」を参照してください)。
ただし、テープコピー処理実行時に他のプロセスが処理対象ボリュームを使用しないための対策が適切に行われている場合は、通常はこのファイルを作成する必要はありません。