Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Настройка стартового файла

После запуска сервера независимо от используемого режима исполняется SQL-скрипт (стартовый файл) по умолчанию. В процессе запуска сервер создает или открывает системные таблицы, а затем читает файл startup.sql и начинает его выполнять. После выполнения стартового файла сервер запускает задачу, обслуживающую входную очередь, и начинает принимать запросы пользователей.

Стартовый файл располагается в том же каталоге, откуда запускается сервер, и имеет фиксированное имя startup.sql.

Стартовый файл создается с помощью обычного текстового редактора и представляет собой последовательность SQL операторов.

Большие участки SQL операторов можно разделять символом \ в первой позиции. При нахождении такого символа сервер приостанавливает чтение стартового файла, выполняет уже считанные SQL операторы, после чего продолжает читать и выполнять стартовый файл.

Пример:

/* Пример стартового файла */

console("Стартовали!!!");

\

/* Загружаем первый кодификатор */

console("Код загрузки: "+ coderload("TABLE1", 1, 2));

\

/* Загружаем второй кодификатор */

console("Код загрузки: "+ coderload("TABLE2", 1, 2));

\

console("Конец стартового файла");

/* Конец файла */

Мониторинг действий сервера с использованием лог-файла

В процессе работы HyTech SQL сервера можно собрать протокол работы пользователей. Для этого достаточно в файле инициализации сервера установить соответствующий параметр.

[Параметры] ServerLogMode=1

В протокол помещается следующая информация:

  • Входы и выходы пользователей;

  • Тексты SQL-запросов;

  • Дата и время начала выполнения операции;

  • Количество найденных записей;

  • Код ошибки.

Протокол пишется во время работы сервера и в это время недоступен для просмотра. Протокол представляет собой файл специального формата с именем по умолчанию _00001.ulg. Этот файл располагается в каталоге, из которого запущен SQL-сервер.

Для анализа содержимого протокола необходимо остановить сервер. После остановки сервера файл протокола необходимо конвертировать в таблицу HyTech. Для этого используется программа htlog64. Формат вызова программы htlog64 следующий:

HTLOG64 [Ключи] <Вх_файл>

Допустимые ключи:

Ключ

Значение

-t

Проверка файла протокола.

-l[l]

Выгрузка файла протокола (сразу в постоянную часть).

-i

Проиндексировать по выгрузке.

-4

Четырехбайтовая длина дополнительной информации. Обычно определяется автоматически по номеру версии протокола.

-v

Вывод протокола работы программы на экран.

-n<tab>

Имя выходной таблицы. По умолчанию создается таблица с именем SYSLOG.

-xNNN

Предельное число выгружаемых записей. По умолчанию выгружается 1000000 записей.

-bNNN

Размер буфера.

-s

Без заголовка.

-oNNN

Смещение, с которого требуется анализировать протокол (dec или hex(0x..)).

Типовая строка для запуска программы htlog64 и командной строки:

htlog64 -l <имя файла протокола>

Таблица протокола имеет следующую структуру:

Порядковый номер поля

Имя поля

Тип поля

Комментарий

1

uUser

long

Номер пользователя — при использовании файлового протокола. Число, постоянное и уникальное в течение сеанса — при использовании TCP/IP.

2

uDate

date

Дата операции.

3

uTime

long

Время операции в тиках с 0:00 часов. Тик = 1/55 сек = 18.2мс. Для преобразования можно использовать функцию ticktochar.

Например,ticktochar(1477283) = "22:32:49.39".

4

uType

int

Тип операции (по справочнику типов).

5

uQuery

long

Номер пакета.

6

uNStr

int

Подномер записи в пакете.

7

uBody

char(80)

Текст запроса SQL или имя низкоуровневого пакета.

Типы операций (поле uType) следующие:

Тип

Значение

1

Вход пользователя в систему. Поле uBody содержит дополнительную информацию в составе трех параметров. Первым параметром, заключённым в [], является шестнадцатиричный номер нити, обслуживающей пользователя. Второй параметр — уникальный ID пользователя, который будет проставляться в поле uUser для всех операций данного пользователя. Третий параметр — имя каталога временных файлов, созданного для пользователя.

2

Выход пользователя из системы.

3

Процесс убрали.

4

SQL запрос.

5

Ошибка SQL. Обычно синтаксис.

6

Ошибка HyTech.

7

Низкоуровневый служебный пакет. Наименование пакета в поле uBody.

8

Сообщение пользователя. Записывается в протокол непосредственно из SQL-запроса функцией msglog.

9

Окончание обработки запроса SQL.

10

Начало транзакции. Окончание отмечается пакетом 11 или 12.

11

Успешное окончание транзакции. Обязательно имеет предшествующий 10-ый пакет.

12

Откат транзакции. Обязательно имеет предшествующий 10-ый пакет.

13

Служебное (SYNT).

14

Запуск сервера.

15

Останов сервера.

16

Служебная (Debug) запись.

17

Завершение пользовательского процесса. Поле uBody содержит дополнительную информацию разнообразной структуры. Для значений этого поля, удовлетворяющих шаблону "[*] 15*", структура такова: в [] заключён шестнадцатиричный номер нити, а за цифрой 15 следует IP адрес и номер порта, через который подключается пользователь.

18

Постановка в очередь на блокирующую транзакцию. Предшествует 10-ому типу.

Рассмотрим пример анализа лог-файла.

Пусть необходимо узнать IP-адрес клиента по полю uUser. Тогда протокол содержит строки вида:

uUser    ... uType ... uBody

0        ... 17    ... [218] 15 (10.68.6.12:4705)

87631710 ... 1     ... [218],87631710,'g:\nist\tmp\00010001\' . . .

Для решения данной задачи:

  • Находим пакет с uType=1 для пользователя с заданным uUser (87631710);

  • Ищем ближайшую предшествующую запись с uType=17, поле uBody которой удовлетворяет шаблону "[218] 15*". Остатком поля uBody как раз будет IP адрес и номер порта.