Sql server 迁移到Amazon SQL Server RDS

Sql server 迁移到Amazon SQL Server RDS,sql-server,amazon-rds,Sql Server,Amazon Rds,我一直在尝试从Win2008服务器上的常规SQL Server转移到Amazon AWS RDS上的SQL Server 我认为一个简单的备份和恢复就可以了。虽然AWS RDS似乎无法访问文件系统,但sql脚本似乎都需要源服务器和目标服务器上的本地文件系统。我尝试了下面的脚本 exec sp_addlinkedserver @server='test.xxxx.us-east-1.rds.amazonaws.com' -- Verify that the servers were linked

我一直在尝试从Win2008服务器上的常规SQL Server转移到Amazon AWS RDS上的SQL Server

我认为一个简单的备份和恢复就可以了。虽然AWS RDS似乎无法访问文件系统,但sql脚本似乎都需要源服务器和目标服务器上的本地文件系统。我尝试了下面的脚本

exec sp_addlinkedserver @server='test.xxxx.us-east-1.rds.amazonaws.com'

-- Verify that the servers were linked (lists linked servers)
exec sp_linkedservers

EXEC ('RESTORE DATABASE [orchard] FROM DISK = ''C:\Temp\orchard.bak'' WITH FILE = 1,  NOUNLOAD, STATS = 10')
AT [test.xxxx.us-east-1.rds.amazonaws.com]

任何建议都会很有帮助。

下面这篇文章讨论了如何用数据复制数据库–生成T-SQL以将数据从一个表插入到另一个表,这是我所需要的


从下载免费的“SQL Azure迁移向导”——我对此做了简短介绍。请确保将向导中的“to”设置设置为AWS DNS名称,然后使用“SQL Server 2008”和“SQL Azure”

在源数据库上使用SQL Server management studio中的导出向导。右键单击数据库>任务>导出数据。有一个向导指导您将整个数据库发送到远程sql server。

我得到的官方消息是,AWS支持使用.bak文件迁移sql数据库,但它不受支持。因此,不再需要从.bak文件进行快速恢复。他们在这里为现有数据库的迁移提供了官方帮助:

另外,我还对Azure数据库迁移工具非正式地眨眼。只需使用它生成模式和/或数据的脚本,并针对RDS实例执行它。这是个好工具。您必须先将.bak导入非RDS SQL server才能执行此操作


我根据Lynn的屏幕广播编写了一些关于使用SQL Azure迁移工具的分步说明。这是一种比官方说明简单得多的方法,它对我迁移的几个数据库都很有效。

您可能会发现BACPAC格式将为您提供最方便的解决方案。可以使用生成同时包含数据库架构和数据的文件。将创建一个新数据库,其中包含基于该文件的数据

与操作相反,导出和导入不需要访问数据库服务器的文件系统

您可以使用SQL Server Management Studio或通过.Net、Powershell、MSBuild等中的API处理BACPAC文件

请注意,使用此方法导出以及从Amazon RDS导入和导入时会出现问题。在RDS上创建新数据库时,将在其中创建以下两个对象

  • 具有db_所有者角色成员身份的用户
  • rds_deny_backups_触发器

在导入过程中,BACPAC文件中包含的对象与RDS自动添加的对象之间存在冲突。这些对象都存在于BACPAC文件中,并在创建新数据库时由RDS自动创建

如果您手边有一个SQL Server的非RDS实例,则可以将BACPAC导入该实例,删除上面的对象,然后导出数据库以创建新的BACPAC文件。当您将它还原到RDS实例时,它不会有任何冲突

否则,可以使用以下步骤解决此问题

  • 在BACPAC文件中编辑model.xml文件(BACPAC只是zip文件)
  • 删除与上面列出的对象(由RDS自动添加的对象)相关的类型属性中具有以下值的元素。
    • SqlRoleMembership
    • SqlPermissionStatement
    • SqlLogin
    • SqlUser
    • SqlDatabaseDdlTrigger
  • 使用类上的一个ComputeHash方法为修改后的model.xml文件生成校验和
  • 使用该方法将哈希转换为十六进制字符串(需要删除分隔符)
  • 用新的哈希替换origin.xml文件(也包含在BACPAC文件中)的Checksum元素中的现有哈希
  • 创建一个新的BACPAC文件,方法是压缩原始文件的内容,同时使用新版本替换model.xml和origin.xml文件。请勿用于此目的,因为似乎与生成的zip文件存在冲突-导入中不包含数据。我使用7Zip没有任何问题
  • 导入新的BACPAC文件,不应该与RDS自动生成的对象有任何冲突

  • 注意:使用SQL Server Management Studio将BacPac导入RDS时还有另一个相关问题,我对此进行了解释。

    AWS设计的一个工具可以回答大多数(如果不是全部)兼容性问题-SQL Server的模式转换工具:

    由于并非所有sql server数据库对象都受RDS支持,甚至在不同的sql server版本中也有所不同,因此评估报告也非常值得您花时间:

    最后,一定要利用数据库迁移服务:

    您只是在传输数据库模式,还是也需要传输数据?Amazon RDS这一事实并没有考虑到这一点。您必须记住,无论何时访问本地文件系统,都是与运行T-SQL的数据库引擎相关的。在本例中,您尝试从Amazon实例的C驱动器还原一个文件。那里不存在那个文件。如果可能的话,把你的文件放在那里,或者放在服务器上,在那里你可以通过UNC访问它。然而,如果RDS不可能做到这一点,我也不会感到惊讶。我想亚马逊不想在他们的文档上链接到这一点,但这是一种比他们建议的(我之前已经浪费了好几个小时)更容易迁移的方式。有人偷偷进入了这个论坛底部的参考资料/抱怨:说清楚,你是说这个工具可以将SQLAzure数据库移动到RDS?事实似乎并非如此。“源”下拉列表仅允许使用SQL Server,并且如果您尝试连接到SQL Server