PERL-SCRIPT АРХИВАЦИИ ДАННЫХ ФАБИУС

Предлагается к использованию perl-script FABBACK.BAT архивации данных Фабиус.

 

В отличие от встроенной архивации Фабиус

========================================

 

1. Гарантируется сохранение целостности данных, благодаря использованию

специальной утилиты разработчика (сервера Advantage Database) adsbackup.

2. Только для баз данных типа ADT.

 

Как работает

============

 

1. Утилита adsbackup копирует данные, отобранные по маске, без индексных

файлов в временную backup-директорию.

2. Утилита winrar сжимает файлы из шага 1 в директорию rar-архива.

3. Просматривается rar-архив и устаревшие архивы сверх заданного числа

в пределах месяца удаляются.

 

Аргументы командной строки

==========================

 

%1 - число сохраняемых предыдущих месяцев.

------------------------------------------

Например, текущий месяц - август. Вы задаете %1=8. Скрипт будет искать данные за август,

7 месяцев до августа и декабрь прошлого года.

Если установить %1=20, то скрипт будет искать данные за август, 7 месяцев

до августа, все месяца прошлого года и декабрь позапрошлого.

Значение %1=0 допустимо - возьмутся только данные текущего месяца.

Годовые данные будут искаться для архивации даже если %1=0.

 

%2 - число хранимых копий архива.

---------------------------------

Например, задано %2=30 - будут храниться 30 последних копий rar-архивов.

 

Примечание

++++++++++

При смене месяца ВСЕ архивы прошлого месяца автоматически не удаляются.

 

%3 - URL директории Фабиус.

---------------------------

Типа: \\server\users\fabius

Такую адресацию вместо привычной типа F:\fabius требует утилита adsbackup.

 

%4 - Имя директории Справочников.

---------------------------------

Например: reflis

     или: -

Никаких обратных слэшей (типа \), двоеточий, букв диска, пробелов, кириллицы

здесь быть не должно.

Если имя reflis-директории начинается с символа "-" (тире типа-минус),

то архивация справочников будет опущена. То же случится, если место

имени reflis-директории будет занимать одиночный символ типа-минус.

 

Примечание

++++++++++

Если справочники не архивируются, то устаревшие архивы справочников

сверх заданного числа (в текущем месяце) автоматически не удаляются.

 

%5 - Имя директории Данных.

---------------------------

Например: opdata

Те же требования, как к имени директории Справочников.

 

%6 - Полный путь и имя директории rar-архивов.

----------------------------------------------

Например: c:\usr\backup\zip

или       \\pool\usr\backup\zip

или       z:\backup\zip

 

%7 - Имя log-файла.

-------------------

Например: c:\usr\backup\log\fabius.log

     или: fabius.log

     или:

Если имя log-файла опущено, то в директории запуска будет

создан log-файл с именем "backup_ГГГГММДДччммсс.log".

 

Пример командной строки запуска скрипта

=======================================

 

fabback.bat 3 3 \\server\users\fabius reflis opdata c:\usr\backup\zip fabius.log

rem        %1 %2 %3                    %4     %5     %6                %7

 

или, для архивирования только данных и с log-файлом, имеющем разовое имя

 

fabback.bat 3 3 \\server\users\fabius -      opdata c:\usr\backup\zip

rem        %1 %2 %3                   %4     %5     %6                %7

 

или, то же самое, но как явный perl-script

 

perl fabback.pl 3 3 \\server\users\fabius reflis opdata c:\usr\backup\zip fabius.log

rem            %1 %2 %3                    %4     %5     %6                %7

 

 

Что должно быть к моменту запуска

=================================

 

1. На сервере ADS в установках базы данных количество одновременно открытых

таблиц должно быть не меньше 1000. То же и для индексных файлов.

Дело в том, что число справочников reflis вплотную приблизилось к 600.

Утилита adsbackup при обработке справочников открывает их все одновременно,

плюс 2 или 3 сотни управляющих элементов таблиц используют пользователи.

Итого - близко к тысяче.

 

2. На машине, запускающей скрипт, должен быть установлен клиент ADS -

tdataset.exe иначе все a*.dll-библиотеки из Fabius\Program копируйте

в директорию запуска скрипта.

 

3. На машине, запускающей скрипт, должен быть установлен ActivePerl.

 

4. На машине, куда пишутся rar-архивы, должна быть директория %6.

Продолжая пример, если это машина, запускающая скрипт - c:\usr\backup\zip.

