Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Резервное копирование

Ответить
Настройки темы
VBS/WSH/JS - [решено] Резервное копирование

Новый участник


Сообщения: 10
Благодарности: 1

Профиль | Отправить PM | Цитировать


Скрипт проверяет наличие файла бекапа SQL в папке архивирует его в архив с помощью rar с добавление даты в имя архива. Затем копирует архив на удаленный сервер. И удаляет старые архивы с локального и удаленного сервера. Т.к. архивируется с пошью rar в скрипте реализовано вычисление задержки в зависимости от размера файла. Все действия ведуться в логах. В конце отправляется писмьо на заданный адрес с вложенным логом с помощью blat.
****************************************************************************
Код: Выделить весь код
'========================================================================== 
' 
' VBScript Copy Backup folder 
' 
' NAME: CopBackFold.vbs 
' 
' AUTHOR: Alexey Petrov 
' DATE  : 20/01/2011 
' Version 2.0.1 
'========================================================================== 
Option Explicit 
'On Error Resume Next 
Const OverWriteFiles = True 
Dim sFolder, dFolder 
Dim rDate, oldDaterm, oldDate 
Dim objFSO, objTxtFile 
Dim Arg, FileName 
'Переменные логов 
Dim LogFile, objOutputFile 
'Переменные отправки почты 
Dim subj, body, cons, Sleep 
Dim WShell 
Dim Year, Month, Day, oldFile, oldDateLoc 
Dim sFile, ArrBase(), flBase, intSize, fold, Folder, file 
Dim strNextLine, status, iDir 

flBase = "H:\script\Backup_Base.txt" 
intSize = 0 
Set WShell=CreateObject("WScript.Shell") 
Set objFSO = CreateObject ("scripting.fileSystemObject")       'Подключение к объект 

oldDateloc = Time() 
  
Set objTxtFile = objFSO.OpenTextFile(flBase, 1) 

'Подключение объектов 
Set Arg = WScript.Arguments.Named    
    
'Проверка аргументов 
'Присвоение пути копирования 
If Arg.Exists("source") Then      'Значение первого аргумента                      
 sFolder = Arg("source")                                        
 Else 
 sFolder = "H:\SQL_BACKUP\" 
 End If 
If Arg.Exists("dest") Then   'Значение второго аргумента 
 dFolder = Arg("dest")                
 Else 
 dFolder = "\\Tr1\SQL_BACKUP\everyday\Back_" &rDate &"\" 
 objFSO.CreateFolder(dFolder) 
 End If    
  
If Arg.Exists("help") Xor Arg.Exists("h") Then   'Значение третьего аргумента 
 WScript.Echo("Cкрипт для копирования бекапов, и хранения определенного количества архивов"+ vbCrLf + vbCrLf) 
 WScript.Echo("Атрибуты:" + vbCrLf + vbCrLf + "/source:папка-источчник" + vbCrLf + "/dest:папка-приемник") 
 WScript.Quit 1 
 End If 

 'Пишем лог. 
if objFSO.FolderExists(sFolder) Then 
 LogFile = "H:\log\log-" &rDate & ".log" 'создаем файл 
 Set objOutputFile = objFSO.CreateTextFile(LogFile, TRUE) 
   if objFSO.FolderExists(dFolder) Then    
   Else 
   WScript.Echo("Папка " & dFolder & " не существует!!!!!!!"+ vbCrLf) 
   objOutputFile.WriteLine("Папка " & dFolder & " не существует!!!!!!!"+ vbCrLf) 'в логи 
   body = CHR(34) &"Папка " & dFolder & " не существует!!!!!!!" &CHR(34)'Текст сообщения 
   objOutputFile.Close 
   Email 
   WScript.Quit 1 
   End if 
 Else 
  WScript.Echo("Папка " & sFolder & " не существует!!!!!!!"+ vbCrLf) 
  body = CHR(34) &"Папка " & sFolder & " не существует!!!!!!!" &CHR(34) 'Текст сообщения 
  Email  
  WScript.Quit 1 
End if 


WScript.Echo("Источник:" &sFolder ) 'на экран 
objOutputFile.WriteLine("Источник:" &sFolder ) 'в логи 
WScript.Echo("Приемник:" &dFolder ) 
objOutputFile.WriteLine("Приемник:" &dFolder ) 
WScript.Echo("=============================================="+ vbCrLf + vbCrLf) 
objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) 




'Удалнение старых бекапов на Tr1 
 WScript.Echo("Удалнение старых бекапов на Tr1.....") 
