与 SQL Azure 的数据库集成






4.33/5 (7投票s)
本文将帮助您将数据库从 SQL Server 迁移到 SQL Azure,以增强已部署在 Azure 云上的应用程序的性能。
引言
我们可以使用 SQLAzureMW 工具(SQL Azure 插件)将我们的数据库与 SQL Azure 集成,该插件用于将数据库从我们的本地数据库迁移到 Windows Azure 云。
Windows Azure SQL 数据库不支持 SQL Server 中的所有功能和数据类型。目前,Windows Azure 平台上未提供分析服务、复制和服务代理等服务。
Windows Azure SQL 数据库执行物理管理,任何试图直接操作物理资源的语句和选项都将被阻止,例如资源调控器、文件组引用和一些物理服务器 DDL 语句。 也不可能设置服务器选项和 SQL 跟踪标志,或者使用 SQL Server Profiler 或数据库优化顾问实用程序。
最初,我们所做的是尝试为我们的示例数据库(即 PhoenixDb
)生成 SQL 脚本,这些脚本来自 SQL Server Management Studio 中的任务选项。 在那里,我们有为 SQL Azure 生成脚本的选项。
但是,我们在 SQL Azure 中运行该 SQL 文件时遇到的问题是,这些表具有非聚集索引。 因此,在将数据插入到这些表中时出现了问题。
因此,结果是我们在 SQL Azure 中准备好了表结构以及过程,但 SQL Azure 数据库中仍然没有数据。
因此,我们决定采用一种新的方法来在 SQL Azure 上生成数据库的副本。
以下是我们遵循的一组步骤。
步骤 1:转到 SQLAzureMW.exe 文件,然后出现以下窗口

选择“分析/迁移”选项,然后单击“下一步”。
步骤 2:现在,在此步骤中,您需要连接到数据库服务器,该服务器当前驻留着您的数据库,例如,在我们的例子中,它将位于沙盒服务器中。

步骤 3:连接服务器后,我们需要选择要复制到 SQL Azure 的数据库,在我们的例子中,它是 PhoenixSample
,然后单击“下一步”。
步骤 4:之后,它将要求用户选择要为脚本生成哪些数据库对象的选项。您可以选择所有表和过程,或者选择其中的一部分。
同时,您可以在窗口底部的“高级”选项卡上单击以根据您的需要设置设置。您可以在那里看到目标服务器是 SQL Azure。

步骤 5:现在将弹出一个窗口,您需要查看您选择的所有要编写脚本的目标数据库对象。 查看完您选择的数据库对象后,单击“下一步”。

步骤 6:现在您将看到脚本生成过程已经开始。 因此,您可以在结果摘要窗口中看到两个选项卡,一个是“结果”选项卡,另一个是“脚本”选项卡。

生成脚本后,将显示以下屏幕

步骤 7:现在,生成脚本后,您需要设置目标 SQL Azure 服务器,这些生成的脚本需要在该服务器上运行。
在这里,您需要提及以下内容
- 服务器名称(它应采用以下格式:ServerName.database.windows.net)
- 用户名(它应采用以下格式:Username@ServerName)
- 目标数据库
您应该已经从同一个名称的 Azure 管理门户创建了数据库。
步骤 8:单击“连接”继续。您将进入一个新页面,该页面将询问您是否需要在目标服务器上运行脚本。 单击“是”后,脚本将自动在 SQL Azure 服务器上执行。
完成此操作后,您需要验证目标 SQL Azure 服务器中是否包含所有数据。
验证目标 SQL Azure 服务器上是否存在完整数据
为此,我们需要确保两件事
- 两个位置中的表总数和存储过程匹配。
- 两个服务器上表中记录的总数应该匹配。 完成此操作后,我们的数据库就可以移动了。
我们可以在 SQL Server 上运行以下脚本以了解 SQL Server 数据库中每个表中的条目数。
CREATE TABLE #counts
(
table_name varchar(255),
row_count int
)
EXEC sp_MSForEachTable @command1='INSERT #counts (table_name, row_count) SELECT ''?'', COUNT(*) FROM ?'
SELECT table_name, row_count FROM #counts ORDER BY table_name, row_count DESC
同样,我们可以在 SQL Azure 数据库中运行以下脚本以了解每个表中的条目数
select t.name ,s.row_count from sys.tables t
join sys.dm_db_partition_stats s
ON t.object_id = s.object_id
and t.type_desc = 'USER_TABLE'
and t.name not like '%dss%'
and s.index_id = 1
完成此操作后,我们可以继续进行部署方案。
我将在我的下一篇文章中说明 Web 和工作者角色的使用。