本頁是否能提供幫助?
您對此內容的意見反應十分重要。 請告訴我們您的想法。
其他意見反應?
剩餘 1500 個字元
匯出 (0) 列印
全部展開

作法:使用 bcp 將資料庫移轉至 Azure SQL Database

更新日期: 2015年7月

移轉 SQL Server 資料庫至 Microsoft Azure SQL Database 時,您可以使用 SQL Server bcp 公用程式進行高效能資料移轉。先使用 bcp 將來源資料表的資料複製到資料檔。然後,再執行一次將資料從資料檔複製到目的地資料表。bcp 只移動資料,因此必須搭配使用另一個處理序,進行資料庫結構描述移轉。

bcp 公用程式是專為高效能、大量上傳至 SQL Server 或 Microsoft Azure SQL Database 而設計的命令列公用程式。它不是移轉工具。它不會擷取或建立結構描述。您必須先使用其中一個結構描述移轉工具 (例如產生指令碼精靈) 或提取和部署資料層應用程式 (DAC) 封裝,將結構描述傳送至 Microsoft Azure SQL Database 中的資料庫。

bcp 公用程式會呼叫也在 SQL Server 應用程式開發介面 (API) 中公開的 SQL Server 大量複製功能。數個移轉工具,例如 Microsoft Azure SQL Database 移轉精靈和 DAC BACPAC,也使用大量複製功能來移轉資料。

當複製資料至較大的目標資料表時,請使用大量複製最佳作法改善效能。例如:

  • 使用 –N 選項以原生模式移轉資料,就不需要資料類型轉換。

  • 使用 –b 選項指定批次大小。每個批次都是以個別的交易匯入及記錄。根據預設,資料檔中的所有資料列是以一個批次匯入。如果交易失敗,只回復目前批次的插入項。識別最佳批次大小並使用批次大小,是在資料移轉時減少 Microsoft Azure SQL Database 連接遺失的好作法。

  • 使用 bcp 提示:

    • 匯入時使用 –h “TABLOCK” 提示,指定在大量載入作業期間使用大量更新資料表層級的鎖定。這會透過使用單一資料表鎖定而不是每個資料列的鎖定,減少鎖定負擔。

    • 匯出時使用 –h “ORDER(…)” 提示來排序資料檔。如果匯入資料時是依照資料表的叢集索引來排序,可提升大量匯入的效能。

  • 對於大型資料表,請將匯入複製作業分割為可同時執行的多個資料流。如果您大量複製來源資料表的資料至一個資料檔,請使用 –F firstrow 和 –L lastrow 參數,指定每次執行 bcp 時處理的資料檔部分。

如需有關大量複製最佳作法的詳細資訊,請參閱<最佳化大量匯入效能>。

如果使用 IDENTITY 產生資料表的主索引鍵,請使用 bcp –E 參數,保留來源資料庫中產生的索引鍵。只要在匯入時不會對資料表進行其他更新,-E 參數應該會防止匯入期間的任何外部索引鍵違規。確定不可能進行其他更新,例如將資料庫處於唯讀模式。

note附註
bcp 一次只操作一個資料表,因此從來源資料庫擷取資料時,不會維護多個資料表的交易完整性。您可以透過在匯出期間將來源資料庫處於單一使用者或唯讀模式,解決這個問題。

[Top]

在目的地資料庫中的資料表必須是空白,才能進行大量複製匯入。除非您截斷或刪除上一個大量複製所插入的所有資料列,否則無法對相同資料表執行多個大量複製匯入。

[Top]

bcp 隨附於 SQL Server。從 SQL Server 2008 R2 或 SQL Server 更新版本安裝用戶端公用程式,以取得支援用於 Microsoft Azure SQL Database 的 bcp 版本。

[Top]

使用 bcp 從來源資料庫中的資料表將資料移至目的地資料庫中的資料表副本,包含五個步驟:

  1. 移轉結構描述。

    使用結構描述傳送機制,例如產生指令碼精靈或 DAC BACPAC,在 Microsoft Azure SQL Database 中建立資料庫副本。在程序結束時,應該會在 Azure SQL 資料庫 資料庫中建立所有資料表,但不包含任何資料。

  2. 匯出資料至資料檔。

    針對來源 SQL Server 資料庫中的每個資料表,執行 bcp out 作業,複製資料表中的資料至資料檔。這個範例從一個資料表匯出資料至資料檔案:

    bcp tableName out C:\filePath\exportFileName.dat –S serverName –T –n -q
    
    out 參數表示將資料複製出 SQL Server。-n 參數利用資料的原生資料庫資料類型來執行大量複製作業。-q 參數在 bcp 公用程式和 Database Engine 執行個體之間的連接中,執行 SET QUOTED_IDENTIFIERS ON 陳述式。

  3. 執行大量複製最佳化

    進行任何目的地資料庫結構描述必要變更,加速複製資料到大型資料表的效能,例如停用非叢集索引、觸發程序和條件約束。

  4. 將資料檔案匯入Azure SQL 資料庫

    針對 Microsoft Azure SQL Database 目的地資料庫中的每個資料表,執行 bcp 公用程式,從匯出資料檔複製資料至資料表。這個範例有 bcp 三次執行,會從大約有 300,000 個資料列的資料檔複製資料至單一資料表。每次執行大約複製 100,000 個資料列。

    Bcp tableName in c:\filePath\exportFileName.dat –n –U userName@serverName –S tcp:serverName.database.windows.net –P password –b 200 –L 99999 –h”TABLOCK”
    
    Bcp tableName in c:\filePath\exportFileName.dat –n –U userName@serverName –S tcp:serverName.database.windows.net –P password –b 200 –F 100000 –L 199999 –h”TABLOCK”
    
    Bcp tableName in c:\filePath\exportFileName.dat –n –U userName@serverName –S tcp:serverName.database.windows.net –P password –b 200 –F 200000 –h”TABLOCK”
    
    in 參數表示複製資料到 Microsoft Azure SQL Database。–b 參數指定每一批次匯入資料的資料列數。–L lastrow 和 –F firstrow 參數用來指定每次執行時處理的資料檔部分。

  5. 移除結構描述最佳化

    將先前為了最佳化大量插入而移除的任何結構描述項目還原。例如,啟用在步驟 3 停用的任何非叢集索引、觸發程序或條件約束。

[Top]

顯示:
© 2015 Microsoft