【问题标题】:How can I programmatically import a .bacpac file into an on-premises SQL Server instance?如何以编程方式将 .bacpac 文件导入本地 SQL Server 实例?
【发布时间】:2022-12-16 06:03:32
【问题描述】:

我正在开展一个项目,该项目在 Microsoft Azure 中托管多项服务,包括他们自己的数据库,即 Azure SQL 数据库。开发发生在使用 Docker Compose 的开发人员笔记本电脑上,包括使用 mcr.microsoft.com/mssql/server:2022-latest docker 映像的数据库服务器。

手头的任务是使用 PowerShell 创建一个脚本化解决方案,它可以手动将备份导入 Azure SQL 数据库和在 Docker 中运行的 SQL Server。通过这种方式,我们希望导出和版本化不同的测试数据集,在某些情况下我们希望在部署后将其导入到 Azure 环境中,或者使用它来为本地开发创建数据基线。

尽管这两个数据库都是 Microsoft SQL Server,they are different products 是为不同的环境和不同的支持功能集从相同的代码库构建的。 (在 Azure 门户中截取的屏幕截图)

Azure SQL 数据库不适用于 *.bak 文件,保留 *.bacpac 格式,这是在 Azure SQL 数据库中手动导出的推荐解决方案(请参阅 here)。使用 New-AzSqlDatabaseImport Command 导入另一个 Azure SQL 数据库非常简单。 到目前为止我一直找不到的是一种以编程方式将 *.bacpac 作为 PowerShell 脚本的一部分导入我在 Docker 中的 SQL Server 的方法。

并非所有开发人员都使用 Windows 机器,因此需要跨平台或在 Docker 容器内的解决方案。

我努力了:

  • 使用 T-SQL 命令 RESTORE DATABASE,它不起作用,因为它需要一个 *.bak 文件
  • 按照this article的第6步所述使用sqlpackage实用程序,但在容器中找不到该实用程序(starting container process caused: exec: "/opt/mssql/bin/sqlpackage": stat /opt/mssql/bin/sqlpackage: no such file or directory: unknown)

到目前为止,我发现导入 *.bacpac 文件的唯一方法是使用 SSMS 手动导入数据层应用程序向导,但不能以任何方式在 PowerShell 脚本中使用。

我真的真的希望继续使用备份文件解决方案并避免将我的数据库导出到 T-SQL 脚本。任何帮助表示赞赏。

【问题讨论】:

  • “但是在容器中找不到该实用程序”-当然。但是你可以创建一个容器有它。我在网络上搜索了“sqlpackage docker”,找到了现成的容器和 docker 文件规范,您应该可以使用它们来创建自己的容器并满足您的需要。

标签: sql-server powershell docker-compose azure-sql-database bacpac


【解决方案1】:

上面的评论是正确的——您可以通过将 sqlpackage 添加到您的 Docker 容器来完成此操作。

我有一个Github project to convert .bak to .bacpac,我建了一个Docker container with SQL Server and sqlpackage

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多