objOutputFile.WriteLine("Удалнение старых бекапов на Tr1.....") 
WScript.Echo("=============================================="+ vbCrLf) 
objOutputFile.WriteLine("=============================================="+ vbCrLf) 

If objFSO.FolderExists("\\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm) Then                        'Проверка на существование 
   WScript.Echo("Папка \\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm &" существует и бедет удалена") 
   objOutputFile.WriteLine("Папка \\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm &" существует и бедет удалена") 
   objFSO.deleteFolder ("\\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm) 
   WScript.Echo("Папка удалена!") 
   objOutputFile.WriteLine("Папка удалена!") 
   WScript.Echo("=============================================="+ vbCrLf + vbCrLf) 
   objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) 
 Else 
   WScript.Echo("Папка \\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm &" не существует!") 
   objOutputFile.WriteLine("Папка \\Tr1\SQL_BACKUP\everyday\Back_" & oldDaterm &" не существует!") 
    
   WScript.Echo("=============================================="+ vbCrLf + vbCrLf) 
   objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) 
End If 

WScript.Echo("Ежедневное Копирование бекапов на Tr1.....") 
objOutputFile.WriteLine("Ежедневное Копирование бекапов на Tr1.....") 
WScript.Echo("=============================================="+ vbCrLf) 
objOutputFile.WriteLine("=============================================="+ vbCrLf) 

Do Until objTxtFile.AtEndofStream 
    strNextLine = objTxtFile.Readline 
   ReDim Preserve ArrBase(intSize) 
        ArrBase(intSize) = strNextLine 
      intSize = intSize + 1 
    
Loop 


Dim i 
For i = 1 To UBound(ArrBase) 
    
   sFile = "H:\SQL_BACKUP\" &ArrBase(i) &"\" &ArrBase(i) &"_backup_" &Year &"_" &Month &"_" &Day &".rar" 
   oldFile = "H:\SQL_BACKUP\" &ArrBase(i) &"\" &ArrBase(i) &"_backup_" &oldDateLoc &".rar" 
   dFolder = "\\Tr1\SQL_BACKUP\everyday\Back_" &rDate &"\" &ArrBase(i) &"\" 
   iDir = "H:\SQL_BACKUP\" &ArrBase(i) 
       
   objFSO.CreateFolder(dFolder) 
   FileName = ChackFile (iDir, ArrBase(i)) 
            if status = 1 Then 
               arch 
               WScript.Echo("База " &ArrBase(i) &" за архивирована."+ vbCrLf) 
               objOutputFile.WriteLine("База " &ArrBase(i) &" за архивирована."+ vbCrLf)    
            Else 
               WScript.Echo("Файл базы " &ArrBase(i) &" отсутствует."+ vbCrLf) 
               objOutputFile.WriteLine("Файл базы " &ArrBase(i) &" отсутствует."+ vbCrLf) 
            End if 
            if objFSO.FileExists (sFile) Then             
               CopyFile 
               WScript.Echo("Файл " &sFile &" перемещен... "+ vbCrLf ) 
               objOutputFile.WriteLine("Файл " &sFile &" перемещен... "+ vbCrLf) 
            Else 
               WScript.Echo("Файл " &sFile &" отсутствует!!! "+ vbCrLf ) 
               objOutputFile.WriteLine("Файл " &sFile &" отсутствует!!! "+ vbCrLf)                   
            End if 
            DelFile 
 Next    
    
'Закрытие файла логов 
objOutputFile.Close 
'Удаление старых логов 
if objFSO.FileExists("H:\log\log-" & oldDaterm & ".log") Then 
   objFSO.deleteFile ("H:\log\log-" & oldDaterm & ".log") 
End if 

WrDate 
'objFSO.deleteFolder ("H:\SQL_BACKUP\BP81") 
body = CHR(34) &"Ежедневное копирование бекапов успешно выполнено!!!!" &CHR(34) 
Email 
  
'Отправка письма 
Sub Email 
   subj = CHR(34) &"Backup_1C_SQl" &CHR(34) 
   cons = "-charset windows-1251 -to info@mail.ru -subject " &subj &" -body "&body &" -attach " &LogFile 
   WShell.Run("H:\script\blat.exe " &cons ) 
End Sub    

' копирование ежедневных бекапов на Tr1... 
Sub CopyFile 
   WScript.Echo("Перемещение " &sFile &" на Tr1... " &Now) 
   objOutputFile.WriteLine("Перемещение " &sFile &" на Tr1... " &Now) 
   objFSO.CopyFile sFile, dFolder    
End Sub 

'Полное копирование на Tr1... 
Sub CopyFolder 
   WScript.Echo("Копирование бекапов на Tr1.....") 
   objOutputFile.WriteLine("Копирование бекапов на Tr1.....") 
   WScript.Echo("=============================================="+ vbCrLf) 
   objOutputFile.WriteLine("=============================================="+ vbCrLf) 

   If objFSO.FolderExists(dFolder) Then 
      WScript.Echo("Перемещение бекапов на Tr1... " &Now) 
      objOutputFile.WriteLine("Перемещение бекапов на Tr1... " &Now) 
      objFSO.CopyFolder sFolder, dFolder , OverWriteFiles               'Копирование каталогов 
      WScript.Echo("Бекапы перенесены на Tr1 успешно!!! " & Now) 
      objOutputFile.WriteLine("Бекапы перенесены на Tr1 успешно!!! " & Now) 
      WScript.Echo("=============================================="+ vbCrLf + vbCrLf) 
      objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) 
   Else 
      WScript.Echo("Папка " & dFolder &" не существует! Данный не перенесены!!") 
      objOutputFile.WriteLine("Папка " & dFolder &" не существует! Данный не перенесены!!") 
      WScript.Echo("=============================================="+ vbCrLf + vbCrLf) 
      objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) 
   End If 
End Sub 

Sub arch 
   WScript.Echo("==================Архивация базы " &ArrBase(i) &"...==================================="+ vbCrLf) 
   objOutputFile.WriteLine("==================Архивация базы " &ArrBase(i) &"...==================================="+ vbCrLf) 
   WShell.Run("H:\script\rar m H:\SQL_Backup\" &ArrBase(i) &"\" &ArrBase(i) &"_backup_" &" -agyyyy_mm_dd -m5 -rr -idcp H:\SQL_Backup\" &ArrBase(i) &"\" &ArrBase(i) &"_backup_" &Year &"_" &Month &"_" &Day &"*.bak ") 
    Sleep = TimeSleep (iDir, FileName) 
   WScript.Sleep(Sleep) 
End sub 

Sub DelFile 
   WScript.Echo("Удалнение старых бекапов локально.....") 
   objOutputFile.WriteLine("Удалнение старых бекапов на локально.....") 
   WScript.Echo("=============================================="+ vbCrLf) 
   objOutputFile.WriteLine("=============================================="+ vbCrLf) 

   If objFSO.FileExists(oldFile) Then                        'Проверка на существование 
      WScript.Echo("Файл " & oldFile &" существует и бедет удален") 
      objOutputFile.WriteLine("Файл " & oldFile &" существует и бедет удален") 
      objFSO.deleteFile(oldFile) 
      WScript.Echo("Файл удален!") 
      objOutputFile.WriteLine("Файл удален!") 
      WScript.Echo("=============================================="+ vbCrLf + vbCrLf) 
      objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) 
   Else 
      WScript.Echo("Файл " & oldFile &" не существует!") 
      objOutputFile.WriteLine("Файл " & oldFile &" не существует!") 
      WScript.Echo("=============================================="+ vbCrLf + vbCrLf) 
      objOutputFile.WriteLine("=============================================="+ vbCrLf + vbCrLf) 
   End If 
End Sub 

Function Time() 
Year = DatePart("yyyy", Now) 
   if DatePart("m", Now) < 10 Then 
      Month = 0 &DatePart("m", Now) 
   Else 
      Month = DatePart("m", Now) 
   End if 

   if DatePart("d", Now) < 10 Then 
      Day = 0 &DatePart("d", Now) 
   Else 
      Day = DatePart("d", Now) 
   End if 

rDate = Day &"-" &Month &"-" &Year 
'Дата старого архива удаленно 
   Dim oldDayrm, oldMonthrm, oldYearrm 
oldDayrm = Day 
oldMonthrm = Month 
oldYearrm = Year 
if (oldDayrm < 31) then 
   if ( oldMonthrm = 01 or 04 or 06 or 08 or 09 or 11) Then 
      oldDayrm = 31 - (30 - oldDayrm) 
      if oldMonthrm = 01 Then 
         oldMonthrm = 12 
         oldYearrm = oldYearrm - 1 
      End if 
      if oldMonthrm = 11 then 
         oldMonthrm = oldMonthrm - 1 
      Else 
         oldMonthrm = "0" &(oldMonthrm - 1) 
      End if 
       
   Elseif (oldMonthrm = 03) Then 
      if oldDayrm > 3 Then 
         oldDayrm = 59 - (30 - oldDayrm) 
         oldMonthrm = oldMonthrm - 2 
      Else 
         ldDayrm = 28 - (30 - oldDayrm) 
         oldMonthrm = oldMonthrm - 1 
      End if 
   Else 
      oldDayrm = 30 - (30 - oldDayrm) 
      if oldMonthrm = 12 then 
         oldMonthrm = oldMonthrm - 1 
      Else 
         oldMonthrm = "0" &(oldMonthrm - 1) 
      End If 
   End if 
End if 
    
'Дата старого архива локально 
Dim oldDay, oldMonth, oldYear 
oldDay = Day 
oldMonth = Month 
oldYear = Year 
if (oldDay < 8) then 
   if ( oldMonth = 01 or 04 or 06 or 08 or 09 or 11) Then 
      oldDay = 31 - (7 - oldDay) 
      if (oldMonth = 01) Then 
         oldMonth = 12 
         oldYear = oldYear - 1 
      End if 
      if oldMonth = 11 then 
         oldMonth = oldMonth - 1 
      Else 
         oldMonth = "0" &(oldMonth - 1) 
      End If                
   Elseif (oldMonth = 03) Then 
      oldDay = 28 - (7 - oldDay) 
      oldMonth = "0" &(oldMonth - 1) 
   Else 
      oldDay = 30 - (7 - oldDay) 
      if oldMonth = 12 then 
         oldMonth = oldMonth - 1 
      Else 
         oldMonth = "0" &(oldMonth - 1) 
      End If 
   End if 
End if 
   Time = oldYear &"-" &oldMonth &"-" &oldDay 
    
End Function 

sub WrDate 
   Dim objFileDate 
   set objFileDate = objFSO.CreateTextFile("LastBackDay.txt", TRUE) 
   objFileDate.WriteLine(Day) 
   objFileDate.WriteLine(Month) 
   objFileDate.WriteLine(Year) 
   objFileDate.Close 
End sub 

Function ChackFile (iDir, BaseName) 
   Dim Files, Maska, Re 
   Set Files = objFSO.GetFolder(iDir).Files 
   Maska = "^" &BaseName &"_backup_" &Year &"_" &Month &"_" &Day &"_......_.......\.bak$" 
   status = 0 
   Set Re = New RegExp 
   Re.Pattern = Maska 
   Re.IgnoreCase = True 

   For Each File In Files 
      If Re.Test(File.Name) Then 
         ChackFile = File.Name 
         status = 1 
      end if 
      
   Next 

End Function 

'Вычисление время задержки 
Function TimeSleep (iDir, FileName) 
   Dim objFile, Target, FileSize 
   Target = iDir &"\" & FileName 
   Set objFile = objFSO.GetFile(target) 
   FileSize = objFile.Size 
      If FileSize < 300000000 Then 
         TimeSleep = 300000 
      ElseIf FileSize < 100000000 Then 
         TimeSleep = 1800000 
      ElseIf FileSize < 5000000000 Then 
         TimeSleep = 3600000 
      ElseIf FileSize < 10000000000 Then 
         TimeSleep = 7200000 
      ElseIf FileSize < 30000000000 Then 
         TimeSleep = 10800000 
      ElseIf FileSize < 80000000000 Then 
         TimeSleep = 14400000 
      Else 
         TimeSleep = 18000000 
      End if 
End function
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:31, 20-01-2011

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


у меня крутится примерно такой же скрипт, только батник...
вот только не понял: зачем задержка, если у метода Run есть параметр (3-й по счету), который отвечает за ожидание завершения?
Run Method (Windows Script Host)
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:32, 21-01-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 10
Благодарности: 1

Профиль | Отправить PM | Цитировать


amel27, Спасибо упустил этот момент.

Отправлено: 06:37, 21-01-2011 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Резервное копирование

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 R2 - Резервное копирование legionkg Windows Server 2008/2008 R2 13 04-10-2018 09:10
HDD - Резервное копирование zdughi Накопители (SSD, HDD, USB Flash) 7 15-06-2009 07:36
Debian/Ubuntu - Резервное копирование. Tankistspb Общий по Linux 2 25-02-2008 11:56
Резервное копирование!! Forest_G Хочу все знать 2 09-06-2006 17:36
Резервное копирование dimon55 Хочу все знать 1 01-08-2003 23:55




 
Переход