關於大容量匯入和大容量匯出操作

iSQlServer發表於2008-11-26

Microsoft SQL Server 支援從 SQL Server 表大容量匯出資料以及將資料大容量匯入 SQL Server 表或未分割槽的檢視。可以使用下列基本方法:

方法  說明  匯入資料  匯出資料 
bcp 實用工具
 大容量匯出資料和大容量匯入資料並生成格式化檔案的命令列實用工具 (Bcp.exe)。
 支援
 支援
 
BULK INSERT 語句
 將資料直接從資料檔案匯入資料庫表或未分割槽檢視的 Transact-SQL 語句。
 支援
 不支援
 
INSERT ...SELECT * FROM OPENROWSET(BULK...) 語句
 通過在 INSERT 語句中指定 OPENROWSET(BULK…) 函式來選擇資料,從而使用 OPENROWSET 大容量行集提供程式將資料大容量匯入 SQL Server 表的 Transact-SQL 語句。
 支援
 不支援
 

 程式內與程式外操作
BULK INSERT 語句和 OPENROWSET(BULK) 函式通過 SQL Server 在程式內執行,共享同一記憶體地址空間。因為資料檔案是通過 SQL Server 程式開啟的,所以不能在客戶端程式和 SQL Server 程式之間複製資料。有關使用 BULK INSERT 或 INSERT ...SELECT * FROM OPENROWSET(BULK...) 匯入資料時的安全注意事項,請參閱使用 BULK INSERT 或 OPENROWSET(BULK...) 匯入大容量資料。

與之相反,bcp 實用工具在程式外執行。 若要跨程式記憶體空間移動資料,bcp 必須使用“程式間資料封送”。“程式間資料封送”是將方法呼叫的引數轉換成位元組流的過程。該過程會顯著增加處理器的負荷。但是,由於 bcp 會分析資料並將資料轉換為客戶端程式中的本機儲存格式,它可以減輕 SQL Server 程式的分析和資料轉換負荷。因此,如果存在 CPU 限制,則通過使用 bcp 而非 BULK INSERT 或 INSERT ... SELECT * FROM OPENROWSET(BULK),可以在具有多個 CPU 的計算機上或者在不同的計算機上實現更高的大容量匯入效能。

 格式化檔案
bcp 實用工具、BULK INSERT 和 INSERT ...SELECT * FROM OPENROWSET(BULK...) 都支援使用專門的“格式化檔案”來儲存資料檔案中每個欄位的格式資訊。格式化檔案還可以包含相應的 SQL Server 表的有關資訊。格式化檔案可以用於提供從 SQL Server 例項大容量匯出資料和向其中大容量匯入資料時所需的所有格式資訊。

格式化檔案提供了一種解釋匯入期間資料檔案中資料的格式以及設定匯出期間資料檔案中資料格式的靈活方式。這種靈活性使得解釋資料時無需編寫專用程式碼,也無需為滿足 SQL Server 或外部應用程式的特殊需要而重新設定資料的格式。例如,如果將要載入的資料大容量匯出到某個需要逗號分隔值的應用程式,則可以使用格式化檔案將逗號作為欄位終止符插入匯出的資料中。

SQL Server 2005 及更高版本支援兩種格式化檔案:XML 格式化檔案和非 XML 格式化檔案。早期版本的 SQL Server 支援非 XML 格式化檔案;XML 格式化檔案是 SQL Server 2005 中新增的。

bcp 實用工具是唯一能夠生成格式化檔案的工具。有關詳細資訊,請參閱建立格式化檔案。有關格式化檔案的詳細資訊,請參閱用來匯入或匯出資料的格式化檔案。

注意:
如果在大容量匯出或匯入操作期間未提供格式化檔案,使用者可以選擇在命令列處覆蓋預設格式。
 


 查詢處理器和大容量匯入
將資料大容量匯入 SQL Server 例項時,bcp 實用工具、BULK INSERT 語句和 INSERT ...SELECT * FROM OPENROWSET(BULK...)語句都使用查詢處理器。

這三種方法都可以將資料檔案中的資料轉換為 OLE DB 行集。但是轉換方法不同,如下所示:

bcp 實用工具讀取資料檔案並將 TDS 流傳送到 SQL Server 大容量複製程式 (BCP) API,該程式將資料轉換為 OLE DB 行集中。

BULK INSERT 和 OPENROWSET 大容量行集提供程式都是直接將檔案資料轉換為 OLE DB 行集中。

查詢處理器將 OLE DB 行集插入目標表,查詢處理器將規劃並優化每個操作。

 效能注意事項
匯入大量資料時,效能的考慮也是非常重要的。在某些情況下,可以通過更改大容量匯入或大容量匯出操作處理下列一項或多項內容的方式來提高效能:

批處理開關

CHECK 約束的約束檢查

如何記錄大容量事務。它與通常使用完整恢復模式的資料庫相關。

排序匯出的資料

並行資料匯入

表鎖定

觸發器執行

有關詳細資訊,請參閱優化大容量匯入效能。

注意:
不存在針對大容量匯出操作的特殊優化技術。這些操作只是使用 SELECT 語句從源表選擇資料。 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-503394/,如需轉載,請註明出處,否則將追究法律責任。

相關文章