僅是出於理論目的而構建的數據傳輸情況的工具,這對於從SQL Server(2000或更高)(2000或更高)和/或Oracle(10G或更高)的實例傳輸大量數據可能很有用,以轉移到另一個(SQL> SQL> SQL,SQL> oracle,Oracle,Oracle> oracle> SQL和Oracle> Oracle> Oracle> Oracle> Oracle)。
通常,將SQL Server和/或Oracle表從一個實例複製到另一個實例。
通常,我們可能決定使用SSMS導入/導出嚮導,集成服務軟件包或將數據作為文本文件傳輸的方法。
但是,如果我們談論具有超過3億張記錄或30GB的表格,如果必須在最短的時間內復制它們,則可能會出現問題。
如果幸運的話,此表可能在SQL Server中具有群集索引或帶有Oracle頻率直方圖的索引。這就是這個小項目發揮作用的情況。
如果我們在源表上沒有聚類的索引,那麼我們就有一些希望,我們實現了一種新方法(比聚類速度慢一些,是一個好的方法),以從Oracle和SQL Server中的堆表複製數據。
它的邏輯非常簡單:它在SQL Server或Oracle中的直方圖掃描索引統計,並定義數據的平衡簇。
這意味著它可以創建與螺紋與參數化一樣多的查詢,並且這些查詢在群集索引字段上過濾器,以便獲得每個數據的相同量的數據。然後,它使用odp.net方法的sqlbulkcopy .NET FW或OracleBulkCopy發射它們。作為堆,它具有確定功能的“分區”表和一個模塊(SQL Server中的%% lockres %%和Oracle中的ROWID),並以一個線程啟動每個查詢。
我們必須建議,根據線程的數量,這是一個非常密集的過程,在某些情況下,CPU消耗可能會上升到100%,並且磁盤隊列長度可能會導致長時間的等待。
因此,我們建議在數據源和目的地以外的其他服務器上運行。
因此,擁有2個網絡的結構,每個服務器中有兩張100MBIT網卡,我們達到了190MB/SEG的傳輸率。
在生產環境中考慮使用它之前,您應該為統計目的進行測試。
附加註意事項:在某些電路下將實現性能增益,有時由於群集列內的數據性質不會被滲透。首先,有必要澄清群集索引僅保存統計信息的統計信息,這是化合物索引的第一列的統計信息,因此,群集索引設計良好變得更加至關重要。我們的意思是,最好遵循從最粒度到少的訂購字段的訂單尖端。可能遇到的另一個問題是無效數據的數量。統計信息討論了非零數據,因此,如果表具有80%的空數據,則多線程將無法從中受益,因為所有空數據都在一個線程中復制為唯一批次。自然,我們還建議目標表沒有索引(允許多個散裝插入線),沒有分區,並且不會被壓縮以加快插入過程。
該DLL可能會圍繞其他不依賴或未建立在SSIS平台上的ETL項目中。