我在 Azure SQL 数据库弹性池“MyPool”中有两个数据库,名为 db1 和 db2。
我想将 db1 复制到新数据库 db3。
我应该能够做到这一点:
CREATE DATABASE db3 AS COPY OF db1 (SERVICE_OBJECTIVE = ELASTIC_POOL(name = MyPool))
我使用 SQL 登录“dbuser”通过 SSMS 连接到数据库服务器。
当我使用 SSMS 运行它并连接到“master”时,我得到:
没有足够的权限在服务器“mydbserver”上创建数据库副本。确保用户登录“dbuser”在源服务器和目标服务器上具有正确的权限。
根据文档,我应该只需将“dbuser”添加到角色“dbmanager”
它表示:“为了使数据库复制成功,非服务器管理员的登录名必须是 dbmanager 角色的成员。”
所以在“master”中我运行:
ALTER ROLE dbmanager ADD MEMBER dbuser
运行成功。 (我也在db1中尝试过这个,但是dbmanager角色不存在。)
但是 CREATE DATABASE... AS COPY OF... 仍然给出上述错误。
我能做的只是:
CREATE DATABASE db3
它将创建一个空数据库。但添加“AS COPY OF”失败。
我也尝试省略将其添加到池中的子句 - 同样的错误。
我尝试将“dbuser”添加到 db1 上的“db_owner”角色。同样的错误。
需要什么才能让它发挥作用?
一件事是执行 Azure SQL 数据库副本所需的权限,另一件事是将数据库添加到 Azure 弹性池所需的权限。要将数据库添加到弹性池,您可能需要在 Azure 门户上的 IAM 访问控制上进行贡献者角色分配。