2011-08-26 114 views
0

我的組織從2000(yay!)升級到SQL Server 2008,我不熟悉Integration Services的交互操作。SQL Server SSIS事務處理

我目前管理非常大型的數據庫,每天存儲500000到1000000次交易的業務流程事務。過去我們對數據庫的管理非常差,因此他們的規模變得難以維繫。我正在努力提供數據庫的日常歸檔,以便工作數據庫更易於管理。我編寫了幾個存儲過程來執行歸檔,然後修剪正在運行的數據庫。但是,在涉及Integration Services的過程中,我發現我的SP目前所從事的工作具有很好的內置功能。

我創建的是執行導出/導入的幾個SSIS包。由於我只對某些數據有興趣,我用一個自定義查詢的是形式的包:

DELETE TransactionTable 
OUTPUT 
DELETED.* 
WHERE (EventTimestamp >= 
DATEADD(D, 0, DATEDIFF(D, 0, (SELECT MIN(EventTimestamp) FROM TransactionTable))) 
) 
AND (EventTimestamp < 
DATEADD(HH, 0, (DATEADD(YY, -1, DATEDIFF(D, 1, GETDATE())))) 
); 

這個查詢抓住我感興趣的數據,並從工作表中刪除它。使用SSIS,此查詢會生成放置在歸檔表中的輸出。

我的問題(S)是:
因爲我想記錄導入到我的檔案,並從同一SSIS包內的工作數據庫中刪除這些記錄,以確保一致性,該查詢似乎是這樣做的方式。但是,我擔心交易的結構。我將從我的工作數據庫中刪除記錄作爲要插入到我的歸檔數據庫中的輸出。
SQL Server在這種情況下如何處理錯誤?
運行此包是否安全?
如果語句生成的輸出無效併發生錯誤,會發生什麼情況?
該語句是否回滾?
如果所有輸出都可以傳輸到存檔,那麼DELETE是否會被提交?
如果不是,我怎麼能夠達到故障安全狀態?

回答

1

好消息是,如果發生任何故障,您可以設置SSIS包以回滾一組任務。

有一個TransactionOption屬性可用於幾乎每個容器/任務,包括包本身。您可以將其設置爲Required,SupportedNotSupported

可以在每個選項的細節在這裏:http://msdn.microsoft.com/en-us/library/ms137690.aspx

顯然玩弄這一點,迫使不同的步驟錯誤,看到的結果是什麼。