[firebase-br] Log de conexões - funcionando

Tecnobyte Informática temp2 em tecnobyte.com.br
Sex Out 26 11:04:46 -03 2012


Boa tarde

Em outra mensagem estou tentando resolver problemas com a geração de log de
transações.

Nesta mensagem segue o script SQL que prepara o banco de dados para gerar
log de todas conexões. Está funcionando perfeito no Firebird 2.1.3. Fica aí
como contribuição para quem precisa de algo parecido.

DICA! Para acessar o banco sem rodar os gatilhos de de eventos do banco de
dados, use o isql com parâmetro -nodbtriggers.

Exemplo:

isql.exe -nodbtriggers -user...


---- SQL ---

CREATE TABLE MON_ATTACHMENTS
(
  ID                       INTEGER NOT NULL,
  MON_ATTACHMENT_ID        INTEGER NOT NULL,
  MON_SERVER_PID           INTEGER NOT NULL,
  MON_STATE                   SMALLINT NOT NULL,
  MON_ATTACHMENT_NAME         VARCHAR(255) CHARACTER SET UNICODE_FSS NOT
NULL,
  MON_USER                   VARCHAR(31) CHARACTER SET UNICODE_FSS NOT NULL,
  MON_ROLE                   VARCHAR(31) CHARACTER SET UNICODE_FSS NOT NULL,
  MON_REMOTE_PROTOCOL         VARCHAR(10) CHARACTER SET ASCII NOT NULL,
  MON_REMOTE_ADDRESS         VARCHAR(255) CHARACTER SET ASCII NOT NULL,
  MON_REMOTE_PID             INTEGER,
  MON_CHARACTER_SET_ID     SMALLINT NOT NULL,
  MON_CONNECT_TIMESTAMP    TIMESTAMP NOT NULL,
  MON_DISCONNECT_TIMESTAMP TIMESTAMP,
  MON_GARBAGE_COLLECTION   SMALLINT NOT NULL,
  MON_REMOTE_PROCESS         VARCHAR(255) CHARACTER SET UNICODE_FSS,
  MON_STAT_ID                 INTEGER NOT NULL,
  CONSTRAINT MON_ATTACHMENTS PRIMARY KEY(ID)
);

CREATE INDEX IN_MON_ATTACHMENTS_TIMESTAMP ON
MON_ATTACHMENTS(MON_CONNECT_TIMESTAMP);

CREATE SEQUENCE SQ_MON_ATTACHMENTS_ID;

SET TERM ^ ;

CREATE OR ALTER TRIGGER TG_CONNECT ON CONNECT AS
BEGIN
  INSERT INTO MON_ATTACHMENTS(
    ID,
    MON_ATTACHMENT_ID,
    MON_SERVER_PID,
    MON_STATE,
    MON_ATTACHMENT_NAME,
    MON_USER,
    MON_ROLE,
    MON_REMOTE_PROTOCOL,
    MON_REMOTE_ADDRESS,
    MON_REMOTE_PID,
    MON_CHARACTER_SET_ID,
    MON_CONNECT_TIMESTAMP,
    MON_GARBAGE_COLLECTION,
    MON_REMOTE_PROCESS)
  SELECT
    NEXT VALUE FOR SQ_MON_ATTACHMENTS_ID,
    MON$ATTACHMENT_ID,
    MON$SERVER_PID,
    MON$STATE,
    MON$ATTACHMENT_NAME,
    MON$USER,
    MON$ROLE,
    MON$REMOTE_PROTOCOL,
    MON$REMOTE_ADDRESS,
    MON$REMOTE_PID,
    MON$CHARACTER_SET_ID,
    CURRENT_TIMESTAMP,
    MON$GARBAGE_COLLECTION,
    MON$REMOTE_PROCESS
  FROM MON$ATTACHMENTS
  WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION;
END^

CREATE OR ALTER TRIGGER TG_DISCONNECT ON DISCONNECT AS
BEGIN
  UPDATE MON_ATTACHMENTS
  SET MON_DISCONNECT_TIMESTAMP = CURRENT_TIMESTAMP
  WHERE MON_ATTACHMENT_ID = CURRENT_CONNECTION
  ORDER BY ID DESC ROWS 1;
END^

--- Fim do SQL ---

Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br 





Mais detalhes sobre a lista de discussão lista