Приложение 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 для расширенной информации.