Technical Article

Backup DTS Package while editing in Designer

,

This is a very cool time saving ActiveX Script, run manually from within DTS Designer, that generates date and sequence named backups of the package into the specified development and backup folders. Don't ever lose work again.

'************************************************************************
'* Fun with ActiveX Scripts
'************************************************************************
'* Create and Manage Backups of a DTS Package From DTS Designer
'************************************************************************
'* Author: 
'* Lane Tharp 
'* CountryWide Financial Services
'* Performance Management Group
'* Plano, Texas
'* 2005/01/08 6:22 AM
'* -------------------------------------------------------------------------------------------------
'* Description:
'* - This script will create up to 52 backup files in development directory with date and 
'*    alphabetic sequence naming.
'* - This script will move backup history to another location for previous dates.
'* -------------------------------------------------------------------------------------------------
'* Useage:
'* 1. Add an ActiveX Script Task to Package being renamed in DTS Designer. 
'* 2. Disable this Task in workflow properties so it does not run with package. (Do not skip this step) 
'* 3. Copy this script into the ActiveX Task. 
'* 5. Make a backup copy of the package. (Do not skip this step) 
'* 6. Save the package. (Do not skip this step) 
'* 7. Execute only the ActiveX script in DTS Designer.
'* 8. Check for backup files.
'*-------------------------------------------------------------------------------------
'* Debug Note:
'* - This script is not intended for unnattended execution.
'* - Do not edit scripts in the ActiveX Task Properties in DTS. (You will go blind.)
'* - Edit as .vbs file in, and *debug* scripts in the Microsoft Script Editor. 
'************************************************************************
Function Main()
    On Error Resume Next
    Main = DTSTaskExecResult_Success
    ' Create Backup File
    If Not CreateBackup Then 
        Main = DTSTaskExecResult_Failure
    End If
End Function
'**************************************
'* Create and Manage Backups
'**************************************
Function CreateBackup()
    On Error Resume Next
    Dim fso
    Dim pkg
    Dim loFolder
    Dim loFiles
    Dim loFile
    Dim lsDate
    Dim lsYear
    Dim lsMonth
    Dim lsDay
    Dim lsBackupFileName
    Dim lsSequence
    Const lcDTSFolder = "C:\DTS\"
    Const lcDTSPackageName = "PaceSurvey_Update"
    Const lcBackupFolder = "C:\Backup\" 
    Const lcExtension = ".dts"
    Const lbForce = True
    CreateBackup = True
    '----------------------
    ' Open Debugger
'    Stop
    '-------------------
    ' Get File System and Package
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set pkg = DTSGlobalVariables.Parent
    If Err.Number <> 0 Then
        Msgbox Err.Description
        CreateBackup = False
    End If        
    '<- Exit 1
    If CreateBackup = True Then
    '-------------------------
    ' Format Backup Date
    lsYear = Year(Now) ' Get Year
    lsMonth = Month(Now) ' Get Month
    If Len(lsMonth) = 1 Then lsMonth = "0" & lsMonth ' Pad Month
    lsDay = Day(Now) ' Get Day
    If Len(lsDay) = 1 Then lsDay = "0" & lsDay ' Pad Day
    lsDate = lsYear & lsMonth & lsDay
    '------------------
    ' Set Path Specs
    lsSequence = "a"
    lsBackupFileName = lcDTSFolder & lcDTSPackageName & lsDate & lsSequence & lcExtension
    If Err.Number <> 0 Then
        Msgbox Err.Description
        CreateBackup = False
    End If        
    '<- Exit 2
    If CreateBackup = True Then
    '----------------------------------------
    ' Determine Next Backup File Name    
    Do
        If Not fso.FileExists(lsBackupFileName) Then Exit Do
        lsSequence = GetSequence(lsSequence)
        ' Fail on error or more than 52 backups (Come on now)
        If lsSequence = "Max" _
        Or Err.number <> 0 Then 
            CreateBackup = False
            Exit Do
        End If
        lsBackupFileName = lcDTSFolder & lcDTSPackageName & lsDate & lsSequence & lcExtension
    Loop
    '<- Exit 3
    If CreateBackup = True Then
    '---------------------------------------------
    ' Backup Existing Structured Object File
    lsFileName = lcDTSFolder & lcDTSPackageName & lcExtension
    If fso.FileExists(lsFileName) Then
        ' Backup Current File and Save To Object File 
        fso.CopyFile lsFileName, lsBackupFileName 
        fso.DeleteFile lsFileName, lcForce
        pkg.SaveToStorageFile lsFileName
    Else
        ' Create Structured Object File
        pkg.SaveToStorageFile lsFileName
    End If
    '-----------------------------------------
    ' Move Old Backups to repository
    ' Get Folder
    Set loFolder = fso.GetFolder(lcDTSFolder)
    ' Get Files Collection
    Set loFiles = loFolder.Files
    ' Loop Through Files
    For Each loFile In loFiles
        ' File for this package
        If InStr(loFile.Name, lcDTSPackageName) <> 0 Then
            ' Not Main Object Filevoid Master Object File
            If loFile.Name <> lcDTSPackageName & lcExtension Then
                ' Backup File From Another Date
                If InStr(loFile.Name,lsDate) = 0 Then
                    loFile.Move lcBackupFolder
                End If
            End If
        End If
    Next    
    '<- Exit 3
    End If 
    '<- Exit 2
    End If 
    '<- Exit 1
    End If 
    ' Destroy Objects
    Set fso = Nothing
    Set pkg = Nothing
    Set loFolder = Nothing
    Set loFiles = Nothing
    Set loFile = Nothing
