從 Linux 使用 BCP 公用程式匯入和匯出資料 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

從 Linux 使用 BCP 公用程式匯入和匯出資料

BCP (大量複製程式) 公用程式提供在 RDS for SQL Server 資料庫執行個體與資料檔案之間傳輸大量資料的有效方式。您可以從 Linux 環境使用 BCP 來執行大量資料操作,這有助於資料遷移、ETL 程序以及定期資料傳輸。

BCP 支援將資料從檔案匯入 SQL Server 資料表,以及將資料從 SQL Server 資料表匯出至檔案。這對於以各種格式傳輸結構化資料特別有效,包括分隔文字檔案。

先決條件

將 BCP 與來自 Linux 的 RDS for SQL Server 資料庫執行個體搭配使用之前,請確定您有下列項目:

  • 與 RDS for SQL Server 資料庫執行個體網路連線的 Linux 環境

  • Linux 系統上安裝的 Microsoft SQL Server 命令列工具,包括:

    • sqlcmd - SQL Server 命令列查詢工具

    • bcp - 大量複製程式公用程式

  • RDS for SQL Server 資料庫執行個體的有效登入資料

  • 透過安全群組設定的網路存取,以允許 SQL Server 連接埠上的連線 (通常是 1433)

  • 您要執行之操作的適當資料庫許可

在 Linux 上安裝 SQL Server 命令列工具

若要從 Linux 使用 BCP,您需要安裝 Microsoft SQL Server 命令列工具。如需特定 Linux 發行版本的詳細安裝說明,請參閱下列 Microsoft 文件:

安裝之後,請執行下列動作,以確保 PATH 中可用的工具:

bcp -v sqlcmd -?

從 RDS for SQL Server 匯出資料

您可以使用 BCP 將資料從 RDS for SQL Server 資料庫執行個體匯出至 Linux 系統上的檔案。這對於建立備份、資料分析或準備資料以進行遷移非常有用。

基本匯出語法

使用 BCP 匯出資料的基本語法為:

bcp database.schema.table out output_file -S server_name -U username -P password [options]

其中:

  • database.schema.table - 完整資料表名稱

  • output_file - 輸出檔案的路徑和名稱

  • server_name - 您的 RDS for SQL Server 端點

  • username - 您的資料庫使用者名稱

  • password - 您的資料庫密碼

匯出範例

下列範例會從sales資料庫中名為 customers的資料表匯出資料:

bcp sales.dbo.customers out /home/user/customers.txt \ -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \ -U admin \ -P mypassword \ -c \ -t "|" \ -r "\n"

此命令:

  • customers資料表匯出資料

  • 將輸出儲存至 /home/user/customers.txt

  • 使用字元格式 (-c)

  • 使用管道 (|) 做為欄位分隔符號 (-t "|")

  • 使用新行作為資料列分隔符號 (-r "\n")

將資料匯入 RDS for SQL Server

您可以使用 BCP 將資料從 Linux 系統上的檔案匯入 RDS for SQL Server 資料庫執行個體。這對於資料遷移、載入測試資料或定期資料更新非常有用。

基本匯入語法

使用 BCP 匯入資料的基本語法為:

bcp database.schema.table in input_file -S server_name -U username -P password [options]

其中:

  • database.schema.table - 完整目的地資料表名稱

  • input_file - 輸入檔案的路徑和名稱

  • server_name - 您的 RDS for SQL Server 端點

  • username - 您的資料庫使用者名稱

  • password - 您的資料庫密碼

匯入範例

下列範例會將檔案的資料匯入名為 的資料表customers

bcp sales.dbo.customers in /home/user/customers.txt \ -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \ -U admin \ -P mypassword \ -c \ -t "|" \ -r "\n" \ -b 1000

此命令:

  • 將資料匯入customers資料表

  • /home/user/customers.txt 中讀取資料

  • 使用字元格式 (-c)

  • 使用管道 (|) 做為欄位分隔符號 (-t "|")

  • 使用新行作為資料列分隔符號 (-r "\n")

  • 以 1000 個資料列的批次處理資料 (-b 1000)

常見 BCP 選項

BCP 提供多種選項來控制資料格式化和傳輸行為。下表說明常用的選項:

選項 描述
-c 對所有資料欄使用字元資料類型
-n 使用原生資料庫資料類型
-t 指定欄位分隔符號 (預設為 Tab)
-r 指定資料列分隔符號 (預設為新行)
-b 指定大量操作的批次大小
-F 指定要匯出或匯入的第一列
-L 指定要匯出或匯入的最後一列
-e 指定錯誤檔案以擷取遭拒的資料列
-f 指定資料格式的格式檔案
-q 針對物件名稱使用引號識別符

最佳實務和考量

從 Linux 搭配 RDS for SQL Server 使用 BCP 時,請考慮下列最佳實務:

  • 使用批次處理 – 對於大型資料集,請使用 -b選項以批次處理資料。T他的 改善了效能,並允許更好的錯誤復原。

  • 正常處理錯誤 – 使用 -e選項擷取錯誤資訊和拒絕的資料列,以進行分析。

  • 選擇適當的資料格式 – 在來源和目的地皆為 SQL Server 時,使用字元格式 (-c) 實現跨平台相容性或原生格式 (-n) 以獲得更好的效能。

  • 保護您的登入資料 – 避免將密碼直接放入命令列。考慮使用具有適當許可的環境變數或組態檔案。

  • 使用小型資料集進行測試 – 在處理大量資料之前,請使用較小的資料集測試 BCP 命令,以驗證格式和連線。

  • 監控網路連線 – 確保穩定的網路連線,特別是針對大型資料傳輸。請考慮將 screen或 等工具tmux用於長時間執行的操作。

  • 驗證資料完整性 – 資料傳輸後,請驗證資料列計數和範例資料,以確保操作成功完成。

常見問題的故障診斷

下表說明從 Linux 使用 BCP 時可能遇到的常見問題及其解決方案:

問題 解決方案
連線逾時或網路錯誤 驗證您的 Amazon RDS 端點、安全群組設定和網路連線。確定可從 Linux 系統存取 SQL Server 連接埠 (通常是 1433)。
身分驗證失敗 驗證您的使用者名稱和密碼。確定資料庫使用者具有您正在執行之操作的適當許可。
資料格式錯誤 檢查您的欄位和資料列分隔符號。確定資料格式符合 BCP 預期。針對複雜的資料結構使用格式檔案。
拒絕許可錯誤 確保您的資料庫使用者具有匯入INSERT的許可或目標資料表上匯出的SELECT許可。
大型檔案處理問題 搭配 -b選項使用批次處理。考慮將大型檔案分割成較小的區塊,以獲得更好的效能和錯誤復原。
字元編碼問題 確保您的資料檔案使用相容的字元編碼。針對字元格式使用 -c選項,或指定適當的程式碼頁面。