gifts2017

Backup-ы средствами 1с

Опубликовал Олег Ромазанов (programmer-1c2007) в раздел Администрирование - Архивирование (backup)

Как прописать backup-ы ИБ средствами 1с

Обычно бэкапами занимаются не программисты, а администраторы. Как правило, они тупо копируют каталог ИБ (в файловом варианте, хотя есть и такие, которые это же самое делают и с серверными базами 1с 7.7, как это не печально...), либо прописывают задание в sql-сервере. В принципе так делать можно (если все правильно сделано), но когда базы большие (не огромные, по 100 и более Гб, а просто большие), когда их много, когда вы не очень доверяете администраторам, или их просто нет, можно сделать по-другому.

Есть пакетный режим работы, как в 1с 7.7, так и в 1с 8. Есть WSH. Ничего не мешает написать скрипт и получить копии средствами 1с. Плюсы - копии компактнее, чем sql-ные, их можно использовать и для баз в файловом варианте, для баз 1с 7.7 их еще можно и запаролить. Минусы - в базах никто не должен сидеть в этот момент.

Пример скрипта для баз 1с 8 (нужно доделать для каждого конкретного применения):

var WshShell, BackUp;
var FSO,F,SFold,SFold2,SubFolders,s;

WshShell = WScript.CreateObject("WScript.Shell");
FSO=WScript.CreateObject("Scripting.FileSystemObject");

// 1-ая база

s = <Путь к исполняемому файлу 1с 8>+" CONFIG /S"+<Путь к базе или сервер и имя базы>+" /N"+<Юзер>+" /P"+<Пароль>+" /DumpIB"+<Путь к файлу бэкапа>;
BackUp = WshShell.Run(s,1,true);
 

// 2-ая база

...

// N-ая база

...

// а далее нужно в конец имени файла добавить дату создания, а чтобы

// можно было хранить в ней бэкапы от разных дат - меняем расширение


SFold=<Путь к папке с бэкапами>;

d = new Date();
Month = d.getMonth();
Date = d.getDate();
Year = d.getYear();

if (Date<10) {
 Date="0"+Date;
} else {
 Date=""+Date;
}
if (Month<9) {
 Month="0"+(Month+1);
} else {
 Month=""+(Month+1);
}
textDate = "_"+Date+""+Month+""+Year;

F=FSO.GetFolder(SFold);

Files= new Enumerator(F.Files);
for (; !Files.atEnd(); Files.moveNext()) {
 if (FSO.GetExtensionName(Files.item())=="dt") {
  FSO.MoveFile(Files.item(),FSO.GetParentFolderName(Files.item())+"\\"+FSO.GetBaseName(Files.item())+textDate+"._"+FSO.GetExtensionName(Files.item()));
 }
}

SubFolders= new Enumerator(F.SubFolders);
for (; !SubFolders.atEnd(); SubFolders.moveNext()) {
 FS=FSO.GetFolder(SubFolders.item());
 Files= new Enumerator(FS.Files);
 for (; !Files.atEnd(); Files.moveNext()) {
  if (FSO.GetExtensionName(Files.item())=="dt") {
   FSO.MoveFile(Files.item(),FSO.GetParentFolderName(Files.item())+"\\"+FSO.GetBaseName(Files.item())+textDate+"._"+FSO.GetExtensionName(Files.item()));
  }
 }
}

Вот и все, файл прописываем в планировщике, задаем расписание и получаем то, что желали.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Brr (brr) 09.01.09 21:08
Было бы неплохо и в планировщик прописаться "средствами 1С" :)
2. Андрей Скляров (coder1cv8) 11.01.09 09:05
(1) Я такое делал :) Ничего сложного...
ЗЫ: Советую использовать "Конструктор параметров командной строки", первую часть скрипта он генерит автоматом, мог бы генерить и вторую (с датой создания), если бы не лень :)
3. Brr (brr) 11.01.09 15:38
(2) Код в студию :), я например не знаю как это делать.
4. Андрей Скляров (coder1cv8) 11.01.09 16:19
(3) Легко! ) Что-то типа этого:
Код
СИМ=ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2");
Планировщик=СИМ.Get("Win32_ScheduledJob");
СтрДатаВремя="********"+Формат(ТекущаяДата(),"ДФ=ЧЧммсс")+".000000+180";
КодВозвр=Планировщик.Create(ПутьКЗадаче,СтрДатаВремя,Ложь,,,Истина);
Показать полностью
5. Андрей Скляров (coder1cv8) 11.01.09 16:21
(4) Как всегда движок сайта код испоганил! ( Но принцип, я думаю, ясен...
6. Brr (brr) 11.01.09 16:28
7. Brr (brr) 11.01.09 16:32
(5) А у класса Win32_ScheduledJob точно есть метод Create?
8. Brr (brr) 11.01.09 16:33
+(7) Есть, извиняюсь, в Код Креаторе не ту закладку выбрал.
9. Василий Демидов (Душелов) 11.01.09 16:34
11. Brr (brr) 11.01.09 17:27
Гхм, мне тут старшие товарищи напомнили про команду at :)
12. Gaziz (Gaziz) 16.01.09 06:43
"либо прописывают задание в sql-сервере" не скажете а где в SQL его прописать "написать скрипт и получить копии средствами 1с" ?
13. vip (vip) 16.01.09 08:15
(12) В job'ах.
Очень удобный механизм, тот же планировщик.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа