将 DatabaseSpy 连接到云端的 SQL Azure 数据库
在纽奥尔良举行的Tech-Ed会议上,六月份的主题是关于如何简化将微软云数据库SQL Azure引入生产环境的技巧和方法。SQL Azure建立在微软SQL Server技术之上,旨在提供由微软在云端托管的、高可用性和可扩展性的数据库服务。使用SQL Azure部署数据库的开发者无需安装、配置、更新或管理任何关系型数据库软件,只需要管理自己的数据库结构和内容。该服务内置了自动冗余和容错机制,无需进行任何物理层面的管理。
您可以手动配置连接字符串,并使用 SQL Server 的语法和数据类型,将 DatabaseSpy 以及 其他 Altova 工具 连接到 SQL Azure 数据库,从而执行常见的数据库开发和维护任务。 这篇文章介绍了如何使用DatabaseSpy连接到SQL Azure数据库,并演示了在将现有数据库迁移到云端时,您可能需要执行的一些常见操作。 如果您想自行重现这些步骤,您需要一个 Azure SQL 账户,或者由 Azure SQL 账户的持有者为您创建的登录名和密码。 如需了解有关如何设置 SQL Azure 账户的更多信息,请访问微软的 SQL Azure 官方页面。 您还需要安装 SQL Server Native Client 10.0 (或更高版本)。 SQL Azure 的行为与本地 SQL Server 数据库并不完全相同,因此我们无法使用 Altova SQL Server 连接向导。 我们将会使用 ODBC 连接。
![]()
在这里,我们不会详细介绍构建新连接字符串的全部步骤。您可以将现有的连接字符串复制并粘贴到上面显示的对话框中。
连接到 SQL Azure 数据库的第一次连接后,DatabaseSpy 项目文件允许您保存所有连接设置,以及常用的 SQL 脚本、数据库设计文件和数据库比较结果,并将它们以方便的方式打包,以便稍后重新加载。下图显示了一个新的 DatabaseSpy 项目,它同时连接了两个数据库:一个是在 MySQL 中的 Sakila 数据库,另一个是在 SQL Azure 云中的 Sakila 数据库。
![]()
微软提供多种转换工具,帮助用户将现有数据库迁移到 SQL Azure 平台。我们使用 Microsoft 的 SQL Server 迁移助手 (用于 MySQL),将本地的 MySQL Sakila 示例数据库转换为我们的 SQL Azure 账户。DatabaseSpy 允许用户同时打开多个连接,甚至可以连接到不同类型的数据库。DatabaseSpy 的数据库比较功能使其成为检查 Sakila 转换结果的理想工具。首先,我们将打开一个数据库模式比较,并在比较的左侧选择几个来自 MySQL 数据库的表。
![]()
在从 Azure SQL 版本中选择相应的表之后,这些表将会在一个数据库模式比较窗口中打开。
![]()
当我们点击窗口左上角绿色“比较”按钮时,DatabaseSpy 会比较数据库结构,突出显示差异,并在消息窗口中生成一份摘要。
![]()
某些差异反映了不同数据库之间的数据类型定义的不同。例如,MySQL中的“unsigned small int”类型在SQL Server中没有完全对应的类型,因此转换工具将“film”表中“film_id”列的数据类型替换为“int”类型。此外,MySQL中“release_year”列的数据类型为“year”,而在SQL Azure中已转换为“smallint”。我认为,这会使SQL Azure版本的数据库具有更好的兼容性,因为它能够存储到32767年的电影信息,而MySQL中“year”类型的数据类型最大值为2155年!我们可以通过右键单击上下文菜单中的选项,在新的数据比较窗口中打开选定的表,从而比较两个数据库中的数据。
![]()
数据对比显示,这些表格的内容并不完全相同。
![]()
当我们打开结果窗口时,我们会发现“描述”列的数据未能成功迁移。
![]()
回顾一下“数据库模式比较”窗口,我们可以看到“描述”列的长度被设置为零。这解释了在“结果”窗口中,从 MySQL 中的“描述”列指向 SQL Azure 中“描述”列的红色箭头。我们无法将任何文本字符串复制到长度为零的列中。 接下来,让我们在新的“设计”窗口中打开 SQL Azure 版本的“电影”表。
![]()
我们可以增大“属性”窗口中描述字段的尺寸,然后运行相应的修改脚本。
![]()
![]()
接下来,当我们再次进行数据对比时,我们发现数据已经被转换,但之前定义的字段长度为零,导致这些数据变得不可见。
![]()
延迟问题 您可以使用 DatabaseSpy 来分析云数据库与本地副本之间的延迟问题。正如我们在上面的数据对比中看到的那样,两个数据库中的影片表都包含 1000 行相同的数据。我们可以反复执行 SELECT 语句,从 SQL Azure 和本地 MySQL 数据库中检索数据,并测量结果的执行时间。DatabaseSpy SQL 编辑器的消息窗口会显示执行时间。
![]()
在 SQL Azure 版本的 sakila 数据库上,连续执行上述 SELECT 语句五次,结果范围从 60.632 秒到 63.851 秒。而在本地的 MySQL 数据库中,对同一张电影表执行相同的 SELECT 语句,结果如下:
![]()
对本地版本进行重复测试,结果显示时间相近。对于开发者而言,这意味着您的基于数据库的应用在迁移到云端时,很可能需要考虑延迟问题。您可以尝试使用Altova DatabaseSpy的免费试用版,测试您与SQL Azure的连接。