Что нового

Резервное копирование базы SQL с заменой папки старше 4 дней

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
araneon [?]
Функция возвращает массив файлов, исключая самодельное конструирование конструкции поиска. А ещё лучше использовать _FO_FileSearch, один раз выучил параметры и забыл проблемы поиска.
 
Автор
A

araneon

Новичок
Сообщения
59
Репутация
0
AZJIO спасибо
Я так понимаю что в место FileFindFirstFile нужно поствать _FO_FileSearch или _FileListToArray ?
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Извиняюсь что немного не по теме, но почему вы не хотите все тоже самое делать специально созданными средствами для этого в windows и mssql? Единственно что для этой задачи нет, так это создания двойного бэкапа, т.е. если вы хотите что б бэкап был в 2 экземплярах...
Да и мне кажется удобнее было бы сохранять по принципу:

Код:
$Zip_Data = "backup_" & @WDAY & ".zip"


вместо

Код:
$Zip_Data = $Data & ".zip"


у вас не будет необходимости проверять разницу между датами. У себя подобные вещи делаю через запуск WinRar с параметрами. Параметр -aga дописывает к названию файла порядковый номер дня недели. И при создании нового бэкапа, старый просто перезаписывается новым, вы всегда имеете бэкап за неделю без необходимости удалять старые. Как показывает практика - чем проще подход, тем он надежней;)
 
Автор
A

araneon

Новичок
Сообщения
59
Репутация
0
beliy [?]
специально созданными средствами для этого в windows и mssql?
А можно по подробнее ?

Код:
$Zip_Data = "backup_" & @WDAY & ".zip"
В принципе тоже вариант, просто создавая папку имя которой является дата её создания, для сотрудников более доходчива и так им немного проще с ними потом работать, чем смотреть свойства её создания\изменения.
Хотя такой подход действительно более удобен;)
 

beliy

Продвинутый
Сообщения
372
Репутация
72
А можно по подробнее?
Тогда уж скажите подробнее о версиях windows и mssql. Хотя windows не обязательно, от него требуется только планировщик задач...

просто создавая папку имя которой является дата её создания, для сотрудников более доходчива и так им немного проще с ними потом работать, чем смотреть свойства её создания\изменения.
а зачем смотреть свойства? Если нужен бэкап за неделю, то думаю не сложно понимать что backup_1.zip - это бэкап за прошедший понедельник, backup_2.zip - за вторник и т.д.
 
Автор
A

araneon

Новичок
Сообщения
59
Репутация
0
Win 7, SQL 2005

beliy
Если нужен бэкап за неделю, то думаю не сложно понимать что backup_1.zip - это бэкап за прошедший понедельник, backup_2.zip - за вторник и т.д.
Ок, тоже вариант хороший!
Просто Навижинцы меня со своими датами затуркали, вот я с ними и замарочился, но если есть вариант по проще с backup_Х.zip, то я буду Вам только очень сильно благодарен за помощь! :beer:
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Вот пример для 2008 со скриншотами (процедура полностью аналогична для 2005). Это самый простой способ...

Двойные бэкапы вида backup_Х я делаю через bat-файл с таким содержанием:

Код:
"c:\program files\WinRAR\WinRAR.exe" a -m5 -agA -dh -t -r d:\путь_где_будет_лежать_бэкап\backup_ \\путь_откуда_забираем_бэкапы\1C_backup$\

На сервере на котором храните бэкапы добавляете в планировщик задач. Все...
 
Автор
A

araneon

Новичок
Сообщения
59
Репутация
0
beliy
ОК спасибо, попробую разобраться с вашим примером. :ok:
К сожалению WinRAR у нас по корпоративным требованиям не проходит :( в место него 7zip, у него тоже вроде можно через батник архивы делать :scratch:
 

beliy

Продвинутый
Сообщения
372
Репутация
72
У 7zip нет аналога ключа -agA, поэтому сохранять будет только со статическим именем. как вариант можно использовать свой bat на каждый день в котором статически будет прописан для понедельникак "backup_1.zip", для вторника "backup_2.zip" и т.д. Или 1 допустим Autoit скрипт, котрый умеет определять номер дня недели. Вы вибираете способ который более подходит для ваших задач. Да архиватор тут по сути то и не обязательный, 1С способна сама следить за сроком хранения бэкапов, т.э. старый будет автоматически подчищать. Это нужно только если есть необходимость делать бэкапы уже существующих бэкапов (двойной бэкап)...
 

beliy

Продвинутый
Сообщения
372
Репутация
72
araneon

Да, обращайтесь - по возможности помогу...
 
Автор
A

araneon

Новичок
Сообщения
59
Репутация
0
Ну на конец токи вроде всё работает отлично !!! :IL_AutoIt_1:
Спасибо beliy за наводочку :beer: :ok: и всем остальным ;)
В общем что собственно получилось, знаю что выглядит немного громоздко но всё же.
У меня получилось 4 файла.
1) Backup_Nav_Sql.exe
2) backup.ini
3) backup.bat
4) backup.sql

