本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 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 匯出資料的基本語法為:
bcpdatabase.schema.tableout 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 \ -Uadmin\ -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 匯入資料的基本語法為:
bcpdatabase.schema.tablein 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 \ -Uadmin\ -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選項,或指定適當的程式碼頁面。 |