Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

sr.silva

Trigger travando sistema

Recommended Posts

Galera,

 

Fiz uma trigger e dentro dela faço a chamada de stored procedure. O pessoal ta falando que o sistema trava...durante todo o dia.

 

Penso que a stored procedure possa atrapalhar o desempenho.

 

Criei essa trigger para migração de dados de um sistema a outro. Ou seja, numa tabela do sistema X faço a chamada da trigger passando os dados para

o sistema Y.

 

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[iMOVEL_FISICO]
ON [dbo].[Fisico]
FOR INSERT 
AS

-- declaração de variaveis

-- armazem os valores inseridos em variáveis
SELECT   @variavel = campo   FROM Inserted

-- atribui valor a variavel X
SELECT @variavelX = campo FROM tabela WHERE condicao1 = @variavel1 

--Verifica se o registro já existe no banco, caso não exista inclua.
if not exists (  select id from tabela where id = @variavelID)
begin

INSERT INTO   TABELA ( CAMPOS )
SELECT TOP 1 CAMPOS1, CAMPOS2, CAMPOS3   FROM Fisico ORDER BY idoper DESC 

  exec procedure @variavel1, 'parametro1' , 'parametro2', 'parametro3'
  exec procedure @variavel1, 'parametro1' , 'parametro2', 'parametro3'
  exec procedure @variavel1, 'parametro1' , 'parametro2', 'parametro3'
  .
  .
  .
  .
  executo a procedure variaveis vezes.

end 	
ELSE
BEGIN

  UPDATE table SET @variaveis...

  exec procedure @variavel1, 'parametro1' , 'parametro2', 'parametro3'
  exec procedure @variavel1, 'parametro1' , 'parametro2', 'parametro3'
  exec procedure @variavel1, 'parametro1' , 'parametro2', 'parametro3'
  .
  .
  .
  .
  executo a procedure variaveis vezes.

END

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema pode ser essas N vezes que o processo se repete dentro da trigger.

se não tiver como melhorar, talvez se possivel, coloque o processo para rodar de tempos em tempos ao invés de ser no ato. Assim para o usuario final ficará transparente pq ele não vai precisar esperar terminar de gravar no outro banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Fábio!

 

O problema e que essa integração já existe. Com esse tempo!

Hoje esperamos 10min para que as informações fiquem nos dois sistemas.

 

No entanto é extremamente necessário ter essas informações 'na hora'.

 

Talvez se tiver um jeito de trabalhar com essas procedures melhor..acredito que resolveria o problema.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo o que entendi então você está criando a trigger para substituir a ideia que eu dei.

bom... e se você colocar na trigger um start apenas. tipo manda a trigger startar um processo sem que você precise esperar o serviço terminar.

em sqlserver eu não sei fazer. faria no C# :)

mas, talvez tenha algo no sql que faça isso.

 

Antes da triiger você talvez estivesse usando o JOB certo?

Porque nao continua usando o JOb mas cria-o na trigger com execução imediata e apenas uma vez?

seria perfeito, pelo menos eu acho. Porque o usuario nao precisa esperar o procedimento terminar e é executado no final do processo do usuario.

 

abaixo uma url que achei na net falando como trabalhar com job no código:

 

http://imasters.com.br/artigo/257/sql_server/criando_e_executando_jobs_no_sql_server/

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo o que entendi então você está criando a trigger para substituir a ideia que eu dei.

bom... e se você colocar na trigger um start apenas. tipo manda a trigger startar um processo sem que você precise esperar o serviço terminar.

em sqlserver eu não sei fazer. faria no C# :)

mas, talvez tenha algo no sql que faça isso.

 

Antes da triiger você talvez estivesse usando o JOB certo?

Porque nao continua usando o JOb mas cria-o na trigger com execução imediata e apenas uma vez?

seria perfeito, pelo menos eu acho. Porque o usuario nao precisa esperar o procedimento terminar e é executado no final do processo do usuario.

 

abaixo uma url que achei na net falando como trabalhar com job no código:

 

http://imasters.com...._no_sql_server/

 

 

 

Chamar um JOB dentro de uma trigger ?

Eu já vi o contrário...

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao vejo porque nao.

na verdade é criar um job dentro de uma trigger.

eu ja criei em procedure. entao deve dar para criar em trigger. nao faz sentido nao dar.

mas, se nao der, crie uma procedure que crie o job e a trigger chama a procedure.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo!

 

Já pensou ao invés de Trigger criar uma Auditoria?

 

Uma vez tentei usar trigger e o rendimento do meu banco de dados caiu consideravelmente e com a Auditoria do SQL Server isso não acontece.

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo!

 

Já pensou ao invés de Trigger criar uma Auditoria?

 

Uma vez tentei usar trigger e o rendimento do meu banco de dados caiu consideravelmente e com a Auditoria do SQL Server isso não acontece.

 

Um abraço.

 

E como eu faço?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.