2016-04-06 8 views
8

Utilizziamo SQL Server 2008 e abbiamo un lavoro che in genere dura 18 ore e ha molti passaggi. Ho cercato e non riesco a trovare una risposta riguardo a cosa succede quando modifichi un lavoro durante l'esecuzione. Di seguito è riportato un riepilogo delle modifiche apportate al lavoro durante l'esecuzione oggi:Cosa succede se le fasi del lavoro di SQL Server vengono modificate durante l'esecuzione

1) Ho inserito un nuovo passaggio nella posizione "passaggio 2". Il lavoro era già al punto 15, quindi presumibilmente questo passaggio non verrà attivato fino alla prossima esecuzione del lavoro.

2) Ho eliminato l'ultimo passaggio (passaggio # 30).

3) Ho modificato il passaggio 29 da "Vai al passaggio successivo" a "Interrompere il reporting in caso di successo".

Poiché il passaggio 15 era in corso quando ho apportato la modifica oggi, le modifiche apportate ai passaggi finali diventeranno effettive quando il lavoro arriverà a quel punto oggi o saranno effettive solo alla prossima esecuzione?

Inoltre, il fatto che ho inserito un nuovo passaggio nella posizione n. 2 influisce negativamente sull'ordine di passaggio per l'esecuzione corrente?

+0

Suppongo che nulla cambierà fino alla prossima esecuzione: il lavoro è già caricato in memoria e in esecuzione. Tuttavia, non riesco a trovare alcuna documentazione a supporto di questa idea, quindi perché non provarlo e scoprirlo? Ad esempio, aggiungi un passaggio alla fine durante l'esecuzione che viene esportato in una tabella non utilizzata e vedi se ottieni un output? – Bridge

+0

Se un lavoro viene eseguito mentre è in esecuzione, non accadrà nulla. Non lo romperà o inizierà a eseguire il cambiamento o altro. Avrà effetto solo alla prossima esecuzione. –

risposta

8

Ho controllato il lavoro al termine e ho una risposta definitiva ora. Modifica di un lavoro mentre è in esecuzione DOES influisce sull'esecuzione corrente del lavoro. In base alla cronologia del processo, il modo in cui SQL Server 2008 gestisce i lavori è un passo alla volta in base al numero di passaggi. I passaggi non vengono caricati in memoria o memorizzati in altro modo mentre il lavoro è in esecuzione.

Nel mio scenario specifico, ho aggiunto un passaggio in posizione # 2. Ciò ha causato l'incremento di tutti i successivi numeri di passaggio al momento dell'aggiornamento. Il processo stava eseguendo il passaggio n. 15 quando l'ho aggiornato, quindi il passaggio n. 15 è diventato # 16 post-aggiornamento. Di conseguenza, la stessa procedura memorizzata (nuovo passo n. 16) è stata nuovamente eseguita al termine del passaggio 15.

Inoltre, da quando ho rimosso il passaggio finale del lavoro, non è stato eseguito quando il lavoro ha raggiunto quel passaggio in quanto non esisteva più come parte del lavoro.

La linea di fondo è che non è consigliabile aggiornare i lavori durante l'esecuzione. I risultati sono prevedibili, ma a meno che tu non possa permettersi di eseguire due passaggi o non farlo affatto, non è consigliabile.

0

Utilizzo SQL Managment Studio 2012 Service Pack 3 e la risposta è dipende da.

Esempio

  • Immaginate che Job #1 ha tre fasi.
  • Step 3 trigger Job #2.
  • Job #1 è in Step 2
  • Non voglio che funzioni 'Fase 3' ancora, quindi modificare il codice per SELECT 1 e commentare la riga EXEC msdb.dbo.sp_start_job job #2.
  • Il lavoro n. 1 termina Step 2 e i trigger Job #2 su Step 3.

Il motivo per cui la modifica del codice non ha avuto alcun effetto è dovuto al fatto che il processo era già in esecuzione e viene eseguito sulla propria copia locale dello script che le successive modifiche al codice non avranno alcun effetto.