Портал г.Новоселица Черновицкой области, Украина; Портал м.Новоселиця Чернівецької області, Україна

Резервное копирование баз данных 1С средствами VBScript

by dnepr

Что сложного в резервном копировании данных? Ничего: взять папку, упаковать ее, записать еще куда-то – на компакт, на другой компьютер, для перестраховки.

Теперь представим эту операцию в двух ситуациях.

Первая ситуация – несколько компьютеров. Напряг резко возрастает: запусти 1С, спроси, что они обычно запускают (из 3 стандартных, 2 комплексных, кучи демо- конфигураций), прочти папку, залезь на цэ-диск, найди эту папку, запакуй, найди (или вспомни) папку для бэкапа… Я всегда считал, что две работы нужно сравнивать не только по трудозатратам, но и по требуемой концентрации. Тут уж явно не подходит выражение «взять папку, упаковать ее, записать еще куда-то». Папка не одна, упаковать не все, найти, куда копировать.

Вторая ситуация – удаленное копирование, когда на месте есть только бухгалтера, которым показали только как «нажать сюда, сюда, и ввести количество и сумму». Я их прекрасно понимаю: насколько нужно быть многосторонне образованным, чтобы делать бухгалтерию? Надо понимать, что такое «шаровые опоры», «естественная убыль», а тут еще «архиватор RAR». Скажите им: «Что сложного в резервном копировании данных? Ничего: взять папку, упаковать ее, записать еще куда-то – на компакт, на другой компьютер, для перестраховки». Живописная картина, знакомая.

Вот тут-то мы начинаем искать пути автоматизации.

Из беглого исследования я выделил такие программы, как nnCron + nnBackUp, MZ-архиватор, Second Copy 2000, еще парочка у вас на памяти. При их тестировании оказалось, что настроек у них – море, т.е. они удовлетворят многих пользователей.

Правда, если бы меня все устроило, этой статьи бы не было. Что ж меня, такого привередливого, не устроило? Не устроило то, что практически каждая из них, такая шикарная в разнообразии своих возможностей, нет-нет, да и отказывалась уметь что-то нужное. То она умеет писать на компакты, но не умеет отреагировать на занятость баз, то умеет все, а с сетью не работает. Что особенно разочаровывает – невозможность влиять на ситуацию. Приходится взять тройку разных программ и компоновать из них систему архивации.

Замечу, что nnCron это не касается. Эта система позволяет делать практически все нужное, и даже более. Я с ней не работал (мой выбор – PowerPro), но я знаю, что это такое. С ее помощью можно и определить открытые окна, и мышкой подвигать, и файлы просчитать, и компьютер выключить.

Что же меня до сих пор не устраивает? А не устраивает то, что существует много программ с большим количеством никому не нужных возможностей и с одним мааааленьким неуменьем. Я потратил время на поиск, время на изучение, а потом оказалось – не то. В конце концов, разозлившись, открыл EditPlus (можно и Блокнот) и сделал то, что и раньше, – получил удовольствие от собственноручно написанного кода. Писал я на VBScript, но с одной поправкой – код расположил не в виде пакетного файла, а в hta – HTML-aplicattion, т.е. получил на руки весь OLE-механизм с красивым оформлением веб-странички.

Приведу алгоритм работы, который мне был нужен.

Утром, при включении компьютера, бухгалтер видит, что автоматом запускается архивация. Мною предупрежден: «Пока не исчезнет ЧЕРНОЕ окно – 1С не включать!». Черное окно исчезло, включается 1С, а в это время…

