数据库技术   

SQL Server向SQL Azure迁移的三个技巧

时间:2012-04-20 10:32:00

如果决定使用SQL Azure部署数据库,您可能需要将现有SQL Server数据库迁移到新环境。实现成功的 SQL Azure迁移意味着要选择正确的工具,将数据成功加载到SQL Azure,最后评估迁移结果。
SQL Azure迁移工具

SQL Azure迁移主要有三种方法。您可以在SQL Server Management Studio (SSMS)中使用脚本生成与发布脚本向导,或者使用CodePlex免费开源解决方案SQL Azure迁移向导。甚至,还可以使用SQL Azure Data Sync生成模式对象,然后再同步数据。

无论选择何种方法,您都必须考虑一点:SQL Azure不支持SQL Server的全部特性。例如,您无法在SQL Azure中实现用户自定义数据类型或者扩展属性。这些限制不会影响特定迁移方法,但是它们可能会影响您的方法选择。

要将一个SQL Server数据库迁移到SQL Azure,您需要同时迁移模式与数据。毫不意外,模式必须先迁移到SQL Azure数据库,然后才能够将数据复制到数据库。其中一种方法是,在需要迁移数据库的SSMS上生成一个或多个脚本文件,然后使用这些文件创建目标数据库的模式。SSMS包含脚本生成与发布向导,它会自动生成一个可以在SQL Azure数据库上运行的Transact-SQL脚本文件(.sql)。

在运行向导时,您必须设置几个高级选项,保证脚本生成符合SQL Azure标准的模式。例如,现有数据库包含用户定义类型,那么要将Convert UDDTs to Base Types选项设置为True 。这里有关于如何设置脚本选项的详细说明。

如果使用SQL Server 2008 R2,那么向导中有一个高级选项可用于指定SQL Azure作为目标数据库类型,这时许多选项都会预设为支持SQL Azure的配置值。

此外,SQL Server 2008及以上版本支持指定只生成模式脚本、只生成数据脚本或者生成包含两者的脚本。如果包含数据,那么脚本会包含一系列的INSERT语句,它们会将数据插入到目标数据库。

另一个迁移现有数据库的方法是使用CodePlex 的SQL Azure迁移向导。与SQL Server 2008或以上版本的脚本生成与发布向导类似,SQL Azure迁移向导是由开发社区支持,但是不由微软支持。即使是这样,许多用户也曾经成功使用这个工具实现数据库与数据的迁移。

完成这个向导的步骤之后,工具就会生成一个脚本文件,分析文件中的Transact-SQL代码,并且您可以根据SQL Azure标准对代码进行一些必要的修改。然后,您可以在SQL Azure数据库中使用向导运行该脚本,或者手动运行该脚本。注意,脚本分析功能并不能够发现所有的兼容性问题。例如,SQ L Azure规定必须在表中创建聚簇索引,然后才能够插入数据。然而,您仍然可以创建不带索引的表,所以向导的分析无法发现脚本的问题。而您只有在插入数据时才会发现这个问题。

您还可以使用SQL Azure Data Sync进行数据库移植,这是Windows Azure平台提供的一个数据库同步服务。这个服务将创建模式对象和从现有数据库加载数据。您可以选择特定的数据库对象,也可以创建过滤器,只同步一部分的数据。

然而,SQL Azure Data Sync只能够同步兼容SQL Azure标准的数据库对象。例如,如果有一个字段配置为用户自定义数据类型,那么该字段将不会同步,模式也不会包含这些对象。这些无法自动迁移的对象必须在SQL Azure数据库中手工创建。

将数据复制到SQL Azure

除了SQL Server 2008之前版本的脚本生成与分析向导,上面介绍的三种移植方法都支持数据及模式的迁移。然而,即使您使用支持数据迁移的工具,您仍然需要控制将数据加载到目标SQL Azure的时间与方式。例如,如果数据库包含大量的数据,您可能要以并行方式加载大量的数据,或者需要控制批量数据加载的规模。

除了上面提到的移植工具,SQL Server还支持多种SQL Azure数据库的数据加载方法。例如,您可以使用bcp进行批量数据加载。如果使用这种方法,您必须在服务器选项中指定SQL Azure服务器的完整路径,如 -S servername.database.windows.net。此外,您必须指定Azure帐号的用户名与密码。

您还可以使用SQL Server导入与导出向导实现SQL Azure数据库的数据加载。您可以通过SQL Server计算机的Windows开始菜单直接打开向导,或者在SSMS或SSIS中打开向导。完成向导步骤,就可以将数据加载到SQL Azure数据库中。注意,您应该使用.Net Framework Data Provider for SQL Server作为目标数据库。此外,目标数据源是SQL Azure实例的名称,而初始目录是SQL Azure数据库的名称。

如果要对加载操作进行更多的控制,可以使用SSIS创建面向SQL Azure数据库的包。SSIS允许您控制任务执行,从而确定需要加载哪些数据,以及何时加载数据。您还可以创建错误处理机制,解决加载操作可能遇到的故障修复问题。如果一定要使用SSIS,微软推荐在连接管理器或目标组件中使用ADO.NET或ODBC驱动。

评估SQL Azure迁移

最近,微软发布了一个新的实验服务SQL Azure兼容性评估工具。这个服务是免费的,但是您首先要根据所移植的数据库类型生成一个.dacpac文件。要创建这个文件,您必须使用CTP4版SQL Server数据工具。然后,您可以将文件上传到SQL Azure兼容性评估网站。这个服务通常会在60秒内完成分析。然后,您可以检查结果报告,了解出现的兼容性问题。

如果尝试使用这个服务,一定要保证在加载数据时SQL Azure的数据库已经准备就绪。SQL Azure成功移植的关键在于保证数据库模式符合SQL Azure标准。每一个模式移植方法都有相应的优缺点,没有任何一种移植方法是完美的。因此,您必须采取一些额外措施来保证所移植数据库或数据库生成的脚本兼容SQL Azure。不要设想有一种自动化过程能够解决所有问题。是否能够顺利完成一次移植,决定因素在于您自己。

(原文地址:http://www.searchdatabase.com.cn/showcontent_60071.htm)

 

来源:PHPchina

Notice: Constant RUNTIME already defined in /srv/html/srccn/news/config.php on line 15 Notice: Constant ROOTDIR already defined in /srv/html/srccn/news/config.php on line 16 Notice: Constant SITEDIR already defined in /srv/html/srccn/news/config.php on line 17 Notice: Constant DATAURL already defined in /srv/html/srccn/news/config.php on line 20 Notice: Constant VERSION already defined in /srv/html/srccn/news/system/kernel.php on line 17 Notice: Constant COREDIR already defined in /srv/html/srccn/news/system/kernel.php on line 18 Fatal error: require(): Cannot redeclare class mysql in /srv/html/srccn/news/system/kernel.php on line 22