Или, если это какая-то другая машина "pool" - \\pool\usr\backup\zip,

или - z:\backup\zip.

 

Важно!

+++++

Убедитесь, что пользователь машины, на которой стартует скрипт,

и от имени которого стартует скрипт,

может читать из директории %3, а также читать, писать и стирать в директории %6.

 

Например, если Вы используете для %6 запись типа URL (\\pool\usr\backup\zip),

то следующие команды должны завершиться хорошо

 

mkdir \\pool\usr\backup\zip\aaa (создание директории %6\aaa)

rmdir \\pool\usr\backup\zip\aaa (удаление директории %6\aaa)

 

Важно!

++++++

Чтобы не морочиться с кавычками в командной строке запуска

НЕ ИСПОЛЬЗУЙТЕ КИРИЛЛИЦЫ И ПРОБЕЛОВ В ИМЕНАХ МАШИН И ДИРЕКТОРИЙ.

 

Именование rar-архивов

======================

 

Rar-архив Справочников получает от скрипта вот такое имя - %5%1_ГГММДД-ччмм.

Продолжая пример, если %1=8 (кол-во предыдущих месяцев),

%4=reflis (директория справочников),

%5=opdata (директория данных)

и скрипт запущен 27 августа 2008 года в 14 часов 26 минут,

то имя архива справочников будет вида reflis08_080827-1428.rar

а имя архива данных - opdata08_080827-1428.rar

В конце 28, а не 26 потому, что  2 минуты до winrar работала adsbackup.

 

Удаление старых rar-архивов сверх заданного числа

=================================================

 

Rar-архивы Справочников удаляются по маске - %4%1_ГГММ,

а rar-архивы Данных - %5%1_ГГММ.

 

Это значит:

 

1. Если на момент смены месяца остались rar-архивы прошлого месяца,

то они так и останутся.

Например, если %2=32 и Вы архивируете 1 раз в день, то в наступившем новом месяце

(и далее в будущем)

Вы будете наблюдать по одному старому архиву на каждый день прошлого

месяца - итого 30 (если в прошедшем месяце 30 дней) или 31 (если в прошедшем месяце 31 день)

Если %2=32 и архивация 2 раза в день, то ... останутся 2 архива на каждый день

из последних 16 дней прошлого месяца - итого 32.

Если Вам не нужно столько архивов - удалите их вручную.

 

2. Если Вы разок (в начале декабря) сделали %1=12 %2=1, а потом всё время %1=3 %2=31,

то 12-ти месячный архив никуда не денется, если только, в декабре же, еще раз

не запустите %1=12 %2=1.

 

Совет!

++++++

Если архив важен, уберите его от скрипта подальше  - типа ren, move, copy ...

 

Log-файл

========

 

Скрипт пишет в директорию запуска накопительный log-файл

с именем из аргумента %7 в DOS-кодировке.

Скрипт перехватывает и направляет в log все сообщения

от adsbackup, winrar и выполняемых системных команд.

В силу этого, в появляющемся окне запуска скрипта ничего ценного

не отображается, кроме сообщений интерпретатора Perl,

которых нет, если всё в порядке.

 

ActivePerl

==========

 

Свободно распространяемое ПО.

 

Источники:

 

1. Наш ftp:\\212.248.40.154\temp\Distrib\ActivePerl-5.10

Около 17 Мгб.

2. В любом поисковике найдете источники.

 

Устанавливается так:

--------------------

 

1.Запустить файл ActivePerl-...-.msi, OK, ..., OK, Finish (Готово).

2. Пуск->Программы->Стандартные->Командная строка

4. Выполните команду: perl -h

Если видите вывод help строки запуска perl - установка завершена.

Если нет - выполните команду:

path c:\perl\site\bin;c:\perl\bin;%path%

или дождитесь следующей загрузки машины, когда переменная среды %path%

получит обновленное установкой Perl значение.

Команда perl -h должна выполняться правильно.

 

Клиент ADS - tdataset.exe

=========================

 

Взять можно на нашем ftp:\\212.248.40.154\temp\Distrib\ads\8.1\Windows\client\tdataset.exe

 

Устанавливается несколько сложнее, чем ActivePerl, т.к. надо не пропустить

диалоговое окно выбора кодировки - RUSSIAN ANSI и RUSSIAN OEM - в двух выпадающих списках.

 

Директория запуска скрипта на Вашей машине

==========================================

 

1. Создайте пустую директорию с любым именем и где Вам удобно.

