获取托管在Amazon RDS上的SQL Server的本地副本

时间:2015-12-15 03:27:30

标签: sql-server amazon-rds

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

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

  2. 在使用Copy Database

    的创建包期间,
  3. While trying to find a folder on SQL an OLE DB error was encountered with error code 0x80040E4D失败

  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无法完成并解锁它们)。

4 个答案:

答案 0 :(得分:2)

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;

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

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

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

答案 1 :(得分:1)

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

它有些脆弱,但可以起作用: - )

SSMS生成脚本功能通常会因任何大型数据集而失败,因为所有数据的脚本只是大/冗长。这种方法永远不会编写数据。

答案 2 :(得分:1)

检查出来:https://github.com/andrebonna/RDSDump

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

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

答案 3 :(得分:0)

Redgate的SQL Compare和SQL Data Compare对于这些类型的东西非常宝贵。它们并不便宜(但值得每一分钱)。但如果这是一次性的事情,您可以使用14天的试用版,看看它的行为方式。

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