[firebase-br] Log em uma tabela diferente

Firebase firebase em dominioinf.com.br
Sáb Dez 17 10:04:11 -03 2016


Bom dia Marcos,

Fiz as alterações necessárias aqui, deu bastante trabalho, mas ufa, 
consegui.

O log passou a realizar operações em tabelas externas.

No meu computador a principio ficou super rapido, mas coloquei em produção 
em alguns clientes

e ficou muito lento. Pra lançar um item por exemplo tava chegando a levar 
até 15 segundos, mesmo no

servidor.

Sera que tem que ajustar alguma coisa ainda? Ou tem algum outro meio de não 
demorar tanto?

Grato



-----Mensagem Original----- 
From: Marcos Weimer
Sent: Wednesday, December 14, 2016 2:14 PM
To: FireBase
Subject: Re: [firebase-br] Log em uma tabela diferente

Oque fazemos aqui é utilizar o mesmo caminho do banco apenas mudando o
nome, desta forma obtenho de maneira dinâmica o caminho desta forma:

  caminhobancoxml = (select first 1 mon$attachment_name from
mon$attachments where mon$attachment_id = current_connection);
  caminhobancoxml = replace(upper(caminhobancoxml), '.FDB', '_XML.FDB');

e mudo o onexternal para:  on external caminhobancoxml

outra possibilidade é utilizar variáveis de contexto. (procure por
RDB$SET_CONTEXT e RDB$GET_CONTEXT)

existe ainda outra possibilidade que é salvar em uma tabela de parâmetros o
caminho do banco de log.




-=Ma®©oS=-
Marcos R. Weimer
Delphi / C# / ASP.NET / PHP / WebServices / Firebird


Em 14 de dezembro de 2016 14:03, Firebase <firebase em dominioinf.com.br>
escreveu:

