2011-01-05 41 views
0

我需要將3000個奇數行從一個SQL Server實例複製到另一個SQL Server實例。使用SSIS在SQL Server之間複製數據

目的地有現有的數據,由現場網站使用。

在SSIS中使用數據流時,插入了一個Transfer,它使用SQL View從源抓取數據,然後將其導入到目標表中。這確保了數據在我們的外部網站上保持最新。

我想要實現的是,如果無論出於什麼原因SSIS失敗,目標表不會留空,從而打破我們的外部網站的功能。

由於只有一個任務在包中使用,SSIS是否會使這個原子?即如果它在複製數據時失敗,它將不會將目標表留空或部分完成?

更新: 感謝那些誰指出,「替換」沒有任何意義 - 這是從以前的嘗試,我們有我們所用的複製對象函數。

目前使用複製,它將放入3000行,但下一次運行時,它會再次放入相同的3000行!我需要的發生是有以下

  • 保留現有的目標數據的情況下,一些地方安全出了問題
  • 截斷目標表
  • 複製過來的數據從源
  • 如果有什麼做出錯,截斷目標表並導入備份的數據。

在SSIS中這樣做的最好方法是什麼?

感謝

格雷姆

+1

你是什麼意思'使用替換'將其導入到目標表中?你能爲每一步提供一些DDL來展示你在做什麼嗎? – Kenneth 2011-01-05 17:20:29

+0

我已經更新了這個問題,我錯誤地說它是一個替換,因爲這是我以前嘗試的東西 – Graeme 2011-01-06 08:59:32

回答

0

我有一個任務失敗(PK違反,例如)和複製的行不會回滾,我已經重新開始任務之前將其刪除。

您應該測試它。

我不知道'替換'是什麼意思。

您正在更換現有的行嗎?更新現有的行?

1

這聽起來像你正在尋找一個事務,如果有任何事情失敗,它將回滾(撤消)。

這是全部或沒有。

SSIS很好地處理交易。

This article描述了一種類似於你的情況,其中它通過刪除一些行開始。

一個重要的步驟有:

屬性存在在封裝 水平的的TransactionOption,容器水平(例如For循環, Foreach循環,序列等),以及如 幾乎任何控制流任務 (例如,執行SQL任務,數據流 任務等)。的TransactionOption可以 設置爲以下之一:

* Required - if a transaction exists join it else start a new one 
* Supported - if a transaction exists join it (this is the default) 
* NotSupported - do not join an existing transaction 
0

取而代之的是殺和填充策略,考慮合併數據。

  • 讓我們叫你的原始表BASE
  • 與設置爲原始
  • 截斷同一列來自STG任何新數據創建STG表,並導入到STG
  • 更新BASE(由加盟商鍵)
  • 插入到從STG BASE其中不存在

這種方法具有零停機時間和無縫INTE的優點格雷申。

相關問題