Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > История подключений к БД


Автор: Gluttton 23.10.2009, 00:00
Доброго времени суток!

Создаю два триггера на подключение к БД и отключение от неё, задача которых заключается в добавлении записей в соответствующую таблицу о пользователе, дате, времени и действии (подлючился, отключился):
Код

SET TERM ^;
CREATE TRIGGER LG_CON
ON CONNECT
AS
BEGIN
    INSERT INTO LG(OWNER, ACT, D, T)
    VALUES
    (
        CURRENT_USER,
        'Connect',
        CAST('NOW' AS DATE),
        CAST('NOW' AS TIME)
    );
END^

CREATE TRIGGER LG_DCN
ON DISCONNECT
AS
BEGIN
    INSERT INTO LG(OWNER, ACT, D, T)
    VALUES
    (
        CURRENT_USER,
        'Disconnect',
        CAST('NOW' AS DATE),
        CAST('NOW' AS TIME)
    );
END^
SET TERM ;^


Создаю БД и подлючаюсь к ней и вот что вижу (пример):
user posted image
Подумал, что может быть причина в IBExpert, попробовал через isql - результат аналогчиный:
user posted image

Вопрос: почему при первом подключении к вновь созданой БД в таблице с историей подключений есть запись о разрыве соединения раньше чем произошло первое подключение?

Не могу сказать, что мне это доставляет неудобства... Вопрос скорее из любопытства...

Автор: Deniz 23.10.2009, 06:00
Цитата(Gluttton @  23.10.2009,  03:00 Найти цитируемый пост)
Вопрос: почему при первом подключении к вновь созданой БД в таблице с историей подключений есть запись о разрыве соединения раньше чем произошло первое подключение?
могу предположить, что процесс создания БД включает в себя:
1. Подключение
2. Выполнение скрипта по созданию объектов
3. Отключение.
Сл-но на 1 этапе триггеры не работают(еще не созданы), лог не ведется. На 3 этапе триггеры созданы и работают.
Можно попробовать сделать backup только метаданных потом восстановить и посмотреть таблицу логов.

Автор: Gluttton 23.10.2009, 07:52
Скрипт выполняется от 0,8 до 1,3 секунды, а время между разрывом соединения и подключением например на приведенных скриншотах составляет 3 и 27 секунд.

Цитата(Deniz @  23.10.2009,  06:00 Найти цитируемый пост)
Можно попробовать сделать backup только метаданных потом восстановить и посмотреть таблицу логов.

Не приходилось сталкиваться с backup'ами в Firebird, можно чуть подробнее.

 smile 
А может быть это генетическая память (память предков)? И на самом деле БД после удаления не исчезают, а их души неприкаяно скитаются по фрагментированым цепочкам кластеров на дисках до тех пор пока не реинкарнируются и вселятся во вновьсозданую БД?

Автор: Deniz 23.10.2009, 11:15
Цитата(Gluttton @  23.10.2009,  10:52 Найти цитируемый пост)
Скрипт выполняется от 0,8 до 1,3 секунды, а время между разрывом соединения и подключением например на приведенных скриншотах составляет 3 и 27 секунд.
и?
1. Создай пустую БД
2. Создай все объекты в БД
3. Отключись от БД
3. Посмотри и запиши время ОС
4. Подключись к БД и посмотри таблицу лога
Время disconnect и записанное в п.3 совпадает?

Автор: Gluttton 23.10.2009, 14:03
Цитата(Deniz @  23.10.2009,  11:15 Найти цитируемый пост)
Время disconnect и записанное в п.3 совпадает?


Так и есть, что то я запутлся немножко smile ...

Спасибо за разъяснения!

Автор: Akella 24.10.2009, 00:43
Цитата(Gluttton @  23.10.2009,  00:00 Найти цитируемый пост)
CAST('NOW' AS DATE),
        CAST('NOW' AS TIME)

а зачем использовать CAST, ведь есть же
CURRENT_DATE и CURRENT_TIME

Автор: Gluttton 24.10.2009, 10:23
Цитата(Akella @  24.10.2009,  00:43 Найти цитируемый пост)
а зачем использовать CAST, ведь есть жеCURRENT_DATE и CURRENT_TIME

Спасибо, на будущее учту...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)