从备份覆盖现有数据库

Jay*_*Tee 8 amazon-rds

我正在尝试将我们的生产数据库的副本带到我们的临时数据库中。它们位于不同的 RDS 实例上。我尝试使用本机 SQL 备份/恢复方法,但不断收到错误消息。
我在生产中运行的代码:

exec msdb.dbo.rds_backup_database @source_db_name='DBName',@s3_arn_to_backup_to=N'arn:aws:s3:::path/to/backup/DBName2019-09-17.bak'
Run Code Online (Sandbox Code Playgroud)

效果很好。当我尝试使用此命令进行恢复时(我在暂存 RDS 实例上运行此命令):

exec msdb.dbo.rds_restore_database @restore_db_name='DBName',@s3_arn_to_restore_from='arn:aws:s3:::path/to/backup/DBName2019-09-17.bak'
Run Code Online (Sandbox Code Playgroud)

我收到错误:消息 50000,级别 16,状态 1,过程 msdb.dbo.rds_restore_database,第 91 行数据库“DBName”已存在。不允许两个仅大小写或重音不同的数据库。选择不同的数据库名称。

我已经用谷歌搜索了一下,似乎找不到明确的答案。我在暂存 RDS 实例上有多个数据库;我不喜欢每次想要将生产副本带入暂存时都必须创建新的 RDS 实例的想法......

如何将生产副本恢复到暂存状态,而无需创建新的 RDS 实例?

Vel*_*gan 5

AFAIK - RDS 中没有用于将数据库恢复到现有名称的覆盖选项。

\n

先执行删除数据库命令,然后再进行恢复。

\n
USE\xc2\xa0[master];\nGO\n\nIF\xc2\xa0EXISTS\xc2\xa0(SELECT\xc2\xa01\xc2\xa0FROM\xc2\xa0sys.databases\xc2\xa0WHERE\xc2\xa0name =\xc2\xa0'database_name')\nBEGIN\nALTER DATABASE\xc2\xa0[database_name]\xc2\xa0\xc2\xa0\xc2\xa0SET\xc2\xa0SINGLE_USER\xc2\xa0WITH ROLLBACK IMMEDIATE;\xc2\xa0\xc2\xa0\nDROP DATABASE\xc2\xa0[database_name];\xc2\xa0END;\n\nGO\n\nEXEC\xc2\xa0msdb.dbo.rds_restore_database\xc2\xa0@restore_db_name='database_name',\xc2\xa0\n@s3_arn_to_restore_from=\xc2\xa0'arn:aws:s3:::bucket_name/file_name_and_extension';\xc2\xa0\nGO\n\nEXEC\xc2\xa0msdb.dbo.rds_task_status;\n
Run Code Online (Sandbox Code Playgroud)\n

您可以使用最后一个命令来检查备份或恢复的状态

\n

  • 一切正常,但使用 rds drop: exec msdb.dbo.rds_drop_database @db_name='database_name'; (2认同)