Приложение 3. Описание файла LINTER.LOG

В приложении рассматриваются примеры информации, которая заносится в файл протоколирования обработки SQL-запросов пользователя (файл LINTER.LOG), и приводится расшифровка данной информации.

Файл LINTER.LOG является перезаписываемым, т.е. при запуске ядра (с параметром, разрешающим ведение протокола) все сообщения о предыдущем сеансе работы СУБД будут удалены из файла.

Пример 1. Пример файла LINTER.LOG в режиме краткого протоколирования.

?DESC:L=92:
!:E=0:C=0:
?OPEN:U="SYSTE< ":P=16384:R=0:
!:E=1025 @&#:C=0:
?OPEN:U=H:P=16384:R=0:
!:E=1025 @&#:C=0:
?OPEN:U="SYSTEM":P=16384:R=0:
!:E=0:C=3:
?DESC:L=92:
!:E=0:C=3:
?DESC:L=92:
!:E=0:C=3:
?OCUR:C=3:P=16384:R=0:
!:E=0:C=4:
?SLCT:C=4:L=65535:P=0:
select * from "SYSTEM"."$$$AUDIT";;
!:E=0:C=4:A=1:
?GETA:C=4:L=0:
!:E=0:C=4:
?KILL:C=3:U=H:I=4:
!:E=0:C=3:
?CLOS:C=4:
!:E=1069 @&#:C=4:
OCUR:C=3:P=16384:R=0:
!:E=0:C=4:
?:C=4:L=65535:P=0:
execute "SYSTEM"."SAMPLE"(FALSE,FALSE,1);
#?OCUR:C=4:P=34:R=0:
#!:E=0:C=5:
#?:C=5:L=0:P=0:
drop table results;
#!:E=0:C=5:
#?:C=5:L=0:P=0:
create table results(lin char(100));
#!:E=0:C=5:

Пример 2. Пример файла LINTER.LOG в режиме полного протоколирования.

?SLCT:T=10:26:25.370:XPid=1732:XTid=1632:C=5:L=65535:P=0:
select * from auto;;;
!:E=0:T=10:26:25.450:XPid=1732:XTid=1632:C=5:A=1000:
?GETA:T=10:26:25.450:XPid=1732:XTid=1632:C=5:L=0:
!:E=0:T=10:26:25.450:XPid=1732:XTid=1632:C=5:
?GETA:T=10:26:25.450:XPid=1732:XTid=1632:C=5:L=3914:
!:E=0:T=10:26:25.460:XPid=1732:XTid=1632:C=5:
?OCUR:T=10:26:25.460:XPid=1732:XTid=1632:C=3:P=16384:R=0:
!:E=0:T=10:26:25.460:XPid=1732:XTid=1632:C=6:
?GETS:T=10:26:25.480:XPid=1732:XTid=1632:C=5:I=1:L=113:
!:E=0:T=10:26:25.480:XPid=1732:XTid=1632:C=5:
?GETS:T=10:26:25.480:XPid=1732:XTid=1632:C=5:I=1:L=113:
!:E=0:T=10:26:25.480:XPid=1732:XTid=1632:C=5:
    

Знак ?, расположенный в начале строки, показывает, что информация относится к обработке запроса. Затем идёт команда из блока CBL (например, OCUR, SLCT, DESC и т.п.). Если ведется полное протоколирование работы, то будет показана также дополнительная информация: время выполнения запроса, сетевой адрес, идентификаторы процесса и нити, пославшие запрос. Далее идут параметры команд из блока CBL, которые описаны ниже. Затем (на следующей строке) расположены данные, которые необходимы ядру для выполнения команды (если они требуются): текст запроса, данные для загрузки в BLOB и т.д.

Знак !, расположенный в начале строки, указывает на то, что это информация об ответе ядра на запрос пользователя. Она включает в себя код возврата (:E=«код возврата») и признак ошибки (символы @&#, а затем параметры блока CBL), если была ошибка. Например, строка, сообщающая об ошибке при выполнении запроса, может выглядеть так !:E=1025 @&#:C=0: (см. пример 1).

Знак # в начале строки (перед ? или !) – признак того, что запрос подан из триггера или хранимой процедуры.

Параметры блока CBL:

  • C – номер канала;

  • L – длина буфера ответа (поле LnBufRow);

  • P – режим обработки команды внутреннего интерфейса;

  • R – приоритет канала;

  • U – имя пользователя/пароль;

  • I – внутренний системный номер записи, которая была обработана последней (RowId);

  • К – значение параметра, необходимого при обработке запроса. Например, номер BLOB-поля;

  • S – размер запроса или обработанных данных;

  • O – код ошибки, переданный СУБД операционной/сетевой средой при обработке запроса (SysErr);

  • A – количество реально обработанных записей (RowCount).

Примечание

Подробно блок управления запросом CBL, описание его полей и параметров приводится в документе «СУБД ЛИНТЕР. Интерфейс нижнего уровня».

TRID – начало новой транзакции.

E – код завершения операции.

Обозначения для переменных канала:

  • T – Tr_Time;

  • ID – ChTransactionID;

  • M – Tr_mode;

  • S – Tr_Status.

Также используется дополнительное поле EX для расширенной информации.