бд. Системауправлениябазами
Скачать 0.74 Mb.
|
Действия в начале работы Синтаксис <действия в начале работы>::= before <действия> <действия>::= { <блок операторов> } Описание Указанные <действия> выполняются в момент запуска утилиты lhb при условии отсутствия синтаксических ошибок в тексте сценария или в командной строке. Действия в конце работы Синтаксис <действия в конце работы>::= after <действия> <действия>::= { <блок операторов> } © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 47 Автоматизация архивирования БД Описание Указанные <действия> выполняются при корректном завершении работы утилиты lhb (в том числе и при завершении по инициативе пользователя по команде Действия при ошибочной ситуации Синтаксис <действия при ошибочной ситуации>::= iferr <действия> <действия>::= { <блок операторов> } Описание Указанные <действия> выполняются в случае выявления ошибки, не обработанной в блоках операторов сценария. 48 © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 Операторы языка сценария Оператор выражения Оператор выражения задает выражение строкового или числового типа. В таблице 1 представлены операции, допустимые для строковых операндов. Таблица 1. Операции строковых операндов выражения Операция Название операции Тип результата Примечание + Конкатенация Символьный = Присваивание Символьный == Сравнение на равенство Числовой 0 – операнды не равны 1 – операнды равны != Сравнение на неравенство Числовой 0 – операнды равны 1 – операнды не равны В таблице 2 указаны допустимые операции для числовых операндов. Таблица 2. Операции числовых операндов выражения Операция Название операции Примечание + Сложение - Вычитание Бинарная операция - Изменение знака Унарная операция = Присваивание == Сравнение на равенство 0 – условие не выполнено 1 – выполнено != Сравнение на неравенство 0 – условие не выполнено 1 – выполнено > Сравнение на больше 0 – условие не выполнено 1 – выполнено < Сравнение на меньше 0 – условие не выполнено 1 – выполнено >= Сравнение на больше или равно 0 – условие не выполнено 1 – выполнено <= Сравнение на меньше или равно 0 – условие не выполнено 1 – выполнено AND Логическое И 0 – условие не выполнено 1 – выполнено OR Логическое ИЛИ 0 – условие не выполнено 1 – выполнено NOT Логическое отрицание 0 – условие не выполнено 1 – выполнено © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 49 Операторы языка сценария Комментарий Комментарий может начинаться в любой позиции строки между синтаксическими элементами языка и должен располагаться в одной строке исходного текста сценария. Признаком начала и конца комментария является сочетание символов /* и */ соответственно. Оператор цикла Синтаксис while (<условие цикла>) { <блок операторов> } <условие цикла>::= выражение, результат вычисления которого имеет числовой тип. Примечание Если <блок операторов> состоит из одного оператора, скобки {,} можно не указывать. Описание В качестве <условия цикла> может использоваться любое выражение, результатом вычисления которого является значение числового типа. <блок операторов> выполняется циклически до тех пор, пока значение <условия цикла> не равно нулю. Пример while(I) { I=I-1; /* нарастающее архивирование */ backup ("s -inc -u" + myname + "/" + mypass + " -f " + "\"" + lastfilename + "\""); if(CERROR==0) logprint(ctimestamp() + ":" + ">>" + lastfilename); } Оператор условия Синтаксис if (<условие выбора>) { <блок операторов 1> } [ else { <блок операторов 2> } ] <условие выбора>::= выражение, результат вычисления которого имеет числовой тип 50 © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 Операторы языка сценария Описание Если значение <условия выбора> не равно нулю, выполняется <блок операторов 1>, в противном случае (если задана конструкция else) – <блок операторов 2>. Примеры 1) if (name == "") /* если пользователь не указал имя и пароль */ { MYNAME = GETSTR("Введите имя:"); MYPASS = GETPASS("Введите пароль:"); } else { MYNAME = NAME; MYPASS = PASSWORD; } 2) if (not exist (FILES_DIR)) crdir (FILES_DIR); /* создать директорий для архива */ Оператор запуска утилиты lhb Синтаксис backup (<командная строка>); [iferr{ <обработка ошибки> } { <блок операторов 2> } ] <командная строка>::= <символьное выражение> Описание Оператор выполняет запуск утилиты lhb с командами и ключами, заданными в <командной строке>. Конструкция iferr будет выполнена в случае возникновения ошибки. Если она не задана, то ошибка, выявленная при выполнении оператора, будет обработана в соответствии с иерархией обработки ошибок (см. подпункт «Действия при ошибочной ситуации» ). Пример backup ("s -startinc -u " + myname + "/" + mypass + " -f " + "\"" + FILES_DIR + "\\" + tostr(cdate()) + "-" + tostr(cmonth()) + "-" + tostr(cyear2()) + "\""); © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 51 Операторы языка сценария Оператор копирования файла Синтаксис copy (<спецификация копируемого файла> , <спецификация копии>); [ iferr{ < блок операторов > }] <спецификация копируемого файла>::= <символьное выражение> <спецификация копии>::= <символьное выражение> Описание Оператор выполняет копирование заданного файла. <спецификация копии> задает новое местоположение и имя файла. Имя файла в обеих спецификациях должно быть определено явно, использование знака «*» не допускается. Исходный файл остается без изменений. Пример copy("25-12-98.lhb","c:\arc_db\25-12-98.lhb"); Оператор перемещения файла Синтаксис move (<спецификация перемещаемого файла>,<спецификация перемещения>); [iferr { <блок операторов> } ] <спецификация перемещаемого файла>::= <символьное выражение> <спецификация перемещения>::= <символьное выражение> Описание Оператор выполняет перемещение заданного файла. <спецификация перемещения> определяет новое местоположение и имя файла. Имя файла в обеих спецификациях должно быть задано явно, использование знака «*» не допускается. Пример move("25-12-98.lhb","../old/25-12-98.lhb"); Оператор переименования файла Синтаксис rename (<спецификация переименуемого файла>,<спецификация перенаименования>); [iferr { <блок операторов> } ] <спецификация переименуемого файла>::= <символьное выражение> <спецификация перенаименования>::= <символьное выражение> Описание Оператор выполняет переименование заданного файла. <спецификация перенаименования> вводит новое имя и тип файла. Местоположение исходного файла не изменяется. 52 © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 Операторы языка сценария Пример rename("c:\arc_db\25-12-98.lhb","25-12-98.arc"); Оператор удаления файла Синтаксис delete (<спецификация файла>); [ iferr { <блок операторов> } ] <спецификация файла>::= <символьное выражение> Описание Оператор выполняет удаление указанного файла. Имя файла в <спецификации файла> должно быть задано явно, использование знака «*» не допускается. Пример delete("../old/__24-12-98.lhb"); Оператор создания каталога Синтаксис crdir (<спецификация каталога>); [ iferr { <блок операторов> } ] <спецификация каталога>::= <символьное выражение> Описание Оператор выполняет создание указанного каталога. Оператор синхронного запуска программы Синтаксис run (<спецификация программы>); [ iferr { <блок операторов> } ] <спецификация программы>::= <символьное выражение> Описание Оператор запускает на выполнение указанную программу, и утилита lhb переходит в ожидание завершения работы этой программы. <Спецификация программы> должна однозначно определять имя программы и её местонахождение. Если указано только имя программы, она будет искаться в соответствии с правилами ОС. Результат выполнения программы возвращается в предопределенной переменной CERROR. Если результат выполнения программы отличен от 0, то происходит генерация exception или выполнение секции iferr оператора. Оператор асинхронного запуска программы Синтаксис exec (<спецификация программы>); © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 53 Операторы языка сценария [ iferr { <блок операторов> } ] <спецификация программы>::= <символьное выражение> Описание Оператор запускает на выполнение указанную программу, и утилита lhb продолжает свою работу. <Спецификация программы> должна однозначно определять имя программы и её местонахождение. Если путь к программе не прописан, она будет искаться в текущем каталоге. Результат выполнения программы не контролируется. Оператор окончания программы Синтаксис stop Описание Оператор прекращает выполнение утилиты lhb. Оператор прерывания обработки Синтаксис break Описание Оператор прекращает работу текущего оператора if или выполняет преждевременный выход из цикла while. Оператор продолжения обработки Синтаксис continue Описание Оператор вызывает выполнение следующей итерации охватывающего цикла ( while, if). Оператор объявления секции обработки ошибок Синтаксис exception: Описание Оператор объявляет начало секции обработки ошибок текущего уровня вложенности. Оператор перехода на обработку ошибки Синтаксис error 54 © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 Операторы языка сценария Описание Оператор выполняет переход в секцию exception или в блок операторов iferr, соответствующий текущему оператору. © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 55 Предопределенные переменные и константы В языке сценария реализованы следующие предопределенные переменные (т.е. такие переменные, использовать которые можно без их объявления и инициализации): Имя переменной Значение переменной LASTFILENAME Спецификация пути и имени (без расширения) последнего сохраненного архивного файла LASTDATE Дата последнего сохранения CERROR Код завершения утилиты lhb или программы, выполненной по оператору run. Этот код будет проверяться для вызова iferr (приложение может присваивать её собственное значение) LINERROR Код завершения, возвращенный СУБД ЛИНТЕР SYSERROR Код завершения, возвращенный операционной системой NAME Имя пользователя из командной строки PASSWORD Пароль пользователя из командной строки FILENAME Имя файла из командной строки DATEFORMAT Выходной формат данных типа «дата/время». Элементы формата аналогичны элементам формата в операторе set: tsformat 56 © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 Предопределенные функции Текущее время Синтаксис CTIMESTAMP() Тип возвращаемого значения: символьный. Описание Функция возвращает текущую календарную дату в формате предопределенной переменной DATEFORMAT. Для установки формата, отличного от используемого по умолчанию, необходимо присвоить переменной DATEFORMAT соответствующее значение, например: DATEFORMAT="YYMMDD-HH24MI"; Номер года Синтаксис CYEAR2() Тип возвращаемого значения: числовой. Описание Функция возвращает две последние цифры текущего года. Полный номер года Синтаксис CYEAR4() Тип возвращаемого значения: числовой. Описание Функция возвращает полный номер текущего года. Номер месяца Синтаксис CMONTH () Тип возвращаемого значения: числовой. Описание Функция возвращает номер текущего месяца (число в диапазоне от 1 до 12). © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 57 Предопределенные функции Номер дня недели Синтаксис CDAY() Тип возвращаемого значения: числовой. Описание Функция возвращает номер текущего дня недели (число в диапазоне от 1 до 7, нумерация начинается с понедельника). Название дня недели Синтаксис CWEEKDAY () Тип возвращаемого значения: символьный. Описание Функция возвращает первые три символа названия текущего дня недели. Названия выдаются в англоязычном виде, например: Mon, Tue, … Номер дня месяца Синтаксис CDATE() Тип возвращаемого значения: числовой. Описание Функция возвращает номер текущего дня месяца (число в диапазоне от 1 до 31). Номер текущего часа Синтаксис CHOUR () Тип возвращаемого значения: числовой. Описание Функция возвращает номер текущего часа (число в диапазоне от 0 до 23). Номер текущей минуты Синтаксис CMIN () Тип возвращаемого значения: числовой. 58 © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 Предопределенные функции Описание Функция возвращает номер минуты текущего часа (число в диапазоне от 0 до 59). Информация о файле Синтаксис EXIST(<спецификация файла>) <спецификация файла>::= <символьное выражение> Тип возвращаемого значения: числовой. Описание Функция возвращает информацию о существовании указанного файла: 0 – файл не существует, 1 – файл существует. Выдача сообщения на консоль Синтаксис PRINT (<сообщение >) <сообщение>::= <символьное выражение> Тип возвращаемого значения: числовой. Описание Функция посылает на консоль (устройство, с которого запущена утилита lhb) текст указанного сообщения. Всегда возвращается значение 1. Запись сообщения в файл протокола Синтаксис LOGPRINT(<сообщение >) <сообщение>::= <символьное выражение> Тип возвращаемого значения: числовой. Описание Функция помещает в файл протокола утилиты указанное сообщение. Если файл протокола не ведется, функция игнорируется. В любом случае возвращается значение 1. Преобразование числа в строку Синтаксис TOSTR(<числовое выражение>) Тип возвращаемого значения: символьный. Описание Функция преобразует числовое выражение в символьное представление. © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 59 Предопределенные функции Ввод строки с консоли Синтаксис GETSTR(<символьная переменная>) Тип возвращаемого значения: символьный. Описание Функция осуществляет ввод с консоли символьного текста. Перед вводом данных на консоль выдается подсказка, текст которой содержится в параметре <символьная переменная> вызова функции. Максимальная длина вводимого текста равна 200 символам, признаком конца ввода является переход на новую строку. Пример GETSTR("lhb>Имя файла архива: ") Ввод пароля Синтаксис GETPASS (<символьная переменная>) Тип возвращаемого значения: символьный. Описание Функция осуществляет ввод с консоли символьного текста, представляющего пароль. Вводимые символы визуально отображаются в виде «****». Перед вводом данных на консоль выдается подсказка, текст которой содержится в параметре <символьная переменная> вызова функции. Максимальная длина вводимого текста равна 200 символам, признаком конца ввода является переход на новую строку. Пример GETPASS("lhb>Пароль ?: ") Значение переменной окружения Синтаксис GETENV (<имя переменной>) <имя переменной>::= <символьное выражение> Тип возвращаемого значения: символьный. Описание Функция возвращает значение заданной переменной окружения, если она существует, и пустую строку – в противном случае. Пример GETENV ("SY00") Пример сценария архивирования // 60 © Архивирование и восстановление базы данных. ЗАО НПП «РЕЛЭКС», 1990-2021 Предопределенные функции // Пример сценария архивации // ------------------------- variables: NUM = 1; rights: everyday (time = '12:00') { if (CWEEKDAY() =="Sun") /* Новый архив создавать в воскресенье */ { move (FILENAME + TOSTR(NUM) + ".lhb" , "c:\arc"); NUM = NUM + 1; backup ("s -u " + NAME + "/" + PASSWORD + " -f "+ FILENAME + TOSTR(NUM) + ".lhb -startinc"); } else { /* В остальные дни ведется нарастающее архивирование */ backup ("s -u " + NAME + "/" + PASSWORD + " -f " + FILENAME + TOSTR(NUM) + ".lhb -inc"); } /* end of 'if' */ exception: /* Обработка ошибок оператора 'everyday' */ print ("Error=" + TOSTR(CERROR) + ",LinError=" + TOSTR(LINERROR) + ",SysError=" + TOSTR(SYSERROR)); stop; } special: before /* just after the start */ { print ("Start backup system"); backup ("s -u " + NAME + "/" + PASSWORD + " -f " + FILENAME + TOSTR(NUM) + ".lhb -startinc"); } after /* after 'stop' or Ctrl-C */ { print ("Stop backup system"); if (ERROR != 0) logprint ("Error present:" + TOSTR(CERROR)); } iferr /* global */ { print ("Error=" + TOSTR(CERROR) + ",LinError=" + TOSTR(LINERROR) + ",SysError=" + TOSTR(SYSERROR)); stop; } |