我有一個Oracle數據倉庫,其中包含大量的數據(大約1100萬行),並希望每天將這些數據提取到SQL Server數據庫。從Oracle數據倉庫導入數據到SQL Server通過SSIS 2008
我創建了一個包,使用漸變維度但它是每秒處理大約600行從Oracle數據導入到SQL Server。
我需要我的軟件包只是插入新記錄而不更新或對舊記錄做任何事情,因爲數據很大。
有什麼辦法可以快速處理任何其他數據流項目?
我有一個Oracle數據倉庫,其中包含大量的數據(大約1100萬行),並希望每天將這些數據提取到SQL Server數據庫。從Oracle數據倉庫導入數據到SQL Server通過SSIS 2008
我創建了一個包,使用漸變維度但它是每秒處理大約600行從Oracle數據導入到SQL Server。
我需要我的軟件包只是插入新記錄而不更新或對舊記錄做任何事情,因爲數據很大。
有什麼辦法可以快速處理任何其他數據流項目?
您可以嘗試在SSIS中使用合併連接,這應該允許僅插入新記錄的比較。另外,我不喜歡在確定什麼數據插入時使用日期時間,但我想這取決於您的源數據。聽起來好像Oracle源數據沒有順序標識字段?如果有的話,我會結合使用該日期和時間來確定要插入的數據。這可以在SQL或SSIS中完成。
是的,我有一個關鍵列,這是一個主鍵和唯一的,請提供一些步驟 –
在你的情況下,600/sec也不算太差。 如果假設這1千一百萬只在一年內收集。這意味着新記錄的數量每天只有3萬個。這大約需要1分鐘。
最大的問題是確定要插入的記錄。
如果必須有時間戳或順序標識來標識最新插入的記錄。
如果您的ID不是連續的,您可以嘗試從Oracle表中提取SSIS ONLY ID字段,並將其與現有數據集進行比較,然後僅從Oracle請求最新記錄。
如果您沒有這些字段,可以提取所有1100萬條記錄,然後在兩邊生成哈希值並比較這些哈希值以知道要插入的新增值。
我在源端提交了一個時間戳記,所以在初始加載後,我是否需要編寫查詢來提取特定數據? –
每次要上傳數據時,都必須提取MAX時間戳值,然後只提取舊的新值之間的記錄。然後存儲下一次的新值。 –
我們對SSIS使用Attunity Oracle連接器而不是標準OleDb。嘗試使用它們並查看性能是否提高:https://www.microsoft.com/en-us/download/details.aspx?id = 44582 – vercelli
此外,也許你應該在MSSQL目標表上嘗試'lookup'並將沒有匹配的行重定向到目標表 – vercelli
或者您可以將所有行從Oracle複製到MSSQL中的Staging表並從該臨時表插入。 – vercelli