Во время «черного окна» происходило простое копирование всей базы. Не архивация, а копирование, чтобы как можно быстрее освободить базы для работы бухгалтеров. Копирование ведь быстрее, чем архивирование. Если же копировать все, кроме индексов (*.cdx), копирование произойдет еще быстрее. Стандартными средствами это не получится (необходима маска исключения). Раньше я использовал nnBackUp, а потом додумался, что если вместо копирования воспользоваться архивированием без сжатия, то можно избавиться от nnBackUp и пользоваться только rar-ом. Архивирование без сжатия – это и высокая скорость копирования, и маска исключения, а также, как оказалось, еще и возможность обратиться к результату не как к папке с подпапками, а как к файлу, что пригодилось в дальнейшем. Кроме того, теоретически, – я не проверял, – если файлы в архив не добавлять (команда «a»), а обновлять (команда «u»), то процесс пойдет еще быстрее.

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

Следующий процесс я гордо назвал «стратегия места на диске». Звучало красиво. Действие заключается в удалении старых архивов. Но я хотел, чтобы старые архивы удалялись не сразу, а скапливались, чтобы я потом смог их скидывать на контрольные компакт-диски. Поэтому на этом этапе старые (кроме последних 5-ти архивов, которые я назвал кешем записи) архивы переносились в дублирующую папку. Размер этой папки контролируется на уровне размера компакт-диска, чтобы я мог со спокойной душой кинуть ее целиком на компакт (до тех пор, пока я не автоматизирую и этот процесс) и удалить. Если папка укомплектовалась нужным размером, ее содержимое скидывается в папку №2 (которая в свою очередь скидывается в папку №3), а папка начинает расти с нуля. Так я создал такой себе стек из трех папок, который мне хватит где-то на 80 загрузок (месяца на три – это зависит от размера архивов). Если же я не появлюсь и через три месяца, - ну, что ж, придется пожертвовать папкой №3, которая удаляется с концами.

Последний этап алгоритма – дублирование информации. В моем случае это запись на компакт-диск. Я порылся в сети, пытаясь найти возможность записать компакт из командной строки. Можно было бы сделать это через Windows, но встроенная запись компактов появилась только в Windows XP, а на многих обслуживаемых компьютерах – Windows 98. Тут я обнаружил, что в пакет Nero входит утилита Nerocmd, которая и есть запись CD с командной строки.

Запись на компакт-диск производится только при условии, что эти файлы отсутствуют на компакт-диске.

Итак, в нескольких словах итог алгоритма: быстрое копирование, упаковка в спокойной обстановке, сохранение старых архивов до определенного времени, дублирование на компакт-диск.

Особенно меня прельщают перспективы решения задачи резервного копирования через VBScript.

Открыть этот файл для редактирования я могу на любом компьютере, так как файл – текстовый. Могу и оформить, так как внутри – HTML.

Копирование можно настроить на любые условия. Например, у меня был случай, когда записывающее устройство хранилось на клиентской машине, а создание архивов происходило на файловом сервере. Тогда само копирование баз данных было заменено на копирование уже готовых архивов баз данных из сетевых папок, причем только новых, чтобы не грузить сеть.

В теле скрипта используются Nero и WinRar. Nero очень часто используется на машинах юзеров для работы с пишущими приводами, WinRar и WinZip взаимозаменяемы. Получается, что систему для работы скрипта настраивать не нужно. Только местом для архивов обеспечить.

Главным плюсом остается именно гибкость, послушность программы, в отличие от программ с зашитыми возможностями. Минусом данного решения является необходимость знания VBScript, но его знание пригодится еще много раз и в разных местах, в отличие от программ, использующих свои скриптовые языки.

И вот результат: все работает, дополнительных программ не нужно, вместо гордого имени «программа» здесь работает какой-то текстовый файл. Разве что возможности… Сторонние программы из 2000 операций выполняют три из четырех нужных мне задач, а мой скрипт из 4 операций выполняет четыре.

Скрипт вы можете скачать здесь. По умолчанию я в функции sPak отключил функцию записи на компакт. Вы можете тестировать скрипт без опаски, только откройте его в Блокноте и заполните первоначальные переменные - пути, имена. Это для начала. А потом попробуйте подогнать этот скрипт сугубо для своего пользования - когда получится, поделитесь вашим успехом.