SqlPackage 匯入動作是將 BACPAC 檔案(.bacpac)中的結構與資料表資料匯入 SQL Server 或 Azure SQL 資料庫中的新資料庫或空資料庫。 在匯入至現有資料庫時,目標資料庫不得包含任何使用者定義的結構物件。 或者,當已認證的使用者建立 資料庫權限時,也可以透過匯入動作建立新的資料庫。 匯入動作是 SqlPackage 資料庫 可攜 性功能的一部分。
Note
雖然 Microsoft Entra ID 是 Azure Active Directory(Azure AD)的新名稱,但為了防止破壞現有的環境,Azure AD 仍會保留在某些硬式編碼元素中,例如 UI 字段、連線提供者、錯誤碼和 Cmdlet。 在本文中,這兩個名稱是可互換的。
Note
SqlPackage 匯入在 200GB 以下的資料庫表現最佳。 對於較大的資料庫,你可能想利用本文提供的屬性及 SqlPackage 故障排除 技巧來優化操作,或透過 parquet 檔案中的資料來實現資料庫的可攜性。
命令列語法
SqlPackage 會使用命令行上指定的參數、屬性和 SQLCMD 變數來起始指定的動作。
SqlPackage /Action:Import {parameters} {properties}
必要參數
匯入動作需要一個 SourceFile 參數來指定包含資料庫物件與資料的 .bacpac 檔案名稱與位置。
匯入動作需要一個目標連接,其中 SqlPackage 將會建立一個新資料庫或其中已存在一個空白資料庫。 這可以透過以下組合來指定:
-
TargetServerName和TargetDatabaseName參數,或 -
TargetConnectionString參數。
Examples
# example import to Azure SQL Database using SQL authentication and a connection string
SqlPackage /Action:Import /SourceFile:"C:\AdventureWorksLT.bacpac" \
/TargetConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;Persist Security Info=False;User ID=sqladmin;Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
# example import using short form parameter names
SqlPackage /a:Import /tsn:"{yourserver}.database.windows.net,1433" /tdn:"AdventureWorksLT" /tu:"sqladmin" \
/tp:"{your_password}" /sf:"C:\AdventureWorksLT.bacpac"
# example import using Microsoft Entra managed identity
SqlPackage /Action:Import /SourceFile:"C:\AdventureWorksLT.bacpac" \
/TargetConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;Authentication=Active Directory Managed Identity;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
# example import connecting using Microsoft Entra username and password
SqlPackage /Action:Import /SourceFile:"C:\AdventureWorksLT.bacpac" \
/TargetConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;Authentication=Active Directory Password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;User ID={yourusername};Password={yourpassword}"
# example import connecting using Microsoft Entra universal authentication
SqlPackage /Action:Import /SourceFile:"C:\AdventureWorksLT.bacpac" /UniversalAuthentication:True \
/TargetConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
匯入動作的參數
| Parameter | 簡短格式 | Value | Description |
|---|---|---|---|
| /AccessToken: | /at: | {string} | 指定連接目標資料庫時使用的基於憑證的認證存取憑證。 |
| /Action: | /a: | Import | 指定要執行的動作。 |
| /AzureCloudConfig: | /acc: | {string} | 指定連接 Microsoft Entra ID 的自訂端點格式為:AzureActiveDirectoryAuthority={value};DatabaseServicePrincipalName={value}“ . |
| /Diagnostics: | /d: | {True|False} | 指定診斷日誌是否輸出至主控台。 預設為 False。 |
| /DiagnosticsFile: | /df: | {string} | 指定一個檔案來儲存診斷日誌。 |
| /DiagnosticsLevel: | /dl | {None|Off|Critical|Error|Warning|Information|Verbose} | 指定過濾診斷檔案的追蹤訊息層級 |
| /DiagnosticsPackageFile: | /dpf | {string} | 指定一個檔案來儲存診斷套件。 |
| /MaxParallelism: | /mp: | {int} | 指定對資料庫執行的並行運算的平行程度。 預設值為 8。 |
| /ModelFilePath: | /mfp: | {string} | 指定用來覆蓋原始檔案中 model.xml 的檔案路徑。 使用此設定可能導致部署失敗及/或意外資料遺失。 此設定僅供在排解發佈、匯入或腳本產生問題時使用。 |
| /Properties: | /p: | {PropertyName}={Value} | 指定一個動作 特定屬性的名稱值對;{PropertyName}={Value}。 |
| /Quiet: | /q: | {True|False} | 規定是否會抑制詳細回饋。 預設為 False。 |
| /SourceFile: | /sf: | {string} | 指定一個原始碼檔案作為本地儲存動作的來源。 若使用此參數,則其他來源參數皆無效。 |
| /TargetConnectionString: | /tcs: | {string} | 指定一個有效的 SQL Server/Azure 連接字串 到目標資料庫。 若指定此參數,則應專用於所有其他目標參數。 |
| /TargetDatabaseName: | /tdn: | {string} | 指定 SqlPackage 動作中目標資料庫名稱的覆寫。 |
| /TargetEncryptConnection: | /tec: | {Optional|Mandatory|Strict|True|False} | 規定是否應對目標資料庫連線使用 SQL 加密。 預設值為 True。 |
| /TargetHostNameInCertificate: | /thnic: | {string} | 指定用於驗證目標 SQL Server TLS/SSL 憑證的值,當通訊層以 TLS 加密時。 |
| /TargetPassword: | /tp: | {string} | 針對 SQL Server 認證情境,定義用於存取目標資料庫的密碼。 |
| /TargetServerName: | /tsn: | {string} | 定義了託管目標資料庫的伺服器名稱。 |
| /TargetTimeout: | /tt: | {int} | 指定與目標資料庫建立連線的逾時時間,以秒為單位。 對於 Microsoft Entra ID,建議此值大於或等於 30 秒。 |
| /TargetTrustServerCertificate: | /ttsc: | {True|False} | 規定是否使用 TLS 加密目標資料庫連線,並繞過憑證鏈以驗證信任。 預設值為 False。 |
| /TargetUser: | /tu: | {string} | 對於 SQL Server 認證情境,定義了用於存取目標資料庫的 SQL Server 使用者。 |
| /TenantId: | /tid: | {string} | 代表 Microsoft Entra 租戶 ID 或網域名稱。 此選項是支援訪客或匯入的 Microsoft Entra 使用者,以及 Microsoft 帳號如 outlook.com、hotmail.com 或 live.com 所需的。 若未包含此參數,則會使用 Microsoft Entra ID 的預設租戶 ID,前提是已認證的使用者是該 AD 的原生使用者。 然而,在此情況下,任何以 Microsoft Entra ID 託管的訪客或匯入使用者及/或 Microsoft 帳號都不被支援,操作將失敗。 欲了解更多資訊,請參閱 SQL 資料庫與 Azure Synapse Analytics 的通用認證(支援 MFA 的 SSMS)。 |
| /ThreadMaxStackSize: | /tmss: | {int} | 指定執行 SqlPackage 動作執行緒的最大大小(以 megabytes 為單位)。 此選項僅在解析超大型 Transact-SQL 語句時遇到堆疊溢位異常時使用。 |
| /UniversalAuthentication: | /ua: | {True|False} | 規定是否應使用通用驗證。 當設定為 True(True)時,互動式認證協定會啟動,支援多重身份驗證(MFA)。 此選項亦可用於 Microsoft Entra 認證,無需多重認證,透過互動式協定,使用者須輸入其使用者名稱和密碼,或以整合驗證(Windows 憑證)進行驗證。 當 /UniversalAuthentication 設為 True(True)時,SourceConnectionString(/scs)中無法指定 Microsoft Entra 認證。 當 /UniversalAuthentication 被設定為 False 時,必須在 SourceConnectionString(/scs)中指定 Microsoft Entra 認證。 欲了解更多資訊,請參閱 SQL 資料庫與 Azure Synapse Analytics 的通用認證(支援 MFA 的 SSMS)。 |
匯入動作的特性
| Property | Value | Description |
|---|---|---|
| /p: | CommandTimeout=(INT32 '60') | 在對 SQL Server 執行查詢時,指定指令逾時(秒數)。 |
| /p: | DatabaseEdition=({ 基本 | 標準版 | 高級版 | DataWarehouse | 一般用途 | 商業重要 | 超大規模 | 預設 } 「預設」) | 定義 Azure SQL 資料庫的版本。 請參閱 Azure SQL Database 服務層級。 |
| /p: | DatabaseLockTimeout=(INT32 '60') | 在執行 SQLServer 查詢時,指定資料庫鎖定逾時時間(秒數)。 用 -1 無限期等待。 |
| /p: | DatabaseMaximumSize=(INT32 '0') | 定義了 Azure SQL 資料庫的最大 GB 大小。 |
| /p: | DatabaseServiceObjective=(STRING) | 定義 Azure SQL 資料庫(如「P0」或「S1」)的效能等級。 |
| /p: | DisableIndexesForDataPhase=(BOOLEAN 'True') | 當 true(預設值)時,會在匯入資料前停用索引。 若為錯誤,索引則不會重建。 |
| /p: | DisableParallelismForEnablingIndexes=(布林值 'False') | 在匯入資料到 SQL Server 時,重建索引時沒有使用平行運算。 |
| /p: | HashObjectNamesInLogs=(Boolean 'False') | 指定是否將日誌中所有物件名稱替換為隨機雜湊值。 |
| /p: | ImportContributorArguments=(STRING) | 指定部署貢獻者的參數設定。 此屬性應為分號分隔的值列表。 |
| /p: | ImportContributorPaths=(STRING) | 指定載入額外匯入貢獻者的路徑。 此屬性應為分號分隔的值列表。 |
| /p: | ImportContributors=(STRING) | 指定部署貢獻者,該貢獻者應在 bacpac 匯入時執行。 這個屬性應該是用分號分隔的清單,列出完全限定的建置貢獻者的名稱或 ID。 |
| /p: | LongRunningCommandTimeout=(INT32 '0') | 在對 SQL Server 執行查詢時,指定長時間執行的命令逾時秒數。 用 0 無限期等待。 |
| /p: | PreserveIdentityLastValues=(BOOLEAN 'False') | 規定在部署期間是否應保留身份欄位的最後一個值。 |
| /p: | RebuildIndexesOfflineForDataPhase=(BOOLEAN 'False') | 當為真時,會在將資料匯入 SQL Server 後離線重建索引。 |
| /p: | Storage=({File|Memory}) | 規範建置資料庫模型時元素的儲存方式。 出於效能考量,預設是 InMemory。 對於大型資料庫,則需要檔案備份儲存。 |
後續步驟
- 了解更多關於 SqlPackage 的資訊
- 使用 SqlPackage 進行故障排除
- 從 Azure Blob 存儲導入