批量複製 - sybase

database sqlbulkcopy sybase

我需要有選擇地(行和列)從一個表導出大約2000萬行到另一個表。這是我試過的:

--Run this in batch:
INSERT INTO Table 2
Select A, B from Table1 
where A > a and B < b

---Table1 have columns A, B....Z and got around 50 million records. 

完成大約需要12個小時。我不認為sybase允許bcp輸出Table1中的選擇性列和行,以及表2中的bcp。是否有可以使用的替代快速方法?如果可以在<4小時內完成,我會很高興。

感謝您閱讀。

熱門答案

我想你的意思是:

WHERE PK > start_value AND PK < end_value

沒有充分的理由在同一台服務器上的兩個表中復制數據,因此希望這些表位於不同的服務器上。如果您正在“存檔”,那麼請注意,這是錯誤的做法;相反,提高表速度。請參閱這篇文章

  1. INSERT-SELECT將終止事務日誌,這會對您的運行速度逐漸降低,並阻止其他用戶使用該數據庫。如果你分成1000行的批次,它會更快,更善於交際。

如果可以在<4小時內完成,我會很高興

  1. 應該沒有問題。取決於您的硬件和磁盤佈局。我可以在運行ASE 15.5的小型演示盒上以13.2秒的速度加載1600萬行。

  2. bcp會自動運行兩種模式,具體取決於以下條件:

    • 快速。這需要設置SELECT_INTO / BULK_COPY sp_dboption,這允許bcp不記錄INSERTS,只允許分配。還需要刪除表上的索引(可以在bcp完成後創建它們)。

    • 慢。上述任何一種情況都未得到滿足。記錄所有INSERTS。確保在轉儲它的日誌上有一個閾值(它將填充)。

  3. 完全沒有問題,out_data_file或Table_2是Table_1的列的子集。在Table_1服務器上創建Table_2的視圖。 Bcp-out視圖。您還可以在視圖中放置WHERE子句,進行轉換等。

  4. 您可以並行執行bcp(最多為主機系統上的CPU /內核)。將提取物分成不平行的流(例如,在8核機器上,exec 8並行提取作業)。使用-F和-L參數指定Table_1的八分之一。如果您有o / s,則使用“&”,如果沒有,則使用8 x BAT文件。

  5. 您還可以並行運行(例如)8 x INSERT-SELECT作業。按PK值拆分,而不是行號。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow