SqlPackage 提取的参数和属性
SqlPackage 提取操作会在 DACPAC 文件 (.dacpac) 中创建连接的数据库的架构。 默认情况下,.dacpac 文件中不包含数据。 若要包括数据,请使用导出操作或使用 Extract 属性 ExtractAllTableData/TableData 。
注意
虽然 Microsoft Entra ID 是 Azure Active Directory (Azure AD) 的新名称,但为了防止中断现有环境,Azure AD 仍保留在一些硬编码的元素中,例如 UI 字段、连接提供程序、错误代码和 cmdlet。 在本文中,这两个名称可以互换。
命令行语法
SqlPackage 使用在命令行上指定的参数、属性和 SQLCMD 变量启动指定的操作。
SqlPackage /Action:Extract {parameters} {properties}
注意
提取具有密码凭证(例如 SQL 身份验证用户)的数据库时,密码将替换为具有合适复杂性的不同密码。 SqlPackage 或 DacFx 用户应在 dacpac 发布后更改密码。
示例
# example extract to create a schema-only .dacpac file connecting using SQL authentication
SqlPackage /Action:Extract /TargetFile:{filename}.dacpac /DiagnosticsFile:{logFile}.log /p:ExtractAllTableData=false /p:VerifyExtraction=true \
/SourceServerName:{serverFQDN} /SourceDatabaseName:{databaseName} /SourceUser:{username} /SourcePassword:{password}
# example extract to create a .sql file containing the schema definition of the database
SqlPackage /Action:Extract /TargetFile:{filename}.dacpac /DiagnosticsFile:{logFile}.log /SourceServerName:{serverFQDN} \
/SourceDatabaseName:{databaseName} /SourceUser:{username} /SourcePassword:{password} /p:ExtractTarget=File
# example extract to create a .dacpac file with data connecting using SQL authentication
SqlPackage /Action:Extract /TargetFile:{filename}.dacpac /DiagnosticsFile:{logFile}.log /p:ExtractAllTableData=true /p:VerifyExtraction=true \
/SourceServerName:{serverFQDN} /SourceDatabaseName:{databaseName} /SourceUser:{username} /SourcePassword:{password}
# example extract to create a schema-only .dacpac file connecting using Microsoft Entra managed identity
SqlPackage /Action:Extract /TargetFile:"C:\AdventureWorksLT.dacpac" \
/SourceConnectionString:"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 extract to create a schema-only .dacpac file connecting using Microsoft Entra username and password
SqlPackage /Action:Extract /TargetFile:"C:\AdventureWorksLT.dacpac" \
/SourceConnectionString:"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 extract to create a schema-only .dacpac file connecting using Microsoft Entra universal authentication
SqlPackage /Action:Extract /TargetFile:"C:\AdventureWorksLT.dacpac" /UniversalAuthentication:True \
/SourceConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
# example extract to create a schema-only .dacpac file connecting using an access token associated with a service principal
$Account = Connect-AzAccount -ServicePrincipal -Tenant $Tenant -Credential $Credential
$AccessToken_Object = (Get-AzAccessToken -Account $Account -Resource "https://database.windows.net/")
$AccessToken = $AccessToken_Object.Token
SqlPackage /at:$AccessToken /Action:Extract /TargetFile:"C:\AdventureWorksLT.dacpac" \
/SourceConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
# OR
SqlPackage /at:$($AccessToken_Object.Token) /Action:Extract /TargetFile:"C:\AdventureWorksLT.dacpac" \
/SourceConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
提取操作的参数
参数 | 缩写 | 值 | 说明 |
---|---|---|---|
/AccessToken: | /at: | {string} | 指定要在连接到目标数据库时使用的基于令牌的身份验证访问令牌。 |
/Action: | /a: | Extract | 指定要执行的操作。 |
/AzureCloudConfig: | /acc: | {string} | 指定用于连接到 Microsoft Entra ID 的自定义终结点,格式为:AzureActiveDirectoryAuthority={value};DatabaseServicePrincipalName={value}"。 |
/Diagnostics: | /d: | {True|False} | 指定诊断日志记录是否输出到控制台。 默认为 False。 |
/DiagnosticsFile: | /df: | {string} | 指定一个用于存储诊断日志的文件。 |
/MaxParallelism: | /mp: | {int} | 指定针对数据库运行的并发操作的并行度。 默认值为 8。 |
/OverwriteFiles: | /of: | {True|False} | 指定 SqlPackage 是否应覆盖现有文件。 指定 false 会导致 SqlPackage 在遇到现有文件时中断操作。 默认值为 True。 |
/Properties: | /p: | {PropertyName}={Value} | 为特定于操作的属性指定名称值对;{PropertyName}={Value}。 |
/Quiet: | /q: | {True|False} | 指定是否隐藏详细反馈。 默认为 False。 |
/SourceConnectionString: | /scs: | {string} | 指定源数据库的有效 SQL Server/Azure 连接字符串。 如果指定了此参数,则应该独立于所有其他源参数来使用此参数。 |
/SourceDatabaseName: | /sdn: | {string} | 定义源数据库的名称。 |
/SourceEncryptConnection: | /sec: | {Optional|Mandatory|Strict|True|False} | 指定是否应该将 SQL 加密用于源数据库连接。 默认值为 True。 |
/SourceHostNameInCertificate: | /shnic: | {string} | 指定在使用 TLS 加密通信层时用于验证源 SQL Server TLS/SSL 证书的值。 |
/SourcePassword: | /sp: | {string} | 对于 SQL Server 身份验证方案,定义要用于访问源数据库的密码。 |
/SourceServerName: | /ssn: | {string} | 定义承载源数据库的服务器的名称。 |
/SourceTimeout: | /st: | {int} | 指定建立与源数据库的连接的超时时间(以秒为单位)。 |
/SourceTrustServerCertificate: | /stsc: | {True|False} | 指定是否使用 TLS 对源数据库连接进行加密,并绕过证书链来验证信任。 默认值为 False。 |
/SourceUser: | /su: | {string} | 对于 SQL Server 身份验证方案,定义要用于访问源数据库的 SQL Server 用户。 |
/TargetFile: | /tf: | {string} | 指定本地存储中要用作操作(而不是数据库)目标的目标文件(即 .dacpac 文件)。 如果使用此参数,则其他目标参数应无效。 对于仅支持数据库目标的操作,此参数应该无效。 |
/TenantId: | /tid: | {string} | 表示 Microsoft Entra 租户 ID 或域名。 此选项是支持来宾用户或已导入的 Microsoft Entra 用户以及 outlook.com、hotmail.com 或 live.com 等 Microsoft 帐户的必需选项。 如果省略此参数,将使用 Microsoft Entra ID 的默认租户 ID(假定经过身份验证的用户是此租户的本机用户)。 但是,在这种情况下,不支持在此 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 的支持)。 |
特定于 Extract 操作的属性
properties | 价值 | 说明 |
---|---|---|
/p: | AzureSharedAccessSignatureToken=(STRING) | Azure 共享访问签名 (SAS) 令牌。 请参阅 SqlPackage for Azure Synapse Analytics 和带有 Parquet 文件中数据的 SqlPackage。 |
/p: | AzureStorageBlobEndpoint=(STRING) | Azure Blob 存储终结点。 请参阅 SqlPackage for Azure Synapse Analytics 和带有 Parquet 文件中数据的 SqlPackage。 |
/p: | AzureStorageContainer=(STRING) | Azure Blob 存储容器。 请参阅 SqlPackage for Azure Synapse Analytics 和带有 Parquet 文件中数据的 SqlPackage。 |
/p: | AzureStorageKey=(STRING) | Azure 存储帐户密钥。 请参阅 SqlPackage for Azure Synapse Analytics 和带有 Parquet 文件中数据的 SqlPackage。 |
/p: | AzureStorageRootPath=(STRING) | 容器中的存储根路径。 如果没有此属性,路径将默认为 servername/databasename/timestamp/ 。 请参阅 SqlPackage for Azure Synapse Analytics 和带有 Parquet 文件中数据的 SqlPackage。 |
/p: | CommandTimeout=(INT32 '60') | 指定针对 SQL Server 执行查询时的命令超时(以秒为单位)。 |
/p: | CompressionOption=({Normal|Maximum|Fast|SuperFast|NotCompressed} 'Normal') | 指定压缩类型。 |
/p: | DacApplicationDescription=(STRING) | 定义要存储在 DACPAC 元数据中的应用程序说明。 |
/p: | DacApplicationName=(STRING) | 定义要存储在 DACPAC 元数据中的应用程序名称。 默认值为数据库名称。 |
/p: | DacMajorVersion=(INT32 '1') | 定义要在 DACPAC 元数据中存储的主版本。 |
/p: | DacMinorVersion=(INT32 '0') | 定义要在 DACPAC 元数据中存储的次版本。 |
/p: | DatabaseLockTimeout=(INT32 '60') | 指定针对 SQLServer 执行查询时的数据库锁超时(以秒为单位)。 使用 -1 表示无限期等待。 |
/p: | ExtractAllTableData=(BOOLEAN 'False') | 指示是否提取所有用户表中的数据。 如果为“true”,则提取所有用户表中的数据,并且不能指定单个用户表来提取数据。 如果设置为“false”,则指定要从中提取数据的一个或多个用户表。 |
/p: | ExtractApplicationScopedObjectsOnly=(BOOLEAN 'True') | 如果为 true,则只为指定的源提取应用程序范围的对象。 如果为 false,则为指定的源提取所有对象。 |
/p: | ExtractReferencedServerScopedElements=(BOOLEAN 'True') | 如果为 true,则提取源数据库对象所引用的登录对象、服务器审核对象和凭据对象。 |
/p: | ExtractTarget=({DacPac|File|Flat|ObjectType|Schema|SchemaObjectType} 'DacPac') | 指定数据库架构的替代输出格式,默认为“DacPac”以输出 .dacpac 单一文件。 其他选项输出一个或多个 .sql 文件,这些文件由“SchemaObjectType”(每个架构和对象类型的文件夹中的文件)、“Schema”(每个架构的文件夹中的文件)、“ObjectType”(每个对象类型的文件夹中的文件)、“Flat”(同一文件夹中的所有文件)或“File”(1 个单一文件)组织。 |
/p: | ExtractUsageProperties=(BOOLEAN 'False') | 指定了使用情况属性,例如表行数和索引大小,是否将从数据库中提取。 |
/p: | HashObjectNamesInLogs=(BOOLEAN 'False') | 指定是否用随机哈希值替换日志中的所有对象名称。 |
/p: | IgnoreExtendedProperties=(BOOLEAN 'False') | 指定是否应忽略扩展属性。 |
/p: | IgnorePermissions=(BOOLEAN 'True') | 指定是否应忽略权限。 |
/p: | IgnoreUserLoginMappings=(BOOLEAN 'False') | 指定是否忽略用户和登录名之间的关系。 |
/p: | LongRunningCommandTimeout=(INT32 '0') | 指定针对 SQL Server 执行查询时的长时间运行命令超时(以秒为单位)。 使用 0 表示无限期等待。 |
/p: | Storage=({File|Memory}) | 指定在提取过程中使用的架构模型的后备存储的类型。 “Memory”是 SqlPackage 的 .NET Core 版本的默认值。 “File”仅可用作 SqlPackage 的 .NET Framework 版本的默认值。 |
/p: | TableData=(STRING) | 指示将从中提取数据的表。 请按以下格式指定表名,不一定要使用括号来括住名称部分:schema_name.table_identifier。 可以多次指定此属性以指示多个选项。 适用于提取到 .dacpac 和 Parquet 文件的数据。 |
/p: | TempDirectoryForTableData=(STRING) | 指定用于在将表数据写入包文件前缓冲表数据的临时目录。 |
/p: | VerifyExtraction=(BOOLEAN 'False') | 指定是否应验证提取的架构模型。 |
后续步骤
- 了解有关 SqlPackage 的详细信息
- 使用 SqlPackage 进行故障排除