Top
ETERNUS SF AdvancedCopy Manager V15.3 Operation Guide
ETERNUS

A.3.1 Pre-processing of restoration

The name of a script file for pre-processing of a restoration is as follows.

In the case of non-cluster operation
<Environment directory>\etc\backup\scripts\OpcRestorePre.js
In the case of cluster operation
<Shared disk>:\etc\opt\swstorage\etc\backup\scripts\OpcRestorePre.js

A.3.1.1 Pre-processing script for restoration

  1: // AdvancedCopy Manager for Windows
  2: // All Rights Reserved, Copyright FUJITSU LIMITED, 2002-2009
  3: //
  4: // OpcRestorePre.js: Pre-Processing Script for swstrestore
  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: // 3: 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 SwstRestorePreProc object
 22:var proc = new SwstRestorePreProc();
 23: 
 24:// there is nothing to do if the pre/post-processing is not customized
 25:proc.doNothingForDriveLetter();
 26: 
 27:SwstQuit(0);
 28: } catch (e) {
 29:SwstQuit(4);
 30: }
 31: 
 32: function SwstRestorePreProc()
 33: {
 34:// member variables
 35:this.tvName   = WScript.Arguments.length!=1?SwstQuit(1):WScript.Arguments.Item(0); // device name of transaction volume
 36:this.postFileName = getDataPathName() + "\\" + getPutFileName(this.tvName) + ".pre";   // name of postprocessing file
 37: 
 38:// member functions
 39:this.doNothingForDriveLetter = doNothingForDriveLetter; // self-explanatory
 40:this.writePostFile        = writePostFile;        // self-explanatory
 41: }
 42: 
 43: function doNothingForDriveLetter()
 44: {
 45:this.writePostFile("none");
 46: }
 47: 
 48: function writePostFile(type)
 49: {
 50:var overwrite = true; // means to overwrite a file if it exists.
 51:var postFileStream = fsObj.CreateTextFile(this.postFileName, overwrite);
 52:postFileStream.Write(type);
 53:postFileStream.Close();
 54: }
 55: 
 56: function SwstQuit(exitStatus)
 57: {
 58:switch(exitStatus) {
 59:case 0:
 60:    WScript.Quit(0);
 61:case 1:
 62:    WScript.Echo("[Restore Preprocessing] The number of the arguments is incorrect.");
 63:    WScript.Quit(2);
 64:default:
 65:    WScript.Echo("[Restore Preprocessing] The script exited abnormally.");
 66:    WScript.Quit(4);
 67:     }
 68: }
 69: 
 70: function getDataPathName()
 71: {
 72:return WshShell.RegRead(getSetupInfoKey() + "\\etcPathName") + "\\etc\\backup\\data\\DEFAULT";
 73: }
 74: 
 75: function getBinPathName()
 76: {
 77:return WshShell.RegRead(getSetupInfoKey() + "\\PathName") + "\\bin";
 78: }
 79: 
 80: function getSetupInfoKey()
 81: {
 82:var nodeName = WshEnv.Item("SWSTGNODE");
 83:if( nodeName != "" ){
 84:    return "HKEY_LOCAL_MACHINE\\SOFTWARE\\Fujitsu\\AdvancedCopy Manager\\CurrentVersion\\" + nodeName;
 85:     }
 86:return "HKEY_LOCAL_MACHINE\\SOFTWARE\\Fujitsu\\AdvancedCopy Manager\\CurrentVersion";
 87: }
 88: 
 89: function getPutFileName(deviceName){
 90:var fileName;
 91:if( isSafeDISKName(deviceName) ){
 92:    var re = /(\S+)\/(\S+):(\S+)/;
 93:    fileName = deviceName.replace(re, "$1_$2_$3");
 94:     }else{
 95:    fileName = deviceName;
 96:     }
 97:return(fileName);
 98: }
 99: 
100: function getGXDXPX(deviceName){
101:var gXdXpX;
102:if( isSafeDISKName(deviceName) ){
103:    var re = /(\S+)\/(\S+):(\S+)/;
104:    gXdXpX = deviceName.replace(re, "$3");
105:     }else{
106:    gXdXpX = deviceName;
107:     }
108:return(gXdXpX);
109: }
110: 
111: function isSafeDISKName(deviceName){
112:var key = ":g";
113:var s = deviceName.indexOf(key);
114:if ( s < 0 ) {
115:    return (false);
116:     } else {
117:    return (true);
118:     }
119: }