Например, "c:\pl".

2. Копируйте в неё из ftp:\\212.248.40.154\_pl следующие файлы:

     fabback.*

 

Из fabius\program

     winrar.*

    

Из \\server-ads\Program Files\Extended Systems\Advantage\8.1\Server

     adsbackup.*

    

Используйте Планировщик заданий для запуска скрипта

===================================================

 

1. Cоздайте в директории запуска bat-файл вида:

 

c:

cd \pl

fabback.bat 3 3 \\server\users\fabius reflis opdata c:\usr\backup\zip fabback.log

 

и назовите его (например) arch.bat

 

3. Если я хочу, архивировать Фабиус, каждый день в 8 утра.

Для этого (в Win XP):

Пуск->Программы->Стандартные->Служебные->Назначенные задания

Иконка "Добавить задание".

Окно "Мастер планирования задания",

кнопка "Далее",

кнопка "Обзор" - выбрать c:\pl\arch.bat,

указать имя задания с пометкой что архивируем и во сколько (например): "arch_fabius_08-00"

установить "ежедневно",

кнопка "Далее",

установить время начала "08:00",

кнопка "Далее",

ввести (с подтверждением) пароль (если есть) пользователя,

от имени которого запускается задание,

кнопка "Далее",

кнопка "Готово".

 

Если Вы ошиблись с паролем, то умный Win только сейчас скажет, что задание

не может быть выполнено. В этом случае кликните правой кнопкой мыши

на иконке созданного задания,

всплывающее меню -> свойства -> вкладка "Задание" -> кнопка "Задать пароль".

Задайте правильный пароль.

 

Кликните правой кнопкой мыши на иконке созданного задания,

всплывающее меню -> Выполнить.

Выполните и проверьте результаты.

 

Если по результату проверки всё OK, по образу и подобию создайте по заданию

на каждое время архивации в течение суток.

 

Совет!

++++++

Если у Вас есть филиалы и директория Фабиуса содержит разноименные директории

типа-reflis и типа-opdata, или существует несколько директорий Фабиус,

отразите специфику имен в именах заданий.

Умный Win не даст создать два одноимённых задания.

 

Примечание!

+++++++++++

 

Скрипт написан так, что все имена временных файлов

и создаваемых архивов уникальны, поэтому Вы можете

не заботиться о том, что произойдет, если два (или

более) запущенных архиваций наложились по времени

исполнения друг на друга.

 

Планирование архивации

======================

 

Скрипт написан так, что Вы можете задействовать

либо две машины - сервер-ads и машина-запускающая-скрипт-и-хранящая-архив,

либо три машины - сервер-ads, машина-запускающая-скрипт, емкая-машина-архив.

Наиболее процессороемкая программа - winrar - выполняется на машине-запускающей-скрипт.

 

Как вариант

+++++++++++

 

Пусть есть один завод с одной базой данных.

 

0. Разовая архивация за 60 прошедших месяцев (как изволите):

 

fabback.bat 60 1 \\server\users\fabius reflis opdata c:\usr\backup\zip

 

1. Машина №1 - двухчасовая архивация

 

Имя файла запуска: arch-1m.bat

Его содержание:

c:

cd \pl

fabback.bat 0 3 \\server\users\fabius reflis opdata c:\usr\backup\zip fabback-1m.log

 

Запускать Планировщиком каждые 2 часа.

Устаревшие архивы прошлых месяцев удалять вручную,

т.к. за каждый прошлый месяц будет навсегда сохраняться 3 архива последнего дня

прошлого месяца.

 

2. Машина №2 - суточная архивация

 

Имя файла запуска: arch-2m.bat

Его содержание:

c:

cd \pl

fabback.bat 1 7 \\server\users\fabius reflis opdata c:\usr\backup\zip fabback-2m.log

 

Запускать Планировщиком каждый день.

Устаревшие архивы прошлых месяцев удалять вручную,

т.к. за каждый прошлый месяц будет навсегда сохраняться 7 архивов.

 

3. Машина №3 - недельная архивация

 

Имя файла запуска: arch-4m.bat

Его содержание:

c:

cd \pl

fabback.bat 3 5 \\server\users\fabius reflis opdata c:\usr\backup\zip fabback-4m.log

 

Запускать Планировщиком каждое воскресение (начинать с апреля, если не хотим данные прошлого года).

 

Все замечания, пожелания и вопросы направлять Мягкову Алексею.

==============================================================

 

Это типа всё.