Skip to content

Tag-icone-mini.png Banco de Dados, Tutorial

Referenciado por: Dicas Técnicas |

Para fazer ajustes em bases as vezes é necessário desabilitar triggers. O grande transtorno com relação à esta prática é garantir que ninguém mais esteja utilizando o sistema enquanto esta manutenção está sendo feita. Existe uma forma de tornar isso transparante para os demais usuários do sistema, e que pode ser utilizada quando a manutenção é feita na base "quente" do cliente. Temos que tomar estes cuidados na hora de aplicar comandos nos clientes e quando passarmos comandos para que terceiros apliquem.

Oracle ​

No Oracle a estratégia é abrir dois SQLPLUS e enquanto um faz lock da tabela o outro desabilita as triggers. Isto, porque quando se faz um comando alter table o Oracle faz commit. Então se o alter table for feito na mesma sessão do SQLPLUS não adianta fazer lock na tabela.

sqlplus #1sqlplus #2
LOCK TABLE <TABELA> IN EXCLUSIVE MODE;
ALTER TRIGGER <NOME DA TRIGGER> DISABLE;
UPDATE <TABELA> SET [...]
ALTER TRIGGER <NOME DA TRIGGER> ENABLE;
COMMIT;

PostgreSQL ​

No PostgreSQL a estratégia é mais simples que no Oracle. Pode-se simplesmente utilizar o BEGIN que qualquer comando realizado até o COMMIT é reversível e somente será enxergado pela própria transação.

psql
BEGIN;
select disabletriggers('<TABELA>');
UPDATE <TABELA> SET [...]
select enabletriggers('<TABELA>');
COMMIT;