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

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

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

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

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

先決條件

從 Linux 將 BCP 用於 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 將 BCP 用於 RDS for SQL Server 時,請考量下列最佳實務:

  • 使用批次處理 – 對於大型資料集,請使用 -b 選項分批處理資料。這可以改善效能,並實現更好的錯誤復原效能。

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

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

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

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

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

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

排解常見問題

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

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