2013-01-22 10 views
6

Ho un pacchetto SSIS che è piuttosto semplice, solo un'importazione di dati e un'attività SQL da eseguire in seguito. Voglio eseguire il rollback di tutte le parti del pacchetto in caso di errore, quindi inserisco queste attività in un contenitore di sequenza e imposta la proprietà TransactionOption del contenitore di sequenza su "Required" e imposta la proprietà FailPackageonFailure su "True". Questo ha funzionato bene quando stavo prendendo di mira il db locale. Tuttavia, quando provo a modificare la connessione OLE DB su un server remoto, le suddette impostazioni delle proprietà fanno sì che il pacchetto si blocchi e alla fine falliscono con un messaggio di "Impossibile acquisire connessione". Ho visto descrizioni simili di questo problema sul web ma il consiglio è sempre quello di verificare la connessione. Tuttavia, so che la connessione va bene perché quando cambio la proprietà TransactionOption al suo valore predefinito di 'Supportato' il pacchetto funziona correttamente.Contenitore di sequenza SSIS Opzione di transazione

Qualcuno sa perché questo potrebbe accadere? Suppongo che abbia qualcosa a che fare con diverse impostazioni sul server a cui sto cercando di connettermi. Qualcuno sa anche un modo diverso di garantire un rollback completo se qualsiasi parte del pacchetto dovesse fallire.

Grazie per aver letto

+0

A meno che non stia facendo qualcosa di sbagliato, non è nemmeno necessario modificare la proprietà FailPackageonFailure. Potresti pubblicare il set completo di messaggi OnError, OnTaskFailed, OnInformation e OnWarning? Potrebbe essere utile vedere quali sono tutti i messaggi segnalati. – billinkc

+0

grazie per la tua risposta. Hai ragione che il vero colpevole qui sembra essere l'opzione di transazione. ecco i due messaggi err visualizzati DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. "Impossibile arruolarsi nella transazione.". In questo momento sto pensando che questo abbia a che fare con le configurazioni di sicurezza MSDTC sul server (dopo aver verificato con le stesse impostazioni locali) –

+1

MSDTC, ottimo quando funziona; OMFGKILLMENOW quando non lo fa – billinkc

risposta

2

È necessario utilizzare Distributed Transaction Coordinator.

The Distributed Transaction Coordinator (DTC) service coordinates transactions that update two or more transaction-protected resources, such as databases, message queues, files systems, and so on. These transaction-protected resources may be on a single computer or distributed across many networked computers.

Poiché si sta tentando di stabilire le transazioni tra i server, si richiede un servizio per coordinare i servizi di SQL Server. Here è un articolo su come farlo.

Assicurarsi di avviare e configurare il servizio, nonché di creare eccezioni nel firewall di Windows per i servizi tra i server.

si veda questo articolo in materia di operazioni per ulteriori informazioni: http://www.mssqltips.com/tip.asp?tip=1585

Inoltre potrebbe essere necessario guardare più in come il MSDTC funziona in relazione alla SSIS per ottenere il vostro problema risolto.

0

Un'altra opzione:

Leverage la proprietà RetainSameConnection della connessione OLE DB ed è possibile eseguire le operazioni regolari di SQL Server in SSIS su più compiti senza richiedere l'uso di Distributed Transaction Coordinator (DTC). In this article Jamie Thomson ci mostra come.

L'implicazione è che è possibile COMINCIARE LA TRANSAZIONE in un'attività Esegui SQL e quindi selezionare COMMIT o ROLLBACK in un altro.