В процессе работы 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 <имя файла протокола>
Таблица протокола имеет следующую структуру:
Порядковый номер поля
Имя поля
Тип поля
Комментарий
uUser
long
Номер пользователя — при использовании файлового протокола. Число, постоянное и уникальное в течение сеанса — при использовании TCP/IP.
uDate
date
Дата операции.
uTime
long
Время операции в тиках с 0:00 часов. Тик = 1/55 сек = 18.2мс. Для преобразования можно использовать функцию ticktochar.
Например,ticktochar(1477283) = "22:32:49.39".
uType
int
Тип операции (по справочнику типов).
uQuery
long
Номер пакета.
uNStr
int
Подномер записи в пакете.
uBody
char(80)
Текст запроса SQL или имя низкоуровневого пакета.
Типы операций (поле uType) следующие:
Тип
Значение
Вход пользователя в систему. Поле uBody содержит дополнительную информацию в составе трех параметров. Первым параметром, заключённым в [], является шестнадцатиричный номер нити, обслуживающей пользователя. Второй параметр — уникальный ID пользователя, который будет проставляться в поле uUser для всех операций данного пользователя. Третий параметр — имя каталога временных файлов, созданного для пользователя.
Выход пользователя из системы.
Процесс убрали.
SQL запрос.
Ошибка SQL. Обычно синтаксис.
Ошибка HyTech.
Низкоуровневый служебный пакет. Наименование пакета в поле uBody.
Сообщение пользователя. Записывается в протокол непосредственно из SQL-запроса функцией msglog.
Окончание обработки запроса SQL.
Начало транзакции. Окончание отмечается пакетом 11 или 12.
Успешное окончание транзакции. Обязательно имеет предшествующий 10-ый пакет.
Откат транзакции. Обязательно имеет предшествующий 10-ый пакет.
Служебное (SYNT).
Запуск сервера.
Останов сервера.
Служебная (Debug) запись.
Завершение пользовательского процесса. Поле uBody содержит дополнительную информацию разнообразной структуры. Для значений этого поля, удовлетворяющих шаблону "[*] 15*", структура такова: в [] заключён шестнадцатиричный номер нити, а за цифрой 15 следует IP адрес и номер порта, через который подключается пользователь.
Постановка в очередь на блокирующую транзакцию. Предшествует 10-ому типу.
Рассмотрим пример анализа лог-файла.
Пусть необходимо узнать IP-адрес клиента по полю uUser. Тогда протокол содержит строки вида:
· Находим пакет с uType=1 для пользователя с заданным uUser (87631710);
· Ищем ближайшую предшествующую запись с uType=17, поле uBody которой удовлетворяет шаблону "[218] 15*". Остатком поля uBody как раз будет IP адрес и номер порта.