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'
它工作得很好。当我尝试使用此命令进行恢复时(我在暂存 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'
我收到一个错误:消息 50000,级别 16,状态 1,过程 msdb.dbo.rds_restore_database,第 91 行数据库“DBName”已经存在。不允许使用仅区分大小写或重音的两个数据库。选择不同的数据库名称。
我一直在谷歌搜索,似乎无法找到明确的答案。我在暂存 RDS 实例上有几个数据库;我不喜欢每次我想将生产副本带入暂存时都必须创建一个新的 RDS 实例的想法......
如何在无需创建新 RDS 实例的情况下将生产副本恢复到暂存状态?
解决方案
AFAIK - RDS 中没有用于将数据库恢复为现有名称的覆盖选项。
首先执行 drop database 命令,然后执行还原。
USE [master];
GO
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = 'database_name')
BEGIN
ALTER DATABASE [database_name] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [database_name]; END;
GO
EXEC msdb.dbo.rds_restore_database @restore_db_name='database_name',
@s3_arn_to_restore_from= 'arn:aws:s3:::bucket_name/file_name_and_extension';
GO
EXEC msdb.dbo.rds_task_status;
您可以使用最后一条命令检查备份或还原的状态
推荐阅读
- json - JOLT 只获取多个同名数组中的一个数组
- javascript - 在输入上使用 maskmoney 库
- node.js - 向嵌套路由添加渲染参数
- gmail - 使用 inboxSdk 将操作按钮添加到线程列表上方的 gmail 顶部栏
- python - 用一个新窗口替换一个窗口 - Python tkinter
- android - 您将如何使用 Gesture UI 在 Android 上激活 React Native Navigation 抽屉
- flutter - 我在 Flutter 中遇到空参数错误,我该如何解决?
- neo4j - 将一个节点连接到多个 Neo4j
- google-apps-script - 如何使用 Apps 脚本从 Google 幻灯片演示文稿中的表格中删除空列
- excel - 如何将 Excel 单元格值转换为单独的 PNG 文件?