SqlPackage 导入参数和属性
SqlPackage 导入操作将架构和表数据从 BACPAC 文件 (.bacpac) 导入 SQL Server 或 Azure SQL 数据库中的新数据库或空白数据库。 对现有数据库执行导入操作时,目标数据库无法包含任何用户定义的架构对象。 如果经过身份验证的用户具有创建数据库权限,也可通过导入操作创建新数据库。 导入操作是 SqlPackage 的数据库可移植性功能的一部分。
注意
虽然 Microsoft Entra ID 是 Azure Active Directory (Azure AD) 的新名称,但为了防止中断现有环境,Azure AD 仍保留在一些硬编码的元素中,例如 UI 字段、连接提供程序、错误代码和 cmdlet。 在本文中,这两个名称可以互换。
注意
对于低于 200GB 的数据库,SqlPackage 导入性能最佳。 对于较大的数据库,建议使用本文中提供的属性和 SqlPackage 故障排除中的提示来优化操作,或者通过 Parquet 文件中的数据实现数据库可移植性。
命令行语法
SqlPackage 使用在命令行上指定的参数、属性和 SQLCMD 变量启动指定的操作。
SqlPackage /Action:Import {parameters} {properties}
必需的参数
导入操作需要一个 SourceFile
参数来指定包含数据库对象和数据的 .bacpac 文件的名称和位置。
导出操作需要一个目标连接,其中 SqlPackage 将创建一个新数据库,或者存在一个空白数据库。 这可以通过以下方法的组合指定:
TargetServerName
和TargetDatabaseName
参数,或者TargetConnectionString
参数。
示例
# 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;"
导入操作的参数
参数 | 缩写 | 值 | 说明 |
---|---|---|---|
/AccessToken: | /at: | {string} | 指定要在连接到目标数据库时使用的基于令牌的身份验证访问令牌。 |
/Action: | /a: | 导入 | 指定要执行的操作。 |
/AzureCloudConfig: | /acc: | {string} | 指定用于连接到 Microsoft Entra ID 的自定义终结点,格式为:AzureActiveDirectoryAuthority={value};DatabaseServicePrincipalName={value}"。 |
/Diagnostics: | /d: | {True|False} | 指定诊断日志记录是否输出到控制台。 默认为 False。 |
/DiagnosticsFile: | /df: | {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} | 指定在使用 TLS 加密通信层时用于验证目标 SQL Server TLS/SSL 证书的值。 |
/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 用户以及 outlook.com、hotmail.com 或 live.com 等 Microsoft 帐户的必需选项。 如果省略此参数,将使用 Microsoft Entra ID 的默认租户 ID(假定经过身份验证的用户是此 AD 的本机用户)。 但是,在这种情况下,不支持在此 Microsoft Entra ID 中托管的任何来宾或已导入的用户和/或 Microsoft 帐户,并且操作将失败。 有关详细信息,请参阅 SQL 数据库和 Azure Synapse Analytics 的通用身份验证(SSMS 对 MFA 的支持)。 |
/ThreadMaxStackSize: | /tmss: | {int} | 指定运行 SqlPackage 操作的线程的最大大小(以 MB 为单位)。 仅当遇到分析非常大的 Transact-SQL 语句时出现的堆栈溢出异常时,才应使用此选项。 |
/UniversalAuthentication: | /ua: | {True|False} | 指定是否应使用通用身份验证。 如果设置为 True,则激活交互式身份验证协议以支持 MFA。 此选项还可用于在不使用 MFA 时进行 Microsoft Entra 身份验证,方法是使用需要用户输入用户名和密码或集成身份验证(Windows 凭据)的交互式协议。 如果将 /UniversalAuthentication 设置为 True,则无法在 SourceConnectionString (/scs) 中指定 Microsoft Entra 身份验证。 如果将 /UniversalAuthentication 设置为 False,则必须在 SourceConnectionString (/scs) 中指定 Microsoft Entra 身份验证。 有关详细信息,请参阅 SQL 数据库和 Azure Synapse Analytics 的通用身份验证(SSMS 对 MFA 的支持)。 |
特定于导入操作的属性
属性 | 价值 | 说明 |
---|---|---|
/p: | CommandTimeout=(INT32 '60') | 指定针对 SQL Server 执行查询时的命令超时(以秒为单位)。 |
/p: | DatabaseEdition=({ Basic | Standard | Premium | DataWarehouse | GeneralPurpose | BusinessCritical | Hyperscale | Default } 'Default') | 定义 Azure SQL 数据库的版本。 请参阅 Azure SQL 数据库服务层级。 |
/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(默认值)时,则先禁用索引,然后再导入数据。 为 false 时,索引不会重新生成。 |
/p: | DisableParallelismForEnablingIndexes=(BOOLEAN 'False') | 将数据导入 SQL Server 时,在重新生成索引时不使用平行度。 |
/p: | HashObjectNamesInLogs=(BOOLEAN 'False') | 指定是否用随机哈希值替换日志中的所有对象名称。 |
/p: | ImportContributorArguments=(STRING) | 为部署参与者指定部署参与者参数。 此属性应该是用分号分隔的值列表。 |
/p: | ImportContributorPaths=(STRING) | 指定用于加载其他导入参与者的路径。 此属性应该是用分号分隔的值列表。 |
/p: | ImportContributors=(STRING) | 指定应在导入 dacpac 时运行的部署参与者。 此属性应该是以分号分隔的完全限定的生成参与者名称或 ID 列表。 |
/p: | LongRunningCommandTimeout=(INT32 '0') | 指定针对 SQL Server 执行查询时的长时间运行命令超时(以秒为单位)。 使用 0 表示无限期等待。 |
/p: | PreserveIdentityLastValues=(BOOLEAN 'False') | 指定在部署期间是否应保留标识列的最后值。 |
/p: | RebuildIndexesOfflineForDataPhase=(BOOLEAN 'False') | 为 true 时,在将数据导入 SQL Server 后脱机重新生成索引。 |
/p: | Storage=({File|Memory}) | 指定在生成数据库模型时如何存储元素。 出于性能原因,默认值为 InMemory。 对于大型数据库,需要备份了文件的存储。 |
后续步骤
- 了解有关 SqlPackage 的详细信息
- 使用 SqlPackage 进行故障排除
- 从 Azure Blob 存储导入