Qual è il modo migliore per eseguire un pacchetto DTS MS SQL Server 2000 da un trigger?

StackOverflow https://stackoverflow.com/questions/252069

  •  05-07-2019
  •  | 
  •  

Domanda

Mi sono guardato intorno e ho trovato alcune idee su come farlo, ma nessun modo migliore definitivo. Una delle idee era utilizzare sp_start_job per dare il via a un processo di SQL Server Agent che esegue il pacchetto DTS. Se questo è il modo migliore per farlo, la domanda successiva sarebbe, " Come posso pianificare un pacchetto DTS da un lavoro e renderlo non ricorrente? & Quot;

Grazie, Tim

È stato utile?

Soluzione

xp_cmdshell ti permetterebbe di eseguire dtsrun.

Altri suggerimenti

Non consiglierei di associare questo tipo di funzionalità a un trigger. I trigger dovrebbero essere veloci. Non penso che ci sia modo di lanciare un pacchetto DTS che sarà veloce quanto I vorrebbe essere un trigger. Se questo risuona con te, allora suggerirei che il tuo trigger inserisca semplicemente una riga in una tabella speciale e quindi abbia un lavoro che viene eseguito tutte le volte che è necessario per il tuo scopo (ogni minuto? Ogni 10 secondi?) Che monitora questa tabella e dà il via al pacchetto DTS appropriato, se necessario.

Invece di usare xp_cmdshell, ho fatto questo:

Quando un determinato valore in una tabella cambia, il trigger utilizza msdb.sp_start_job per avviare un lavoro. Questo lavoro non deve essere eseguito secondo una pianificazione, solo quando avviato da un utente. Ho impostato la pianificazione del lavoro per l'esecuzione una volta, che ora è in passato, e deselezionai la casella abilitata.

Questo lavoro ha un passo, ovvero DTSRun / ~ Z0xHEXENCRYPTEDVALUE. Il pacchetto DTS copia alcune righe da questo server a un altro server su una piattaforma diversa e in caso di successo reimposta i valori nella tabella con il trigger per la prossima volta. Il trigger controlla un valore di tabella prima di chiamare sp_start_job, in modo che il processo inizi solo in determinate condizioni, non ogni volta.

Poiché sp_start_job viene eseguito in modo asincrono, il trigger si completa rapidamente. L'unico inconveniente è che devo eseguire il polling del valore che è stato ripristinato in caso di successo e far sapere all'utente che ha funzionato o che dopo un periodo di timeout non ha funzionato.

L'alternativa sarebbe usare xp_cmdshell se avessi bisogno di un'operazione sincrona, che potrebbe non essere una buona idea dall'interno di un trigger.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top