如何通过Azure PowerShell或GitHub Action创建Azure Synapse专用SQL池还原点或bacpac文件
解决Azure Synapse专用SQL池导出.bacpac文件的问题
问题根源
Azure Synapse专用SQL池(原SQL数据仓库)和Azure SQL数据库的PowerShell cmdlet并不完全兼容,New-AzSqlDatabaseRestorePoint、New-AzSqlDatabaseExport这类针对SQL DB的命令没法适配Synapse的服务器端点,而且不支持自定义连接字符串,哪怕微软文档里写了操作步骤一致,实际跑起来就是不行。
可行解决方案
方案1:用Az.Synapse模块创建恢复点(配合后续导出)
如果需要先创建手动恢复点,再基于恢复点导出,可以用Synapse专属的PowerShell模块:
- 先安装/更新模块:
Install-Module -Name Az.Synapse -Force -AllowClobber - 创建恢复点:
New-AzSynapseSqlPoolRestorePoint -ResourceGroupName "你的资源组" -WorkspaceName "你的Synapse工作区名" -Name "专用SQL池名称" -RestorePointLabel "预部署备份_$(Get-Date -Format 'yyyyMMddHHmm')"
方案2:用SQLPackage工具导出bacpac(推荐)
SQLPackage是微软官方工具,完美支持Synapse专用SQL池,还能灵活配置连接字符串,比PowerShell cmdlet靠谱多了:
- 先确保runner环境里装了SQLPackage(GitHub-hosted runner可能自带,没有的话可以在工作流里加步骤自动下载安装)
- 执行导出命令:
连接字符串可以根据你的认证方式调整,比如用SQL账号、Azure AD托管身份都行。sqlpackage.exe /Action:Export ` /SourceConnectionString:"Server=tcp://<你的Synapse工作区名>.sql.azuresynapse.net,1433;Database=<专用SQL池名>;Authentication=Active Directory Service Principal;UID=<服务主体ID>;PWD=<服务主体密钥>;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30" ` /TargetFile:"$(Build.ArtifactStagingDirectory)/synapse-backup.bacpac" ` /Properties:Storage=File
注意事项
- Synapse的服务器地址格式是
<工作区名>.sql.azuresynapse.net,和SQL DB的<服务器名>.database.windows.net不一样,SQLPackage能正确识别这个端点。 - 如果是在GitHub工作流里用,记得给服务主体分配Synapse专用SQL池的
db_exporter角色,以及存储账户的写入权限(如果要把bacpac直接传到存储账户的话,可以把/TargetFile换成存储账户的SAS URL)。
内容的提问来源于stack exchange,提问作者DevFahim
相关产品推荐
相关产品推荐