End Function
'***********************************
'* Generate Alphabetic Naming Sequence
'***********************************
Function GetSequence(lsOldSequence)
    On Error Resume Next
    Select Case lsOldSequence
        Case "a"    
            GetSequence = "b"
        Case "b"    
            GetSequence = "c"
        Case "c"    
            GetSequence = "d"
        Case "d"    
            GetSequence = "e"
        Case "e"    
            GetSequence = "f"
        Case "f"    
            GetSequence = "g"
        Case "g"    
            GetSequence = "h"
        Case "h"    
            GetSequence = "i"
        Case "i"    
            GetSequence = "j"
        Case "j"    
            GetSequence = "k"
        Case "k"    
            GetSequence = "l"
        Case "l"    
            GetSequence = "m"
        Case "m"    
            GetSequence = "n"
        Case "n"    
            GetSequence = "o"
        Case "o"    
            GetSequence = "p"
        Case "p"    
            GetSequence = "q"
        Case "q"    
            GetSequence = "r"
        Case "r"    
            GetSequence = "s"
        Case "s"    
            GetSequence = "t"
        Case "t"    
            GetSequence = "u"
        Case "u"    
            GetSequence = "v"
        Case "v"    
            GetSequence = "w"
        Case "w"    
            GetSequence = "x"
        Case "x"    
            GetSequence = "y"
        Case "y"    
            GetSequence = "z"
        Case "z"    
            GetSequence = "za"
        Case "za"    
            GetSequence = "zb"
        Case "zb"    
            GetSequence = "zc"
        Case "zc"    
            GetSequence = "zd"
        Case "zd"    
            GetSequence = "ze"
        Case "ze"    
            GetSequence = "zf"
        Case "zf"    
            GetSequence = "zg"
        Case "zg"    
            GetSequence = "zh"
        Case "zh"    
            GetSequence = "zi"
        Case "zi"    
            GetSequence = "zj"
        Case "zj"    
            GetSequence = "zk"
        Case "zk"    
            GetSequence = "zl"
        Case "zl"    
            GetSequence = "zm"
        Case "zm"    
            GetSequence = "zn"
        Case "zn"    
            GetSequence = "zo"
        Case "zo"    
            GetSequence = "zp"
        Case "zp"    
            GetSequence = "zq"
        Case "zq"    
            GetSequence = "zr"
        Case "zr"    
            GetSequence = "zs"
        Case "zs"    
            GetSequence = "zt"
        Case "zt"    
            GetSequence = "zu"
        Case "zu"    
            GetSequence = "zv"
        Case "zv"    
            GetSequence = "zw"
        Case "zw"    
            GetSequence = "zx"
        Case "zx"    
            GetSequence = "zy"
        Case "zy"    
            GetSequence = "zz"
        Case Else    
            GetSequence = "Max" '<-- Invalid Characters to cause error 
    End Select
End Function

Rate

You rated this post out of 5. Change rating

Share

Share

Rate

You rated this post out of 5. Change rating