我在RDS上运行了一个小的(几百MB)SQL Server数据库。我花了几个小时试图将它的副本复制到我的本地SQL Server 2014实例上。以下所有都失败了。任何想法可能有用吗?
Task -> Backup
失败,因为它没有授予我的管理员帐户备份到本地驱动器的权限。
Copy Database
的创建包期间, While trying to find a folder on SQL an OLE DB error was encountered with error code 0x80040E4D
失败
从SSMS连接到RDS服务器,运行BACKUP DATABASE
。消息BACKUP DATABASE permission denied in database 'MyDB'
失败。即使在为关联用户运行EXEC sp_addrolemember 'db_backupoperator'
之后。
General scripts
生成一个700MB .sql
个文件。在生成无法在本地服务器上安装的似乎合理的sqlcmd -i
和.mdf
文件之后,在.ldf
运行该文件失败了(可能是因为sqlcmd无法完成并解锁它们)。
答案 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天的试用版,看看它的行为方式。