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 #1 | sqlplus #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; |