Главная страница
Навигация по странице:

  • © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 37 Автоматизация архивирования БД

  • Примечание Выходной формат данных типа «дата/время» устанавливается в предопределенной переменной DATEFORMAT.Описание раздела

  • Примеры форматов и представляемых ими значений Символьное представление Формат

  • © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 39 Автоматизация архивирования БД

  • Примеры FILE_DIR = "c:\linterSQL\db";Name_File="";Count = 25;Раздел «График выполнения»

  • © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 41 Автоматизация архивирования БД

  • График выполнения ежечасных операций Синтаксис ::=42 © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021

  • Автоматизация архивирования БД everyhour (min= ) ::= ::= { }Описание

  • Примечание (общее для всех операторов данного раздела)

  • © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 43 Автоматизация архивирования БД График выполнения ежедневных операций

  • Синтаксис ::= everyday (time= ) ::= ::= { }Описание

  • Пример everyday(time=22:00){ /* нарастающее архивирование каждый день */ backup ("s -inc -u SYSTEM/MANAGER -f " + lastfilename);}График выполнения еженедельных операций

  • Примечание Mon – понедельник, Tue – вторник, Wed – среда, Thu – четверг, Fri – пятница, Sat – суббота,Sun – воскресение.Описание

  • График выполнения ежемесячных операций Синтаксис

  • Описание Указанные будут выполняться каждый месяц в заданный день месяца и время суток.Примечание

  • Примеры everymonth (date=4, time=03:00)everymonth (date=lastdate, time=23:59)Выполнение в заданное время Синтаксис

  • Описание Указанные будут выполнены один раз при наступлении заданной даты.Раздел «Специальные действия»

  • © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 45 Автоматизация архивирования БД

  • +

  • бд. Системауправлениябазами


    Скачать 0.74 Mb.
    НазваниеСистемауправлениябазами
    Дата01.03.2022
    Размер0.74 Mb.
    Формат файлаpdf
    Имя файлаlhb.pdf
    ТипДокументы
    #378057
    страница4 из 8
    1   2   3   4   5   6   7   8
    Раздел «Начальные установки»
    Раздел «Начальные установки» является необязательным разделом сценария. Он должен включаться в том случае, если в сценарии предполагается использовать данные типа дата/время в формате, отличном от принятого по умолчанию в языке.
    © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021
    37

    Автоматизация архивирования БД
    Установленный разработчиком сценария собственный формат входных данных типа
    «дата/время» запоминается в предопределенной переменной tsformat исходного текста сценария.
    Примечание
    Выходной формат данных типа «дата/время» устанавливается в предопределенной переменной
    DATEFORMAT.
    Описание раздела
    set:
    [tsformat = "<входной формат даты/времени>"];
    <входной формат даты/времени> ::= <строка формата>
    <строка формата>::=
    <элемент формата> [<разделитель><элемент формата>…]
    <разделитель>::=
    / | - | . | : | , | <символ пробела> | "<символьная константа>"
    <элемент формата>::=
    <день месяца>
    | <день года>
    | <месяц>
    | <год>
    | <часы>
    | <минуты>
    <день месяца>::= DD | dd
    <день года>::= DDD | ddd
    <месяц>::=
    ММ | mm | MONTH | Month | month | MON | Mon | mon | MONR
    <год>::= Y [Y [Y [Y]]]] | y [y [y [y]]]]
    <часы>::= { HH | hh } [ {MID | mid } ]
    | { HH12 | hh12 }[ {MID | mid] }
    | { HH24 | hh24 }
    <минуты>::= MI | mi
    Описание шаблонов
    Шаблоны
    DD, dd задают представление дня месяца арабскими цифрами. Диапазон значений этих шаблонов от 1 до 31.
    Шаблоны
    DDD, ddd задают представление дня года арабскими цифрами. Диапазон значений этих шаблонов от 1 до 366.
    Шаблоны
    MM, mm задают представление месяца арабскими цифрами. Диапазон значений этих шаблонов от 1 до 12.
    Шаблоны
    MONTH, Month, month задают полное название месяца.
    Шаблоны
    MON, Mon, mon задают сокращенное (три символа) название месяца.
    Шаблон
    MONR задает представление месяца римскими цифрами. Допустимые значения этого шаблона: I, II, III, IV, V, VI, VII, VIII, IX, X, XI, XII.
    38
    © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021

    Автоматизация архивирования БД
    Шаблоны
    Y, y задают представление цифр года арабскими цифрами. Диапазон значений этих шаблонов от 0 до 9.
    Шаблоны
    HH, hh, HH12, hh12 задают представление часа половины суток (до обеда или после обеда) арабскими цифрами. Диапазон значений этих шаблонов от 0 до 11.
    Шаблоны
    HH24, hh24 задают представление часа суток арабскими цифрами. Диапазон значений этих шаблонов от 0 до 23.
    Шаблоны
    MID, mid задают представление символов am, pm.
    Шаблоны
    MI, mi задают представление минут арабскими цифрами. Диапазон значений этих шаблонов от 0 до 59.
    По умолчанию используется следующий формат:
    "DD/MM/YYYY HH24:MI";
    Примеры форматов и представляемых ими значений
    Символьное представление
    Формат
    16.02.1998:10:35
    DD.MM.YYYY:HH:MI
    16.02.98:10:35
    dd.mm.yy:HH:MI
    16-02-98 10:35
    DD-mm-YY hh:mi
    10 час 30 мин 16/02/1998
    HH "час" MI "мин" DD/MM/YYYY
    В год 1998 месяца 02 дня 16
    "В год" YYYY "месяца" MM "дня" DD
    10.35
    hh.mi
    До конца года осталось дней: 264
    "До конца года осталось дней: " DDD
    10.VII.2001
    DD.MONR.YYYY
    15/07/1999 07pm:30
    DD/MM/YYYY hh12mid:mi
    Последняя архивация: март, 23.1998
    "Последняя архивация: " MONTH, DD.YYYY
    Раздел «Переменные»
    Раздел «Переменные» является необязательным разделом сценария. Он должен включаться в том случае, если в исходном тексте сценария предполагается использовать собственные (отличные от предопределенных в языке сценария утилиты) переменные.
    Язык сценария допускает два типа переменных – символьные и числовые. Тип переменной явно не объявляется и определяется по типу данных начального значения.
    Описание раздела
    variables:
    [<определение переменной>];
    [<определение переменной>];
    ……
    [<определение переменной>];
    <определение переменной>::=
    <имя переменной> = <начальное значение>
    © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021
    39

    Автоматизация архивирования БД
    <имя переменной>::= <идентификатор>
    <идентификатор>::= алфавитно-цифровая строка длиной не более 18
    знаков
    <начальное значение>::=
    "<символьная константа>"
    | <числовая константа>
    <числовая константа>::=[ + | - ] <целое число>
    Примечание
    Символьная константа может включать коды
    \n, \t, \\, \" для представления символа
    «возврат каретки», «табуляция», непосредственно самого символа
    \ и символа ".
    Примеры
    FILE_DIR = "c:\linterSQL\db";
    Name_File="";
    Count = 25;
    Раздел «График выполнения»
    Раздел «График выполнения» содержит описание календарных дат и моментов времени,
    при наступлении которых утилита lhb должна выполнить действия, описанные в сценарии.
    Описание раздела
    rights:
    [<ежечасная операция> [<ежечасная операция> … ]]
    [<ежедневная операция> [<ежедневная операция> … ]]
    [<еженедельная операция> [<еженедельная операция> … ]]
    [<ежемесячная операция> [<ежемесячная операция> … ]]
    [<в заданное время> [<в заданное время> … ]]
    Примечание
    Порядок описания операций может быть произвольным.
    Для всех графиков выполнения действуют следующие правила:
    1) если на одно и то же время запланировано несколько событий, то инициируется более редкое событие;
    2) если для определённого правила время работы не позволяет запустить другие правила, то они приостанавливаются (с последующим запуском в порядке поступления), а то правило, которое не успело вовремя отработать,
    игнорируется (глубина игнорирования не превышает
    1). Для этого ведется очередь отсортированных по времени выполнения операторов. Всегда выполняется первый элемент из этой очереди (при этом не важно, насколько давно прошло время его запуска – главное, чтобы момент запуска уже наступил). После выполнения оператора EVERYXXX он повторно ставится в очередь (при этом генерируется новое время запуска оператора) и т.д.
    40
    © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021

    Автоматизация архивирования БД
    Пример
    variables:
    NUM = 1;
    rights:
    everyweek (day=Tue,time='07:45')
    {
    NUM = NUM + 1;
    print ("Everyweek (200X)");
    backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME +
    TOSTR(NUM +
    2000) + ".lhb");
    exception: /* Обработка ошибок оператора 'everyweek' */
    print ("Error=" + TOSTR(CERROR) + ",LinError=" +
    TOSTR(LINERROR) +
    ",SysError=" + TOSTR(SYSERROR));
    stop;
    }
    direct (timestamp='01.12.2016 07:45')
    {
    NUM = NUM + 1;
    print ("Direct (400X)");
    backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME +
    TOSTR(NUM +
    4000) + ".lhb");
    exception: /* Обработка ошибок оператора 'direct' */
    print ("Error=" + TOSTR(CERROR) + ",LinError=" +
    TOSTR(LINERROR) +
    ",SysError=" + TOSTR(SYSERROR));
    stop;
    }
    everyday (time = '07:45')
    {
    NUM = NUM + 1;
    print ("Everyday (100X)");
    backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME +
    TOSTR(NUM +
    1000) + ".lhb");
    exception: /* Обработка ошибок оператора 'everyday' */
    print ("Error=" + TOSTR(CERROR) + ",LinError=" +
    TOSTR(LINERROR) +
    ",SysError=" + TOSTR(SYSERROR));
    stop;
    }
    everyhour (min=45)
    {
    NUM = NUM + 1;
    © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021
    41

    Автоматизация архивирования БД
    print ("Everyhour (X)");
    backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME +
    TOSTR(NUM) +
    ".lhb");
    exception: /* Обработка ошибок оператора 'everyhour' */
    print ("Error=" + TOSTR(CERROR) + ",LinError=" +
    TOSTR(LINERROR) +
    ",SysError=" + TOSTR(SYSERROR));
    stop;
    }
    everymonth (date=1, time='07:45')
    {
    NUM = NUM + 1;
    print ("Everymonth (300X)");
    backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME +
    TOSTR(NUM +
    3000) + ".lhb");
    exception: /* Обработка ошибок оператора 'everymonth' */
    print ("Error=" + TOSTR(CERROR) + ",LinError=" +
    TOSTR(LINERROR) +
    ",SysError=" + TOSTR(SYSERROR));
    stop;
    }
    special:
    before /* just after the start */
    {
    print ("Start backup system");
    }
    after /* after 'stop' or Ctrl-C */
    {
    print ("Stop backup system");
    if (CERROR != 0)
    logprint ("Error present:" + TOSTR(CERROR));
    }
    iferr /* global */
    {
    print ("Error=" + TOSTR(CERROR) + ",LinError=" + TOSTR(LINERROR)
    +
    ",SysError=" + TOSTR(SYSERROR));
    stop;
    }
    Синтаксис__::=42_©_Архивирование_и_восстановление_базы_данных._ЗАО_НПП_«РЕЛЭКС»,_1990-2021'>График выполнения ежечасных операций
    Синтаксис
    <ежечасная операция>::=
    42
    © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021

    Автоматизация архивирования БД
    everyhour (min=<минуты часа>) <действия>
    <минуты часа>::= <дата в формате MI>
    <действия>::= {<блок операторов>}
    Описание
    Указанные <действия> будут выполняться на заданной минуте каждого часа суток.
    Если к указанному моменту времени утилита выполняет <действия>, заданные каким- либо другим оператором, то выполнение наступивших <действий> будет задержано до полного окончания предыдущих <действий>. В связи с этим при разработке сценария следует так планировать ежечасные <действия>, чтобы утилита успевала выполнять требуемую работу в заданных промежутках времени.
    Отрицательное значение аргумента <минуты часа> определяет периодичность повторения заданного действия от начала часа, например,
    everyhour (min=-5)
    означает, что действие будет выполнено в .., 13:00, 13:05, 13:10, 13:15, .., 13:55, 14:00, ..
    Примечание
    Отрицательное значение аргумента <минуты часа> можно задавать только в виде литерала, а не переменной.
    Если значение <минуты часа> не является делителем 60, то промежуток между последним вызовом в предыдущем часе и в начале следующего часа будет меньше этого значения, например, если задано everyhour (min=-7), то событие вызовется в
    13:56, а затем в 14:00.
    Примечание (общее для всех операторов данного раздела)
    При разработке сценария необходимо учитывать следующий важный момент. Если на некоторую календарно-временную дату совпало несколько действий (например,
    совпали по дате и времени ежедневные и еженедельные операции), то утилита выполнит запланированные действия только одного оператора. Другой при этом будет проигнорирован, причем нельзя определенно сказать, какой именно оператор из нескольких будет выполнен. Поэтому, чтобы избежать таких коллизий, графики выполнения планируемых событий должны отличаться друг от друга хотя бы на 1 минуту.
    Пример
    everyhour(min=59)
    {
    /* Сохранение быстроменяющейся таблицы */
    backup ("s -u SYSTEM/MANAGER -f c:\arc_db -ot Заказы");
    exception:
    logprint(ctimestamp()+":\n");
    logprint("\tError=" + TOSTR(CERROR));
    logprint("\tLinError=" + TOSTR(LINERROR));
    logprint("\tSysError=" + TOSTR(SYSERROR));
    stop;
    }
    © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021
    43

    Автоматизация архивирования БД
    График выполнения ежедневных операций
    Синтаксис
    <ежедневная операция>::=
    everyday (time=<время суток>) <действия>
    <время суток>::= '< дата в формате HH24:MI>'
    <действия>::= {<блок операторов>}
    Описание
    Указанные <действия> будут выполняться каждый день в заданное время суток.
    Пример
    everyday(time='22:00')
    {
    /* нарастающее архивирование каждый день */
    backup ("s -inc -u SYSTEM/MANAGER -f " + lastfilename);
    }
    График выполнения еженедельных операций
    Синтаксис
    <еженедельная операция>::=
    everyweek (day=<день недели>, time=<время суток>)<действия>
    <день недели>::= Mon | Tue | Wed | Thu | Fri | Sat | Sun
    <время суток>::= '< дата в формате HH24:MI>'
    <действия>::= {<блок операторов>}
    Примечание
    Mon – понедельник, Tue – вторник, Wed – среда, Thu – четверг, Fri – пятница, Sat – суббота,
    Sun – воскресение.
    Описание
    Указанные <действия> будут выполняться каждую неделю в заданный день недели и время суток.
    Пример
    everyweek(day=Mon,time='08:00')
    {
    /* Создание нового архива */
    backup ("s -startinc -u SYSTEM/MANAGER -f c:\lhb\"+
    tostr(cdate()) + "-" +
    tostr(cmonth()) + "-" +
    tostr(cyear2()) + "\"");
    exception:
    logprint(ctimestamp()+":\n");
    44
    © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021

    Автоматизация архивирования БД
    logprint("\tError=" + TOSTR(CERROR));
    logprint("\tLinError=" + TOSTR(LINERROR));
    logprint("\tSysError=" + TOSTR(SYSERROR));
    stop;
    }
    График выполнения ежемесячных операций
    Синтаксис
    <ежемесячная операция>::=
    everymonth (date=<день месяца>, time=<время суток>) <действия>
    <день месяца>::= <дата в формате DD > | lastdate
    <время суток>::= '<дата в формате HH24:MI>'
    <действия>::= {<блок операторов>}
    lastdate – последний день текущего месяца
    Описание
    Указанные <действия> будут выполняться каждый месяц в заданный день месяца и время суток.
    Примечание
    Для работы конструкции everymonth (date=..., time=...) необходимо присутствие в скрипте одной из конструкций вида everyhour, everyday, everyweek.
    Примеры
    everymonth (date=4, time='03:00')
    everymonth (date=lastdate, time='23:59')
    Выполнение в заданное время
    Синтаксис
    <в заданное время>::=
    direct (timestamp=<дата>) <действия>
    <дата> – строка даты/времени в соответствии с установленным в разделе set форматом (или с форматом по умолчанию – в случае отсутствия в сценарии этого раздела)
    <действия>::= {<блок операторов>}
    Описание
    Указанные <действия> будут выполнены один раз при наступлении заданной даты.
    Раздел «Специальные действия»
    Раздел «Специальные действия» содержит описание действий, которые утилита lhb должна выполнять в определенные моменты своей работы и/или при возникновении
    © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021
    45

    Автоматизация архивирования БД
    ошибочных ситуаций. Раздел не является обязательным, но если задается, то каждый оператор в нем должен быть представлен в единственном экземпляре.
    Описание раздела
    special:
    [<действия в начале работы>]
    [<действия в конце работы>]
    [<действия при ошибочной ситуации>]
    Указанные <действия в начале работы> выполняются программой только в случае успешного запуска, т.е. при условии отсутствия синтаксических ошибок в тексте сценария или в командной строке.
    Возможны два варианта выполнения <действий в начале работы> в зависимости от используемого сценария:
    1) сценарий содержит раздел «График выполнения» с указанием циклически осуществляемых операций (ежечасных, ежедневных и т.п.). В этом случае утилита lhb должна функционировать в режиме 24 часа в сутки, 7 дней в неделю,
    т.е. теоретически «вечно», поэтому <действия в начале работы> (опять-таки теоретически) будут выполнены всего лишь один раз в жизни утилиты. Если это так, то необходимость в программировании и отладке <действий в начале работы> отпадает (один раз эти действия администратор БД может выполнить и вручную). Однако, как показывает практика, реальная жизнь утилиты весьма далека от теоретической модели. Выполнение утилиты может быть прервано по разным причинам: сбой в оборудовании, аварийное завершение утилиты по собственной инициативе из-за неустранимых ошибок (оператор
    STOP), прекращение работы по инициативе администратора БД (например, в связи с необходимостью изменения файла сценария) и др. Таким образом, в реальной жизни повторные запуски утилиты lhb являются скорее не исключением, а правилом. В этой ситуации необходимость в разработке <действий в начале работы> становится актуальной, и степень актуальности зависит от частоты перезапуска утилиты lhb.
    В <действиях в начале работы> можно выделить следующие обычно задаваемые функции:
    • подготовительные операции (например, проверка наличия достаточного дискового пространства для размещения архивного файла, создание необходимых каталогов,
    возможность монтирования лентопротяжного устройства в случае создания архива на магнитной ленте, инициирование нарастающего архивирования – создание открытого архива и т.п.);
    • проверка результатов предыдущего запуска утилиты lhb и устранение выявленных нарушений в архиве (тестирование, по крайней мере, последней копии архивного файла и повторное создание архива).
    2) сценарий содержит раздел «График выполнения», но в разделе отсутствует описание циклически выполняемых операций (ежечасных, ежедневных и т.п.). В этом случае утилита lhb будет запускаться на выполнение всегда по инициативе администратора
    БД, и в <действия в начале работы> можно включить операции, которые обычно планируются в циклических операциях, например, удаление архивных файлов с истекшим сроком хранения.
    Указанные <действия в конце работы> выполняются утилитой только в случае её
    корректного завершения – по команде + или с помощью оператора
    STOP (инициатива самой утилиты lhb). Если работа утилиты прекращена из-за
    46
    © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021

    Автоматизация архивирования БД
    отказа оборудования или операционной системы, то <действия в конце работы> не выполняются. Это свойство утилиты lhb может быть использовано, в частности, для определения способа завершения предыдущего запуска утилиты. Например, если в
    <действиях в начале работы> создать метку некоторого файла нулевой длины, а в
    <действиях в конце работы> удалить этот файл, то присутствие на диске указанного файла при запуске утилиты будет свидетельствовать о её предыдущем некорректном завершении.
    Указанные <действия при ошибочной ситуации> определяют реакцию утилиты в случаях ошибочных ситуаций на глобальном уровне. На данный уровень обработки ошибок утилита выходит, если нет ни одного нижнего уровня, где выявленная ошибка могла быть обработка. Язык сценария предоставляет два способа обработки ошибок:
    с помощью конструкции iferr, относящейся непосредственно к оператору языка
    (раздел
    «Операторы языка сценария»
    ) и конструкции exception, объявляющей секцию обработки всех ошибок блока операторов, внутри которого расположена эта секция.
    В утилите lhb предусмотрена следующая иерархия обработки ошибок:
    1) если синтаксис оператора предусматривает конструкцию iferr, и эта конструкция задана, то в случае выявления ошибки при выполнении оператора она обрабатывается так, как это предусмотрено в конструкции iferr данного оператора;
    2) если конструкция iferr не задана или не предусмотрена синтаксисом оператора,
    ошибка обрабатывается в секции exception текущего блока операторов;
    3) если текущий блок операторов не содержит секцию обработки ошибок, утилита пытается найти эту секцию на более высоком уровне вложенности блоков операторов. Если на каком-нибудь уровне вложенности секция обработки ошибок будет найдена, то ошибка обрабатывается в соответствии с правилами этой секции;
    4) если ни одной секции внутри блоков операторов не задано, ошибка будет обработана в глобальной секции (оператор iferr в разделе special);
    5) если глобальная секция обработки ошибок не определена, то ошибка будет проигнорирована. Последствия распространения этой ошибки на процесс архивирования (восстановления) БД полностью перекладываются на разработчика сценария.
    1   2   3   4   5   6   7   8


    написать администратору сайта