> Bom dia Marcos,
> Segui a extrutura do seu codigo, e deu certo!
>
> Porém estou com uma duvida, para passar o caminho do banco de dados é que
> esta me complicando.
>
> Pelo seu exemplo ele conecta sempre na maquina local, porem vai ter
> clientes que vão estar na rede,
> então para cada cliente seria uma conexão diferente.
>
> Exemplo: Em um cliente poderá ser 192.168.1.10:c:\sistema\Log.fdb
>                em outro cliente poderia estar 192.168.0.50:
> c:\sistema\Log.fdb
>
> Tentei passar por parametro, mas dai eu teria que gerar cliente a cliente
> o que daria muito trabalho.
>
> Você conhece alguma forma de recuperar atraves de um select a conexao do
> banco de dados primario para
> passar como parametro para o banco de dados de log?
>
> Grato
>
> -----Mensagem Original----- From: Marcos Weimer
> Sent: Wednesday, December 14, 2016 1:31 PM
>
> To: FireBase
> Subject: Re: [firebase-br] Log em uma tabela diferente
>
> Veja como é feito aqui (estou passando a DDL completa da procedure, assim
> fica mais facil de entender os parametros de entrada)
>
> SET TERM ^ ;
>
> create or alter procedure LOG_GRAVAR_COLUNA (
>    OPERACAO_ID integer,
>    NOME_COLUNA varchar(31),
>    OLD_VALUE varchar(5000),
>    NEW_VALUE varchar(5000))
> as
> begin
>      execute statement (
>      'INSERT INTO log_campos (ID, OPERACAO_ID, COLUNA, VALOR_ANTERIOR,
> VALOR_NOVO)
>      VALUES (GEN_ID(GEN_LOG_CAMPOS, 1), ?, ?, ?, ?);')
>      (:OPERACAO_ID, :NOME_COLUNA, :OLD_VALUE, :NEW_VALUE)
>   WITH AUTONOMOUS TRANSACTION
>   AS USER 'SYSDBA'
>   PASSWORD 'masterkey'
>   ROLE 3
>  on external '127.0.0.1:c:\caminho\banco_log.fdb'; --configurar aqui o
> caminho do banco
> end^
>
> SET TERM ; ^
>
>
>
> -=Ma®©oS=-
> Marcos R. Weimer
> Delphi / C# / ASP.NET / PHP / WebServices / Firebird
>
>
> Em 14 de dezembro de 2016 11:57, Firebase <firebase em dominioinf.com.br>
> escreveu:
>
> Bom dia Marcos, Obrigado pela resposta.
>>
>> Tentei fazer dessa forma:
>>
>> CREATE OR ALTER PROCEDURE P_INSERTINTOIBLM$COLUMNLOGTESTE (
>>  OPERATIONLOG_ID NUMERIC(18, 0),
>>  COLUMN_NAME VARCHAR(31),
>>  OLD_VALUE VARCHAR(255),
>>  NEW_VALUE VARCHAR(255),
>>  OLD_VALUE_BLOB BLOB SUB_TYPE 0 SEGMENT SIZE 80,
>>  NEW_VALUE_BLOB BLOB SUB_TYPE 0 SEGMENT SIZE 80
>> )
>> AS
>> BEGIN
>>   EXECUTE STATEMENT
>>   'INSERT INTO IBLM$COLUMNLOG (ID, OPERATIONLOG_ID, COLUMN_NAME,
>> OLD_VALUE, NEW_VALUE, OLD_VALUE_BLOB, NEW_VALUE_BLOB)
>>    VALUES (GEN_ID(GEN_IBLM$COLUMNLOG_ID, 1), :OPERATIONLOG_ID,
>> :COLUMN_NAME, :OLD_VALUE, :NEW_VALUE, :OLD_VALUE_BLOB, :NEW_VALUE_BLOB)'
>>    ON EXTERNAL 'C:\SISTEMAS\Log.fdb'
>>   AS USER 'SYSDBA'
>>   PASSWORD 'masterkey'
>>   INTO :OPERATIONLOG_ID, :COLUMN_NAME, :OLD_VALUE,
>> :NEW_VALUE,:OLD_VALUE_BLOB,:NEW_VALUE_BLOB;
>> END
>> ;
>>
>> Porem gera o erro:
>> Firebird error.unknown ISC error 335544926.
>> At procedure 'P_INSERTINTOIBLM$COLUMNLOGTESTE' line: 11, col: 4.
>>
>> O que posso estar fazendo de errado?
>>
>> Grato
>>
>> -----Mensagem Original----- From: Marcos Weimer
>> Sent: Wednesday, December 14, 2016 10:26 AM
>> To: FireBase
>> Subject: Re: [firebase-br] Log em uma tabela diferente
>>
>>
>> Aqui salvamos em banco separado (acho que foi isso que vc quer dizer).
>>
>> Veja o execute statement on external
>>
>> http://firebirdsql.org/refdocs/langrefupd25-psql-execstat.html
>>
>>
>>
>> -=Ma®©oS=-
>> Marcos R. Weimer
>> Delphi / C# / ASP.NET / PHP / WebServices / Firebird
>>
>>
>> Em 14 de dezembro de 2016 10:20, Firebase <firebase em dominioinf.com.br>
>> escreveu:
>>
>> Bom dia a todos,
>>
>>>
>>> Hoje tenho uma rotina no banco de dados utilizando triggers para fazer
>>> auditoria de tudo que é inserido, editado ou excluido nas tabelas
>>> no banco de dados.
>>>
>>> O problema é que o banco de dados está ficando gigante devido ao acumulo
>>> desses registros.
>>>
>>> Gostaria de saber se haveria possibilidade de esses logs serem gravados
>>> em
>>> uma tabela separada do banco de dados?
>>>
>>> Exemplo: o banco de dados principal em C:\Sistema\Dados.fdb
>>>                o banco de dados da auditoria em C:\Sistema\Log.fdb
>>>
>>> Grato
>>>
>>>
>>>
>>> ---
>>> Este email foi escaneado pelo Avast antivírus.
>>> https://www.avast.com/antivirus
>>>
>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://www.firebase.com.br/pes
>>> quisa_lista.html
>>>
>>> ______________________________________________
>>>
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://www.firebase.com.br/pes
>> quisa_lista.html
>>
>> ---
>> Este email foi escaneado pelo Avast antivírus.
>> https://www.avast.com/antivirus
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://www.firebase.com.br/pes
>> quisa_lista.html
>>
>> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://www.firebase.com.br/pes
> quisa_lista.html
>
> ---
> Este email foi escaneado pelo Avast antivírus.
> https://www.avast.com/antivirus
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://www.firebase.com.br/pes
> quisa_lista.html
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: 
http://www.firebase.com.br/pesquisa_lista.html 


---
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus





Mais detalhes sobre a lista de discussão lista