如何在SQL Server Amazon RDS实例上重命名数据库?

尝试通过SQL Server Management Studio和Transact SQL重命名SQL Server Amazon RDS实例上承载的数据库会导致以下错误。

用户没有更改数据库“晨星”的权限,数据库不存在,或数据库未处于允许访问检查的状态。

请注意,这是我尝试的Transact SQL语句。

ALTER DATABASE <OldName> Modify Name = <NewName>; 

到目前为止,最好的select是用新名称恢复原始数据库的副本,然后删除原始数据库。 请参阅我的StackOverflow文章以了解如何执行此操作的详细信息。

这种方法至less有以下缺点。

  1. 一个bacpac的进出口业务可能需要很长时间。
  2. 执行写入数据库的任何应用程序或网站都需要在整个过程中脱机。
  3. 有涉及手动步骤,可能会导致错误。
  4. RDS实例将需要足够大以承载数据库的两个副本,如果要将原始数据保留为回滚策略,直到新数据库可用。

任何人都可以build议一个替代方法,不具有这些缺点?

更新:我有兴趣重命名RDS实例中的SQL Server数据库 – 而不是RDS实例。

RDS最近添加了一个存储过程来完成这个任务:

 EXEC rdsadmin.dbo.rds_modify_db_name N'<OldName>', N'<NewName>' 

来源: http : //docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.html#Appendix.SQLServer.CommonDBATasks.RenamingDB

AWS在我打开的情况下提供了以下信息(释义)。

虽然master用户是db_owner数据库angular色的成员,但数据库重命名需要在master数据库中的sys.sysdbreg中进行更改。 db_ownerangular色中的成员身份不提供此权限。

我在我的问题中描述的解决方法是他们会推荐的方法。 我已经要求确认没有比在我的StackOverflow文章中描述的方法复制数据库更简单的方法。

  1. 连接到RDS MSSQL服务器
  2. 打开新查询窗口作为主。
  3. 复制并粘贴下面的查询。

EXEC rdsadmin.dbo.rds_modify_db_name N'OLD Database name', N'New Database Name' GO

  1. 将“OLD数据库名称”更改为现有的数据库名称。
  2. 将“新build数据库名称”更改为要提供给数据库的名称。

资料来源: http : //mytecksolution.blogspot.com/2017/09/rds-mssql-database-name-change-or-rename.html