获取托管在 Amazon RDS 上的 SQL 服务器的本地副本

Get local copy of SQL Server hosted on Amazon RDS

我在 RDS 上有一个小型(几百 MB)SQL 服务器数据库 运行。我花了几个小时试图将它的副本复制到我的本地 SQL Server 2014 实例中。以下所有失败。有什么可行的想法吗?

  1. Task -> Backup 失败,因为它没有授予我的管理员帐户备份到本地驱动器的权限。

  2. Copy Database 在使用 While trying to find a folder on SQL an OLE DB error was encountered with error code 0x80040E4D

  3. 创建包期间失败
  4. 来自 SSMS,同时连接到 RDS 服务器,运行BACKUP DATABASE。这失败并显示消息 BACKUP DATABASE permission denied in database 'MyDB'。即使在连接用户 运行 EXEC sp_addrolemember 'db_backupoperator' 之后。

  5. General scripts 生成一个 700MB .sql 文件。 运行 使用 sqlcmd -i 在生成无法安装在本地服务器上的合理 .mdf.ldf 文件后的某个时候失败(可能是因为 sqlcmd 未能完成并解锁它们)。

Redgate 的 SQL Compare 和 SQL Data Compare 对于这些类型的东西非常有用。它们并不便宜(但在我看来每一分钱都值得)。但如果这是一次性的事情,您可以使用 14 天的试用版,看看它对您有何影响。

http://www.red-gate.com/products/

SSIS 导入导出向导可以生成一个包来复制一整套 table。 (这不是那种依赖文件的复制数据库功能 - 它为每个 table 创建一个包含数据流组件的包。)

它有点脆弱,但可以正常工作:-)

SSMS 生成脚本功能对于任何大型数据集通常会失败,因为所有数据的脚本都只是 large/verbose。此方法从不编写数据脚本。

看看这个:https://github.com/andrebonna/RDSDump

这是一个C#.NET控制台应用程序,搜索最新的源数据库快照,将其还原到临时RDS实例上,生成BACPAC文件,将其上传到S3并删除临时RDS实例。

您可以将 RDS 快照转换为 BACPAC 文件,该文件可以使用此处回答的功能下载并导入本地 SQL Server 2014 实例 (Azure SQL Database Bacpac Local Restore)

AWS has finally provided a reasonably easy means of doing this:它需要一个 S3 存储桶。

创建名为 rds-bak 的存储桶后,我 运行 在 RDS 实例中使用了以下存储过程:

exec msdb.dbo.rds_backup_database
   @source_db_name='MyDatabase',
   @s3_arn_to_backup_to='arn:aws:s3:::rds-bak/MyDatabase.bak',
   @overwrite_S3_backup_file=1;

以下存储过程returns备份请求的状态:

exec msdb.dbo.rds_task_status @db_name='MyDatabase'

完成后,我从 S3 下载 .bak 文件并使用 SSMS Restore Database... 向导将其导入本地 SQL 服务器实例!