本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 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 文件:
-
bcp 公用程式
- BCP 公用程式的完整參考
安裝之後,請執行下列動作,以確保 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 -Uusername
-Ppassword
[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
\ -Pmypassword
\ -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 -Sserver_name
-Uusername
-Ppassword
[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
\ -Pmypassword
\ -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 選項,或指定適當的程式碼頁面。 |