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') 指定是否应验证提取的架构模型。

后续步骤