Архивирование файлов из задания агента SQL Server - PullRequest
2 голосов
/ 22 марта 2012

Я написал программу в Access vba, которая идет в фиксированный каталог, архивирует все файлы в этом каталоге (и подкаталогах) и помещает zip-архив в (обычно) новый каталог для архивного хранения. Это процедура резервного копирования для моего Access Front End и связанных файлов. Я запускал его с моего клиентского компьютера каждый день, используя свои личные данные. Теперь я хочу запустить его с моего небольшого компьютера с SQL Server, поскольку он более надежен и подотчетен. Я бы предпочел делать все это в T-SQL, а не «вызывать» подпрограммы Access.

Я провел некоторое исследование, но не могу найти ничего определенного, что поможет мне в этом. Может кто-нибудь указать мне на помощь? Вот код доступа VBA:

Function Zip_All_Files_in_Folder()
    Dim FileNameZip, FolderName
    Dim strDate As String, TargetPath As String
    Dim oApp As Object

    TargetPath = "H:\xxx\secure\Construction\Access\All Database Backup\" & Format(Date, "YYYY-MMM") & "_Backup\"
    If Len(Dir(TargetPath)) = 0 Then
        MkDir (TargetPath)
    End If

    FolderName = "H:\xxx\secure\Construction\Access\CPAS\"
    strDate = Format(Date, "YY-MM-DD")
    FileNameZip = TargetPath & strDate & ".zip"

    'Create empty Zip File
    NewZip (FileNameZip)

    'Copy the files to the compressed folder
    Set oApp = CreateObject("Shell.Application")
    oApp.Namespace(FileNameZip).CopyHere oApp.Namespace(FolderName).items

    'Keep script waiting until Compressing is done
    On Error Resume Next
    Dim time As Integer
    Do Until (oApp.Namespace(FileNameZip).items.Count = _
       oApp.Namespace(FolderName).items.Count) Or time > 180
       Sleep (1000)
       time = time + 1
    Loop
    On Error GoTo 0
    'Send a message about the way the script ended
    If time < 180 Then
        SendEmail "xxxxxx@yyyyyy.com", "Looks like the zip backup worked." & vbCrLf & TargetPath
    Else
        SendEmail "xxxxxxx@yyyyy.com", "Better double check the Zip backup: " & time & " seconds" & vbCrLf & TargetPath
    End If
    DoCmd.Quit
End Function

Sub NewZip(sPath)
    'Create empty Zip File
    'Changed by keepITcool Dec-12-2005
    If Len(Dir(sPath)) > 0 Then Kill sPath
    Open sPath For Output As #1
    Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
    Close #1
End Sub

1 Ответ

1 голос
/ 23 марта 2012

Файловые операции или другие операции оболочки из оболочки являются сложными для TSQL, поскольку для них нет встроенной поддержки, а разрешения являются распространенной проблемой (учетные записи служб SQL Server могут не иметь разрешения на доступ к файловой системе).

Самое простое решение - просто написать отдельный скрипт на предпочитаемом вами языке; не сценарий на основе Access, поскольку Microsoft рекомендует против автоматизации сервера с использованием Office. Затем запланируйте его как задание SQL Server или с помощью планировщика Windows. К сожалению, вы не упомянули ни свою версию, ни версию SQL Server, поэтому неясно, какими возможностями обладает ваш сервер (например, Express Edition не включает агент SQL, поэтому нет запланированных заданий).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...