Backup_Nav_Sql.exe
Код:
#include <Date.au3>
#include "Zip.au3"
#include <FileOperations.au3>
#Include <File.au3>
Opt("TrayIconDebug",1)

;~ 	Запускаем батник бекапа баз SQL средствами
$iReturn = RunWait(@ScriptDir & "\backup.bat")

if  FileExists (@ScriptDir & "\Backup.ini") Then  ; Проверка на наличие данного файла, если нет то сообщаем и выходим
	$sPath_ini=@ScriptDir & "\Backup.ini" ; Файл настроек путей для сохранения бекапа
	$A = IniRead($sPath_ini, "A", "Patch","")	; Получаем из INI путь к Bases\Base
	$B = IniRead($sPath_ini, "B", "Patch","")  ; Получаем из INI путь 1 	(диск D в папку Backup (D:\Backup))
	$C = IniRead($sPath_ini, "C", "Patch","")  ; Получаем из INI путь 2 	(IP адрес и путь к папке сетевого хранилища)

;~     Создаём архив
	$Zip_Data = "Backup.zip"
	$Zip = _Zip_Create($A & $Zip_Data)
	_Zip_AddFolder($Zip, $A)

;~ 	Создаём папки с именами дня недели в пути В и С
	DirCreate ( $B & @WDAY)
	$NomberB = $B & @WDAY
	DirCreate ( $C & @WDAY)
	$NomberC = $C & @WDAY

;~ 	Копируем созданый архив по пути В
	FileCopy($Zip, $NomberB, 1)
	Sleep (1000)

;~ 	Очищаем папку с подпапками по пути А
$allfolders = _FileListToArray($A, "*", 2)
For $i=1 to $allfolders[0]
FileDelete($A & "\" & $allfolders[$i] & "\" & "*.*")
Next

;~ 	И перемещаем по пути С
	FileMove($Zip, $NomberC, 1)
Else
	MsgBox(64, "Внимание!!!", "Backup.ini не найден")
	Exit
EndIf


backup.ini
[A]
Patch=C:\Backup\
[В]
Patch=D:\Backup\
[C]
Patch=\\XXX.XXX.XXX.XX\publik\Backup\

backup.bat
sqlcmd -e -i "C:\Back\backup.sql" > sqllog.txt

backup.sql
BACKUP DATABASE [Baza] TO DISK = N'C:\Backup\Base\Baza.bak' WITH NOFORMAT, NOINIT, NAME = N'Baza-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
BACKUP DATABASE [master] TO DISK = N'C:\Backup\Data\master.bak' WITH NOFORMAT, NOINIT, NAME = N'master-Full Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
BACKUP DATABASE [model] TO DISK = N'C:\Backup\Data\model.bak' WITH NOFORMAT, NOINIT, NAME = N'model-Full Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
BACKUP DATABASE [msdb] TO DISK = N'C:\Backup\Data\msdb.bak' WITH NOFORMAT, NOINIT, NAME = N'msdb-Full Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO

Вот как то так ;D:laugh: ;D :IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1:
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Таки стандартными средствами не захотели :smile:
Код:
;Создаём папки с именами дня недели в пути В и С
    DirCreate ( $B & @WDAY)
    $NomberB = $B & @WDAY
    DirCreate ( $C & @WDAY)
    $NomberC = $C & @WDAY

Зачем каждый раз пытаться создавать папки с одинаковым именем? Ведь изначально создадутся 5 папок, а далее DirCreate будет обрабатываться с ошибкой - оно конечно работать будет, но подход не верный. Тут рациональнее через параметр FileCopy создавать дерево каталогов, если путь назначения не существует (смотреть с справке flag 8 )
Код:
FileCopy($Zip, $NomberB, 9)
 
Автор
A

araneon

Новичок
Сообщения
59
Репутация
0
beliy [?]
Таки стандартными средствами не захотели
smiley.gif
почему же, я SQL средствами делаю *.bak файлы а средствами Autoit архивирую и перекидываю по путям из INI файла;)

смотреть с справке flag 8
Во блин, точно, спасибо !!!

P/S У меня SQL 2005 Express
 
Верх