

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

# 從 Linux 使用 BCP 公用程式匯入和匯出資料
<a name="SQLServer.Procedural.Importing.BCP.Linux"></a>

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

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

## 先決條件
<a name="SQLServer.Procedural.Importing.BCP.Linux.Prerequisites"></a>

從 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 命令列工具
<a name="SQLServer.Procedural.Importing.BCP.Linux.Installing"></a>

若要從 Linux 使用 BCP，您必須安裝 Microsoft SQL Server 命令列工具。如需特定 Linux 發行版本的詳細安裝指示，請參閱下列 Microsoft 文件：
+ [在 Linux 上安裝 sqlcmd 和 bcp SQL Server 命令列工具](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools)
+ [bcp 公用程式](https://docs.microsoft.com/en-us/sql/tools/bcp-utility) - BCP 公用程式的完整參考

安裝完成後請執行下列命令，以確保工具可在您的 PATH 中使用：

```
bcp -v
sqlcmd -?
```

## 從 RDS for SQL Server 匯出資料
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting"></a>

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

### 基本匯出語法
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting.Basic"></a>

使用 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` - 您的資料庫密碼

### 匯出範例
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting.Example"></a>

下列範例會從 `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`)
+ 使用管道 (\$1) 做為欄位分隔符號 (`-t "|"`)
+ 使用新行做為資料列分隔符號 (`-r "\n"`)

## 將資料匯入至 RDS for SQL Server
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing"></a>

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

### 基本匯入語法
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing.Basic"></a>

使用 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` - 您的資料庫密碼

### 匯入範例
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing.Example"></a>

下列範例會將資料從檔案匯入名為 `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`)
+ 使用管道 (\$1) 做為欄位分隔符號 (`-t "|"`)
+ 使用新行做為資料列分隔符號 (`-r "\n"`)
+ 分批處理 1000 個資料列的資料 (`-b 1000`)

## 常用 BCP 選項
<a name="SQLServer.Procedural.Importing.BCP.Linux.Options"></a>

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


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

## 最佳實務和考量
<a name="SQLServer.Procedural.Importing.BCP.Linux.BestPractices"></a>

從 Linux 將 BCP 用於 RDS for SQL Server 時，請考量下列最佳實務：
+ **使用批次處理** – 對於大型資料集，請使用 `-b` 選項分批處理資料。這可以改善效能，並實現更好的錯誤復原效能。
+ **正常處理錯誤** – 使用 `-e` 選項擷取個別檔案中的錯誤資訊和遭拒的資料列，以進行分析。
+ **選擇適當的資料格式** – 在來源和目的地皆為 SQL Server 時，可使用字元格式 (`-c`) 實現跨平台相容性，或使用原生格式 (`-n`) 以獲得更好的效能。
+ **保護您的憑證** – 避免將密碼直接放入命令列中。請考慮使用具有適當許可的環境變數或組態檔。
+ **使用小型資料集進行測試** – 處理大量資料之前，請先使用較小的資料集來測試 BCP 命令，以驗證格式和連線。
+ **監控網路連線** – 確保穩定的網路連線，特別是對大型資料傳輸。請考慮使用 `screen` 或 `tmux` 等工具進行長時間執行的操作。
+ **驗證資料完整性** – 資料傳輸後，請驗證資料列計數和範例資料，以確保操作能順利完成。

## 排解常見問題
<a name="SQLServer.Procedural.Importing.BCP.Linux.Troubleshooting"></a>

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


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