迁移到 Windows Azure

宋沄剑

Bio: Yunjian Song currently works as SQL Server Database Administrator in China National Petroleum Corporation. He is a SQL Server MVP and the translator of the Book <Professional SQL Server 2012 Administration>. You can find him at his blog: http://www.cnblogs.com/careyson.

摘要：迁移生命周期是一套能够将您的程序或数据一步一步迁移到 Windows Azure 的标准指南

类别: 指南

适用于: Windows Azure

来源: MSDN (http://msdn.microsoft.com/en-us/library/windowsazure/jj156154.aspx)

电子书出版日期: 2013 年 2 月

Original © 2012 Microsoft; Translation ©2013 Yunjian Song. All rights reserved. This translation has not been reviewed for accuracy.
Microsoft and the trademarks listed at
http://www.microsoft.com/about/legal/en/us/IntellectualProperty/Trademarks/EN-US.aspx are trademarks of the Microsoft group of companies. All other marks are property of their respective owners.

The example companies, organizations, products, domain names, email addresses, logos, people, places, and events depicted herein are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, place, or event is intended or should be inferred.

This book expresses the author’s views and opinions. The information contained in this book is provided without any express, statutory, or implied warranties. Neither the authors, Microsoft Corporation, nor its resellers, or distributors will be held liable for any damages caused or alleged to be caused either directly or indirectly by this book.

目录

Windows Azure 迁移生命周期概览

分析阶段

应用程序迁移阶段

数据迁移阶段

测试和优化阶段

操作和管理阶段

为迁移到 Windows Azure 制定规划

为成本制定计划

确定 Windows Azure 可以解决的关键业务和技术问题

规划迁移过渡期

规划测试

找出所需的资源

规划在 Windows Azure 上的程序管理

实现为 Windows Azure 制定的迁移计划

构建验证测试环境

同步数据库以减少转移时间

备份和还原

转移到 Windows Azure

Windows Azure 虚拟机概览

Windows Azure 虚拟机

Windows Azure 虚拟网络

当迁移到 Windows Azure 虚拟机时需要考虑的方面

使用 Windows Azure 虚拟机时的高可用性和灾难恢复

在 Windows Azure 中迁移到 SQL Server

在什么情况下使用 Windows Azure 虚拟机中的 SQL Server

在 Windows Azure 虚拟机和 Windows Azure SQL Database 中做出选择

在 Windows Azure 虚拟机中将数据库构架和数据迁移到 SQL Server 中

如何准备在组织内部的构架和数据来将其上传到虚拟机中的 SQL Server 实例

如何将您的数据库构架和数据库文件移动到 Windows Azure 虚拟机中

当使用 Windows Azure 中的 SQL Server 时的高可用性和灾难恢复

Windows Azure 迁移生命周期概览

迁移生命周期是一套能够将您的程序或数据一步一步迁移到 Windows Azure 的标准指南。迁移的主要步骤分为分析阶段、应用程序迁移阶段、数据迁移阶段、测试和优化阶段以及操作和管理阶段， 如图 1 所示。

图 1.迁移到 Windows Azure 的各个步骤

本文对会对各个阶段进行详尽的解释， 并提供了相关信息的链接。

分析阶段

该阶段的目标是理解需要 Windows Azure 解决方案的业务需求。在定义好业务目标之后， 通过对现有的应用程序构架进行查看， 以便通过云端构架和现有应用程序的构架的差异来确定是否需要对组织内部应用的构架进行重构， 满足 Windows Azure 的业务需求。下面的任务和问题可以帮助您确定迁移计划。

定义业务需求

当应用程序运行在 Windows Azure 上时， 不同的业务场景会引发很多问题:

• 在 Windows Azure 上的解决方案是否面向新的用户或者客户

• 是否需要通过多租户方式来支持多个客户

• 将数据部署在微软数据中心而不是客户自己的服务器上是否符合公司的规定

• 哪一类应用程序更适合云端构架和策略

• 什么样的迁移方式更适合我的应用程序？是将整个应用以及相关依赖完全迁移到 Windows Azure 上？还是将部分应用迁移到云端而部分资源依然在组织内部， 亦或是将应用迁移到 Windows Azure 上而相关的依赖放到 Windows Azure 虚拟机上

回答上述问题的答案会影响为 Windows Azure 平台上设计的程序的行为。

根据特性差异做决定

您是否能在不修改现有应用程序的基础上将应用程序迁移到 Windows Azure 上呢？举个例子， Windows Azure SQL Database 并不支持所有非云端 SQL Server 上的所有功能。如果您本地的 SQL Server 使用了 CLR 对象， 您就需要将这部分 CLR 逻辑转移到应用程序层或是转移成标准的 T-SQL 代码， 这是由于当前的 Windows Azure SQL Database 并不支持 SQL CLR 。

自从 Windows Azure 预览版开始， Windows Azure 添加了新的虚拟机功能。通过虚拟机功能， 您可以在不修改任何代码的情况下将现有的基于 Windows Server 的 SQL Server 应用程序无缝迁移到 Windows Azure 平台。在 Windows Azure 的虚拟机环境下， 传统的 SQL Server 功能在云环境下依然可用。但在虚拟机环境下的关系数据库的性能就取决于下面几点， 包括虚拟机大小、磁盘的数量和配置、网络、数据库软件的配置以及应用程序的负载。我们推荐开发人员使用不同的虚拟机对程序进行性能基准测试以确定最佳性能， 更多信息请参阅:Migrating to SQL Server in a Windows Azure Virtual Machine。

根据性能和可扩展性做一个计划

很多遗留的应用程序都被设计成业务逻辑和数据访问紧密耦合。对于旧有的应用程序， 为了部署到 Windows Azure 时有更好的性能和可扩展性， 将该耦合解耦是非常有必要的。如果您的程序和数据库的交互非常密切， 那么可以考虑使用 Windows Azure Caching Service 或是实现您自己的缓存机制来将应用程序和数据库的交互放到一个批处理中以减少应用程序和数据库的交互次数。将数据库迁移到 Windows Azure SQL Database 有可能需要重新设计数据模型， 因为单个数据库实例每秒能够处理的事务数量和数据库的大小都是有限的。所以考虑使用多个实例进行 Scale-Out 构架或是 SQL Server Database Federation 而不是昂贵的 Scale-Up 构架。

根据软件的生命周期管理做一个计划

在 Windows Azure 中需要考虑应用程序的版本和升级。根据服务协定， 您的应用程序可能需要不同的版本来服务不同层次的客户， 您当然也想在 Windows Azure 升级应用程序时尽量减少停机时间。我们推荐您在 Windows Azure 上维护软件升级过程中的中间版本和生产环境的版本， 以便在遇到兼容性问题时可以回滚。您回滚升级后的程序首先要可以回滚应用程序， 然后是数据库。

在该阶段之后， 我们推荐您建立一个试点工程。

应用程序迁移阶段

当您决定将应用程序迁移到 Windows Azure 之后， 为您的程序建立只有少量数据的试点版本先部署到云端进行尝试。首先根据业务和技术角度您的应用程序代码做出修改以适合云端， 然后将这部分代码部署到 Windows Azure 中适当的角色中。

通常情况下， 组织内部的应用可以在少量修改或不修改代码的情况下直接迁移到 Windows Azure 中， 但这有可能引起性能， 扩展性或是安全方面的问题。为了实现更好的性能和可扩展性， 我们推荐您在迁移到 Windows Azure 之前基于多角色来重新设计您的应用程序， 请参阅 Development Considerations for Windows Azure Cloud Services 。我们推荐您首先将应用程序迁移到 Windows Azure Cloud Service 中， 然后迁移数据， 如果由于性能、安全或是其它原因， 您的应用程序的一部分还需要放在组织内部， 这就需要混合解决方案， 关于混合解决方案， 请参阅 Building Hybrid Solutions with Windows Azure。

如果您决定在 Windows Azure VM 中使用 SQL Server 时， 将现有的应用程序的连接指向部署在 Windows Azure 的 SQL Server 上， 除此之外， 在下面两种迁移方式中选择一种:

• 您的程序已经部署在了 VM 之上， 如果是这样的话只需要将整个 VM 迁移到 Windows Azure 中， 此时您的程序配置和数据都已经在虚拟机之中了， 但这有可能需要您上传一个非常大的.vhd 文件到 Windows Azure 中。另外， 该虚拟机有可能存在对驱动或是硬件的依赖， 而这部分驱动或是硬件在 Windows Azure 中有可能并不存在

• 您可以直接在 Windows Azure 中建立虚拟机， 您可以通过存在的镜像模版来初始化一个虚拟机。您可以挑选一个已经包含 SQL Server 的镜像， 然后将您的应用程序安装到该虚拟机之中。这不仅会减少上传时间， 还可以避免驱动和硬件的依赖， 但也需要安装应用和上传数据

对于如何将现有的 SQL Server 迁移到 Windows Azure 的虚拟机中的更多信息， 请参阅 Building Hybrid Solutions with Windows Azure。

数据迁移阶段

如果使用 Windows Azure Cloud Service， 将关系型数据由组织内部的 SQL Server 迁移到 Windows Azure SQL Database 中， 将非结构数据迁移到 Windows Azure Storage 中。更多信息请参阅 Migrating Data to Tables， Blobs， and Drives in Windows Azure和 Migrating SQL Server Databases to Windows Azure SQL Database。

如果您决定在 Windows Azure 虚拟机上使用 SQL Server， 您可以使用如下两种迁移方式之一:

• 您可以在虚拟机中存储数据， 您可以直接上传.vhd 到 Windows Azure

• 您可以在 Windows Azure 中建立虚拟机， 然后您可以将.vhd 中的数据作为数据磁盘上传到 Windows Azure 中。您可以使用数据磁盘存储 SQL Server 的日志和数据文件， 除此之外， 您还可以使用在 Migrating to SQL Server in a Windows Azure Virtual Machine 主题中所阐述的工具将已经存在的 SQL Server 数据库迁移到 Windows Azure 虚拟机中

测试和优化阶段

在您将程序和数据迁移到 Windows Azure 之后， 对您的程序进行功能上和性能上的测试。在该阶段， 在云上测试您的应用程序来确认程序符合预期。然后， 对部署在企业内和云上的程序针对性能方面进行比对。然后， 对云上应用程序的功能， 性能， 扩展性所暴漏出来的问题进行解决， 更多信息， 请参阅 Implementing the Migration Plan for Windows Azure。

操作和管理阶段

在测试和优化阶段之后， 通过 Windows Azure Diagnostics 来对应用程序进行追踪和监测。您可以通过 Windows Azure Diagnostics 对运行在 Windows Azure 上的应用程序进行诊断数据的收集。您可以用收集到的数据进行排错和调试、性能测试、资源使用检测、流量分析以及容量规划和审查。更多信息， 请参阅 MSDN 的 Diagnostics and Debugging in Windows Azure。

如果您需要对组织内部的 SQL Server 和 Windows Azure 上的 SQL Server 进行数据同步， 或是对 Windows Azure 上不同的 SQL Server 实例进行数据同步， 您可以设立和配置 SQL Data Sync 服务。另外， 我们推荐您建立一个数据恢复计划， 以防在用户错误操作以及遇到其它灾难时可以恢复数据。更多信息， 请参阅 High Availability and Disaster Recovery Considerations with Windows Azure SQL Database。

为迁移到 Windows Azure 制定规划

当开始您的迁移计划时， 您需要考虑比如成本、业务和技术需求、时间期限、在迁移后必要的测试计划等几个关键因素。本章提供了帮助您迁移到 Windows Azure 需要考虑的地方以及详尽的指导。

本文将会分为以下几个小节

• 为成本制定计划

• 识别出 Windows Azure 可以解决的关键业务和技术问题

• 进行分析和设计

• 为迁移各部分计划制定时间规划

• 规划迁移过渡期

• 规划测试

• 找出所需的资源

• 规划在 Windows Azure 上的程序管理

为成本制定计划

成本是在制定迁移计划时所需要认真对待的最重要的问题， 所以我们极力推荐在对于企业内迁移到 Windows Azure 做决策分析和计划制定的过程中先考虑成本问题。决定 Windows Azure 的价格取决于多个因素， 比如网络流量、应用程序负载等。关于如何计算 Windows Azure 的价格超出了本文范围。我们推荐在迁移计划开始就使用 Windows Azure 价格计算器来计算成本， 您可以在这里找到 Windows Azure 价格计算器。

当计算成本时， 不要忘了把开发和测试时使用 Windows Azure 的费用包括在内。在企业内的开发项目中， 您也许需要为开发和测试的服务器付费， 同样， 在 Windows Azure 环境中， 您也需要在该过程中为使用 Windows Azure 的资源付费。除此之外， 您还需要考虑培训和学习的费用。我们推荐您事先进行性能测试和容量规划以便在一开始就知道您的应用程序需要什么样的容量。这篇关于 Windows Azure 成本评估的文章可以帮助您了解一个典型的 Windows Azure 应用程序所需的费用。

确定 Windows Azure 可以解决的关键业务和技术问题

Windows Azure 对于解决某些业务和技术问题非常有效， 虽然下面的列表不完全， 但如果您的应用程序有以下特点， 那么会非常适合迁移到 Windows Azure。

• 用户分布离散:Windows Azure 的数据中心横跨多个大陆。当需要时， 可以通过数据中心之间的数据交互来大大提高性能。 Windows Azure 所包含的例如内容分发网络(CDN)和数据同步服务可以使得将“热”数据分布到多个离用户更近的数据中心， 这使得用户和数据中心之间的网络传输更快从而优化了用户体验。

• 负载变化大:对于企业内网络来说， 您需要购买大量硬件使得您的应用程序在面对高峰期时性能不至于下降。比如说吧， 一个零售店通常需要买额外的服务器来应付节假日时的购物高峰。同样， 一个会计部门需要购买额外的服务器应付月底和年终的负载。除了上述情况之外， 其它大多时间服务器都不会被充分利用。而对于 Windows Azure 来说， 在负载高峰时多启用一个应用程序的实例来应对负载， 而在平时低负载时关闭该实例， 这样一来， 您仅仅只要根据您的需要付费使用 Windows Azure。

• 多租户：对于服务提供者来说， Windows Azure 允许您使用相同应用程序构架为任何数量的客户提供服务， 因此降低了运营成本。

• 更关注程序本身:对于服务提供者来说更希望将精力和资源放到功能设计和程序开发上而不是去维护基础构架， Windows Azure 可以帮助您从传统的组织内部程序中维护基础构架的工作中解脱出来， 将资源放到功能设计和程序开发上。

• 减少对基础构架资源的需求：当您利用 Windows Azure 提供的弹性扩展来构架您的程序时， Windows Azure 提供的角色实例都可以按需分配， 因此您不再需要预先购买硬件和担心服务器面对负载峰值时的性能。

Windows Azure 除了具有面向服务的特性之外， 还可以在其之上运行虚拟机。在 Windows Azure 之上的虚拟机可以运行任何其支持的操作系统， 在虚拟机上部署的程序和在本地部署的程序的运行模式完全一样。对于 Windows Azure 虚拟机所支持的操作系统， 请参阅 Overview of Windows Azure Virtual Machines。 虚拟机可以作为为程序构架提供服务的一部分。对于那些不是那么容易迁移到 Azure 的应用程序， 虚拟机是一个不错的解决方案。更多信息， 请参阅 Migrating with Windows Azure Virtual Machines。

进行分析和设计

在分析和实现阶段， 您首先需要了解希望迁移到云端的程序构架， 然后设计在 Windows Azure 中的实现方法并出具实现计划。在该阶段， 您需要列出程序构架和时间点的大纲。

一些计划的关键元素比如:

• 识别当前的挑战:对于任何程序的重构， 下面列表包含了您需要认真规划的点。

o 在当前构架的当前负载中， 应用程序性能不尽人意:比如说， SQL 查询性能底下， 在迁移之前您就应该进行性能调优。您还应该重新设计和横向扩展应用程序层的模块。

o 确定弹性扩展需求:您需要识别出您的程序是否能够按功能分解成能够独立运行的可伸缩单元。

o 不均匀的负载模式:您应该识别出程序不均匀的负载模式， 并为高峰期制定横向扩展计划。相对平时的低负载， 您需要为高峰期的高负载制定横向扩展计划。

o 增长预测:通常， 增长预测后 IT 部门首先需要知道模式要改变了。面对该问题决定对哪一部分进行横向扩展

• 识别技术要求:获知您程序的每个部分分别在忙时和闲时的需要。然后， 为每个部分的可扩展性做一个计划。每个部分可能会有不同的可扩展性机制。技术要求可不仅仅是性能部分， 举例来说， 还包括高可用性和灾难恢复的要求， 对最大网络延迟的要求等这些都需要在规划迁移时决定， 下面的列表列出了一些技术要求的例子

o 使用关系型存储:查看数据是否应该被关系存储， 那些需要关系存储和事务的数据应该存在关系存储中。您或许应该使用 Windows Azure SQL Database 或是运行在虚拟机中的 SQL Server 来存储这些数据， 而对于其它非关系型的数据使用 Windows Azure Tables， Windows Azure Blob storage， 或 Windows Azure drives 进行存储， 我们推荐您要识别出程序中的各部分数据的存储方式。

o 选择关系型存储方式:是使用 Windows Azure SQL Database 还是在虚拟机中的 SQL Server 取决于多个因素， 如果您不想对高可用性、负载均衡和故障转移花费经历的话， Windows Azure SQL Database 最为合适。但对于目前在 Windows Azure SQL Database 目前还没有的功能， 在虚拟机中的 SQL Server 无疑更加合适.对于该选择取决于具体的情况和不同的解决方案， 下述列表就是做该决定时一些需要考虑的方面。

o 数据库大小:Windows Azure SQL Database WEB 版的大小限制是 5G， 而商业版的大小限制是 150G。 如果需要大小超过该限制， 您可能需要使用 federations 或是分区。对于 federations 的指导方针和限制请参阅 Federation Guidelines and Limitations。 Federation 对于获取数据更加有效， 但同时对于连接和聚合操作就有了限制， 对此详细信息请参阅 Federations in SQL Database (SQL Database)。 对于最新的 SQL Database 的大小限制和版本信息， 请参阅 Accounts and Billing in SQL Database。

o 数据库数量:默认情况下， SQL Database 每个订阅支持 6个数据库， 每个实例包括 master 数据库在内最多支持 150 个数据库。当然如果您需要超过该限制也是可以的， 有关此的更多信息， 请联系微软在线客户服务的客服代表

o 跨库查询:SQL Database 当前还不支持跨库数据库连接以及其它跨库查询， 如果您需要 Union 或是 Join 来自多个数据库的数据， 你只能通过在应用程序层实现。

o CLR 对象： SQL Database 当前并不支持 CLR 存储过程、聚合、触发器和函数。如果您需要实现上述这些功能， 只能通过在 SQL Database 中使用 Transact-SQL 来实现。例如聚合等复杂的聚合或操作无法通过在数据库层面使用 Transact-SQL 实现的， 你需要将这部分功能移到应用程序层。

o 数据类型： SQL Database 并不支持一些 SQL Server 的系统数据类型。最新的相关信息， 请在 MSDN 中查看 Data Types (SQL Database)。

o 复制： SQL Database 并不支持例如事务日志复制和合并复制等复制类型， 对于上述复制类型您可以在 Windows Azure 虚拟机上运行的 SQL Server 中实现。您还可以使用 SQL 数据同步服务来同步 SQL Database 实例之间的数据。但 SQL Data 同步服务或许不能解决事务日志一致性和数据冲突的问题。 警告:SQL Data 同步服务当前还只是 Preview 版本， 这意味着当前只是为了未来的版本收集反馈， 因此不应该被用到生产环境中。

o 全文索引:Windows Azure SQL Database 当前还不支持全文索引。如果您的应用程序使用了全文索引， 您可以考虑将程序迁移到 Windows Azure 虚拟机的 SQL Server 中。更多关于 Windows Azure 虚拟机中的 SQL Server 预览版的相关信息， 请参阅: Migrating to SQL Server in a Windows Azure Virtual Machine。

o 授权： SQL Database 按照数据库大小按月收费， 但是对于运行在 Windows Azure SQL Database 中的 SQL Server 是需要授权的。

o 登录和安全： SQL Database 不支持 Windows 验证方式， 但是在 Windows Azure 虚拟机中是支持的。更多关于安全的指导方针和 SQL Database 中有关安全的限制， 请参阅 Security Guidelines and Limitations (SQL Database)。

o 功能的区别：更多关于 SQL Server 和 SQL Database 的相同点和不同点， 请参阅 SQL Database Overview。

• 登录和用户安全：随着 Windows Azure 中新的网络功能的提升， 您可以将组织内部的活动目录域扩展到 Windows Azure。更多信息， 请参阅 Migrating with Windows Azure Virtual Machines。 关于 SQL Database 安全管理的细节信息， 请参阅 Managing Databases and Logins in SQL Database。

• 按功能将应用程序分块:找出程序中可以按功能分割的单元进行分割， 这样就可以将这些不同的单元分到不同的 Windows Azure 角色或虚拟机中。这样做的好处是程序更容易进行弹性扩展， 并且程序更容易和其它程序整合， 对于云计算来说， 这种分块更加合适。

• 支付卡行业 （PCI） 和其它需求:在将应用程序或程序的模块迁移到 Windows Azure 之前， 首先检查当前业务所需的证书符合规范， 您或许需要在迁移到 Windows Azure 之前移除程序或是数据库的一部分， 然后程序运行在混合模式下。这使得程序的部分在遵循业务规范的情况下， 其它部分仍然可以享受到 Windows Azure 和云计算所带来的好处。

• 程序中无法在 Windows Azure 平台上运行的关键模块:由于某些原因， 您或许不能将您程序中的部分程序迁移到公有云中。找出这些模块， 使用混合构架， 您可以将非关键的模块迁移到 Windows Azure 中而从而享受到 Windows Azure 和云计算带来的好处， 同时您仍然可以使得程序的关键部分符合行业内的规范。

为迁移各部分计划制定时间规划

当您确定所需迁移的部分之后， 迁移计划中的每一步就变得很清晰。查看每一步中涉及的程序和数据并对此评估所需的时间和开发、测试和迁移所需的资源。当将您的程序分解之后， 并行开发这些分解后的模块以适应弹性扩展构架。

在您的迁移计划中设置项目里程碑， 比如说功能和性能测试， 发布日期等。您的迁移计划可能由一系列步骤进行迭代直到所有的模块都已经为迁移到 Windows Azure 准备就绪。

规划迁移过渡期

当开发和迁移的时间规划设立好之后， 要找出需要对当前程序和基础构架做的改变和所需的时间。这类计划可以使得在迁移完成之前程序可以正常运转。当制作这份过渡计划时， 找出当前系统最麻烦的地方并给出使得迁移过程中业务可以正常运转的解决方案。除此之外， 找出使得业务正常运转所需的工作， 通常来说这类工作往往非常简单， 比如说调优一个 SQL 查询语句或是基于您的应用程序特性添加一个 web 服务器依赖。做一个应对突发的计划以避免预料之外的增长或负载。当作这类应对突发事件的计划时， 看看是否可以将这类负载横向扩展到 Windows Azure 的虚拟机中以避免不必要的硬件投资。

规划测试

任何迁移计划都应该包括广泛的功能测试和负载测试。对于测试方法的概述超过了本文所涉及的范围。下面的列表展示了当测试时应该牢记的关键点:

• 自动化测试脚本

• 测试程序的所有层和模块

• 按照程序正常应有的负载进行负载测试

• 按照您对程序的最高期望进行测试

我们推荐您为修复测试所发现的错误规划时间。

找出所需的资源

当确定了业务和技术需求之后， 找出迁移所需的资源。这些都是您在迁移过程中所需要的。这些资源从三个方面来看:

• 人事上:为了迁移成功， 您或许需要拥有不同专业技能的各类人参与到程序迁移的过程。除此之外， 迁移之后技术人员的技能需要更新， 角色需要改变。比如说， 考虑设立一个账户和服务管理员来管理登录名、访问权限、服务以及扩展等级。

• 工具上：找出开发、测试和部署 Windows Azure 程序所需的工具， 更多信息， 请参阅 Windows Azure Tools for Microsoft Visual Studio 和 Tools and Utilities Support (SQL Database)。

• 咨询：您或许需要特定专家来帮助您进行迁移。迁移专家或许会帮您避免走歪路来节省大量的时间和钱。

规划在 Windows Azure 上的程序管理

对于小型程序来说， Windows Azure 管理门户或许就足够来管理 Windows Azure 的部署。 Windows Azure 管理门户可以允许您记录并管理包括改变实例角色的数量、管理 SQL Database 实例等管理和部署工作。然而， 对于复杂的程序和为客户提供服务的程序来说， Windows Azure 管理门户可能就不够了。

Windows Azure 开放了 REST API 使得您可以通过编程的方式对程序和在 Windows Azure 上的虚拟机以及对 Windows Azure storage 的管理。您也可以自己写一个管理界面来规划和监测您的 Windows Azure 环境。您的迁移计划应该包括在迁移之后对程序的管理， 尤其是这部分管理还包括自定义界面和自动化。

更多有关 REST API 对于 Windows Azure 部署的管理， 请参阅 API References for Windows Azure。

实现为 Windows Azure 制定的迁移计划

Windows Azure 是一个由微软数据中心提供的一个 Internet 级别的计算和服务平台。因为通过使用 Windows Azure， 微软会维护所有底层的操作系统、硬件、网络、存储资源并且会不断的更新该平台， 因此开发和系统管理人员不再需要为底层的软件和硬件基础构架操心。

由于 Windows Azure 和企业内平台有很大的区别。我们强烈推荐您在将程序迁移到云端之后， 就像新部署程序时一样对程序进行功能和性能的测试。您需要在实现迁移的过程中考虑下述重要部分：

• 构建验证测试环境

• 同步数据库以减少转移时间

• 备份和还原

• 迁移到 Windows Azure

本篇主题的重点是 Windows Azure Cloud Services.而关于 将SQL Server迁 移到 Windows Azure 虚拟机的初步指导， 请参阅 Migrating with Windows Azure Virtual Machines。

构建验证测试环境

在将程序迁移到云端的时候， 您必须知道如何测试和调试您的程序以便保证您的程序在云端和在本地一致。下述列表展示了您可以用于测试您的程序的方法：

• Windows Azure Tools for Microsoft Visual Studio:在您创建程序后， 您可以使用计算和存储模拟器在本地对程序进行调试。这使得您可以在将程序发布到 Windows Azure 之前在本地开发程序。 Windows Azure Tools for Microsoft Visual Studio 对 Visual Studio 2010 进行扩展使得额外添加的计算和扩展模拟器包含了 Windows Azure 的大部分功能， 从而您可以在本地对程序进行测试。我们推荐您在功能测试的早期就进行这类测试。更多信息， 请参阅:Windows Azure Tools for Microsoft Visual Studio。

• SQL Server 数据工具:SQL Server Data Tools (SSDT) 在 Visual Studio 2010 中提供了集成开发环境， 您可以使用该工具来设计数据库、创建和编辑数据库对象和数据， 或是对其支持的所有 SQL 平台执行查询语句;这包括在云端的 Windows Azure SQL Database 和非云端的 Microsoft SQL Server 2012。 该工具允许您检查程序中数据访问模块。无论这部分数据是本地默认数据库还是 Windows Azure SQL Database， 该工具都可以用来测试您的数据库项目解决方案。更多信息， 请参阅 SQL Server Data Tools:注意:Windows Azure Tools for Microsoft Visual Studio 和 SSDT 都可以用于对在线和离线的数据源进行基本的功能和兼容性测试。但是为了真正从功能、性能可扩展性的角度测试运行在云端的程序， 您还需要在您程序运行的 Windows Azure 上进行测试。

• 自动化测试框架:很多程序已经存在可以用来保证程序的模块和功能正常工作的自动化测试框架。当程序在 Windows Azure 上运行时， 这类自动化测试框架是否可以正常运行取决于这类框架是如何设计的。如果这类框架需要在组织内部运行但可以通过定义好的端点连接 Windows Azure， 这类框架就有可能在云端正常工作。否则， 我们建议您将自动化测试框架和程序本身都迁移到 Windows Azure 上以避免丢失连接和网络延迟问题。

• Visual Studio 负载测试:如果程序当前并不存在自动化测试框架， 我们推荐您创建一个新的自动化测试框架并使用 Visual Studio 负载测试来模拟多用户负载。更多信息， 请参阅:Using Visual Studio Load Tests in Windows Azure Roles。

同步数据库以减少转移时间

您应该尽量减少在测试、数据移动和生产之间的转换时间。将组织内部的数据上传到 Windows Azure 可能会需要数个小时甚至数天。您不会希望在这段时间内您的程序不可用。这也是为什么您需要一个减少停机时间的计划。注意转移时间意味着将组织内部程序迁移到 Windows Azure 的最终步骤所需的时间。在转移之前， 看看哪些表中的数据在迁移过程中不改变而哪些表中的数据在迁移的过程中可能改变。对于静态数据来说， 您不需要在转移时间内转移这部分数据， 如果您不能确定某些特定表中的数据是否会在转移时间内改变， 您应该在系统中添加将改变的数据迁移到云端的程序。我们还推荐您考虑是否所有组织内部的数据都需要迁移到云端才能使得在 Windows Azure 上的程序上线。如果您的程序只有部分数据存在云端就能上线， 那就会大大减少停机时间。

但如果是程序在 Windows Azure 上线之前， 云端数据需要和组织内部数据保持一致， 那就考虑减少在转移时间内所转移的数据量。在某些情况下， 可以在转移时间之前就先转移部分数据， 在实际的转移时间内转移另外一部分数据。在这种情况下， 您需要区分哪些数据是可以提前转移的， 而哪部分数据需要在转移时间内转移， 这样做的好处是允许您的程序在 Windows Azure 中上线的过程中因为只转移部分数据而减少停机时间， 您可以使用下述方式在转移时间之前同步数据:

Windows Azure SQL Data Sync

Windows Azure SQL 数据同步服务提供了为 Windows Azure SQL Databases 同步数据的功能， 该服务目前有两个主要功能:

• 同步组织内部的 SQL Server 数据库和 Windows Azure SQL Database 实例之间的数据， 使得组织内部和基于云端的程序可以使用相同的数据。

• 同步 Windows Azure SQL Database 实例之间的数据， 被同步的实例可以在同一个数据中心， 不同的数据中心， 甚至是不同的区域。

对于下述情况， 用 Windows Azure SQL 数据同步服务来同步组织内部数据库和 Windows Azure SQL Database 实例之间的数据是一个很好的选择:

• 您需要对程序进行并行测试。

• 在将组织内部的所有数据迁移到 Windows Azure 之前您的程序需要继续运行， 在迁移之后将这部分改变的数据迁移到 Windows Azure。

• 在迁移到 Windows Azure 之前， 您组织内部的程序需要继续运行， 同时还需要减少停机时间。

• 程序同时使用了云端和组织内部数据库作为混合解决方案。

值得注意的是， SQL Data 同步服务使用改变跟踪表用于跟踪被改变的表来使得这些改变的数据被同步。当使用 SQL 数据同步服务时， 您必须为该改变跟踪表预留空间。除此之外， 您最好不要修改被同步表的表结构或是主键， 除非您重新初始化同步组。但对于需要中介和实时数据同步的情况下 SQL Data 同步服务就不是那么理想了， 更多信息， 请参阅 SQL Data Sync。 警告:SQL Data Sync 当前仅仅是预览版， 仅仅是为了未来的版本收集反馈信息， 所以不应该被用到生产环境中。

复制、镜像、事务日志传送

您可以使用复制、镜像、事务日志来将组织内部的一个 SQL Server 实例中的数据同步到另一个组织内部的 SQL Server 实例或是 Windows Azure 虚拟机上的实例。但是这些选项都不能将数据移入或移出 Windows Azure SQL Database 中。更多信息， 请参阅:Replication and Log Shipping and Database Mirroring and Log Shipping。

自定义抽取、转换、装载(ETL)

为了减少在转移时间内转移数据所需的时间， 您应该尽量在转移时间之前尽可能多的转移数据。您可以使用自定义 ETL job 来将那些被改变的数据从组织内部的 SQL Server 转移到 Windows Azure 环境中。当从 SQL Server 2008 之后的版本中迁出数据时， 我们推荐使用 CDC 功能来确保仅仅那些改变的数据从组织内部的数据库中转移到 Windows Azure SQL Database 实例中。更多关于 CDC 的信息， 请参阅 BOL 上的 Track Data Changes。 但对于那些没有 CDC 的数据库， 您需要创建一个数据跟踪系统来追踪那些被迁移之后改变的数据。总之， 在实际的转移时间迁移最小量的数据会大大减少停机时间。

导出数据层应用程序(DAC)

通过 DAC， 您可以 将SQL Server实 例中的数据导出并将其存入 Windows Azure Blob 存储中并稍后还原到 Windows Azure SQL Database。 通过 DAC， 您可以设置只有需要的表被导入或导出的表级别过滤器， 但无法设置行级别的过滤器。这也是为什么 DAC 适合整个表都在单独数据库中的情况而不适合联合数据库。 DAC 还不适合需要实时同步的程序， 更多信息， 请在 BOL 中参阅 Export a Data-tier Application。

备份和还原

创建数据库备份是为了从管理错误、程序错误以及数据中心中出问题导致的数据丢失中进行还原。在 Windows Azure SQL Database 中备份和还原数据和在组织内部的 SQL Server 中并不一样， 因此需要和可用的资源和工具共同使用。因此为了进行可靠的恢复而进行的备份还原 Windows Azure SQL Database 就需要一个的备份和还原策略。需要 Windows Azure SQL Database 进行数据恢复的场景主要分为下述三类:

• 基础构架和硬件失败:数据中心可能出现硬件故障， 比如说为您的数据提供 Windows Azure SQL Database 服务的硬件节点出现故障。

• 程序或用户所产生的问题和故障:用户或程序有可能对数据产生意料之外的操作， 这类操作需要进行恢复。比如说， 某个用户错误的修改了一个客户的信息， 等等。

• 数据中心设备损坏:当前的 Windows Azure SQL Database 服务协议指定了在微软控制之外的原因， 比如说灾难发生所导致的问题是免责的。在灾难发生时， 数据中心可能出现数据库无法从复制或是在线备份中恢复的损害。

最终您需要决定对于存储在 Windows Azure SQL Database 数据中心的数据能够损失的程度。有关可用备份和还原工具以及围绕其所建立的灾难恢复策略， 请参阅 MSDN 中的 Business Continuity in SQL Database。

转移到 Windows Azure

当您真正开始将您的程序迁移到 Windows Azure 时， 您可以遵循下述两种方式:

• 并行运行:使用这种方式， 您的程序同时在组织内部和 Windows Azure 上运行。这使得您可以在程序完全依赖云端运行之前在 Windows Azure 进行在线测试。您的测试应该包含但不仅限于:功能测试， 性能测试， 扩展性测试。当完成对 Windows Azure 上新系统的完整测试后， 将剩余部分数据迁移到云端， 最终关闭组织内部的系统。

• 暂停和转移:这种方式适用于系统在 Windows Azure 上线之前需要同步所有的数据。使用这种方式需要首先完成在 Windows Azure 上的功能和性能测试， 然后使用上面提到的数据同步方式将数据同步到 Windows Azure。 我们推荐本地和云端的数据尽量保持一致以减少最终数据同步或 ETL 操作所需的时间。最终转移到 Windows Azure 时， 关闭企业内的系统， 并做最后一次数据同步， 然后 将 Windows Azure 上 的程序上线。

Windows Azure 虚拟机概览

Windows Azure 自从2012预览版开始添加了新的虚拟机功能。作为该新功能的一部分， Windows Azure 发布了一个新版本的 Windows Azure 管理门户， 该门户在原有的基础上增加了额外的新功能。

这篇文章提供了作为 Windows Azure 中提供新服务的新基础构架的预览。

• Windows Azure 虚拟机

• Windows Azure 虚拟网络

• 迁移 Windows Azure 虚拟机需考虑事项

• 使用 Windows Azure 虚拟机时的高可用性和灾难恢复

Windows Azure 虚拟机

您可以使用下述三种方法之一在 Windows Azure 中创建虚拟机:

• 使用平台提供的虚拟镜像:您可以直接使用由 Windows Azure 管理门户提供的镜像画廊作为模版创建您自己的虚拟机。使用这种方法不需要上传任何您在本地创建的 Windows Server 或是 Linux 镜像。您可以通过管理门户， PowerShell 或是可编程的 API 接口 （REST） 甚至是为 Mac 或 Linux 桌面提供的命令行程序。当虚拟机创建成功后， 您可以登录到虚拟机并对其进行管理。对于运行 Windows Server 曹旭哦系统的虚拟机来说， 您可以在管理门户中点击“连接”按钮来开始远程桌面连接。对于运行 Linux 操作系统的虚拟机， 您可以使用安全 Shell(SSH)客户端来登录， 关于如何在 Windows， Max， Linux 创建、部署、管理虚拟机的详细信息， 请参阅 WindowsAzure.com 网站。

• 使用您自己的镜像:您可以使用由 Windows Azure 软件开发包 （SDK） 所提供的 CSUpload 命令行工具来 将VHD镜 像文件上传到 Windows Azure。您仅仅需要将镜像上传到您的 Blob 存储账户后， 使用该镜像来实例化一个虚拟机。更多信息， 请参阅 Creating and Uploading a Virtual Hard Disk that Contains the Windows Server Operating System。

• 使用您自己的磁盘:操作系统镜像实际上就是一个您可以用于作为模版创建虚拟机的虚拟硬盘文件。镜像仅仅是一个文件是因为其并没有设置诸如用户账户信息等配置文件。但是如果您的程序需要一些已经在本地配置好的的配置信息才能运行您或许就不能通过模版创建虚拟机文件了。在这种情况下， 您可以使用 CSUpload 命令行工具上传作为磁盘的 VHD 文件。举个例子， 您的磁盘中已经安装了 SQL Server， 此时如果您依然从模版创建虚拟机， 那您就需要负责授权文件的配置。

在您初始化虚拟机镜像之后， 您就需要为操作系统和软件的打补丁、配置和维护。 Windows Azure 会定期更新 Windows Azure 平台提供的基本镜像文件。但是 Windows Azure 并不会强制升级已经由客户部署的操作系统。类似的， Linux 系统镜像也会定期更新。更多关于价格的详细信息和服务级别协议， 请在 WindowsAzure.com 参阅 Windows Azure 法律信息。注意您可以在下面列表中查看有关镜像和磁盘定义的重要信息。

下述列表是在 Windows Azure 上运行的虚拟机所支持的程序。

程序

细节

Microsoft SQL Server

• 您上传的镜像所支持的版本: SQL Server 2008， SQL Server 2008 R2， and SQL Server 2012 所有版本

• 镜像画廊之后的版本: SQL Server 2012 评估版

• 支持的程序: SQL Server Database Engine， SQL Server Analysis Services， SQL Server Reporting Services， SQL Server Integration Services， SQL Server 管理工具， SQL 连接 SDK， SQL Server 安装升级和迁移工具， 比如 DAC， 备份， 还原， 分离和附加， 注意主数据服务当前还不支持。

Windows Server 活动目录

支持版本:Windows Server 2008 R2。

Microsoft SharePoint

支持版本:SharePoint 2010 的所有版本。

Linux Support

您可以上传一个 Linux 虚拟硬盘(VHD)文件到 Windows Azure 中， 更多关于 Windows Azure 支持 Linux 的版本的信息， 请参阅 Windows Azure 管理门户。

点击这里查看表为图像

对于最新关于 Windows Auzre 虚拟机中所支持的微软的软件信息， 请参阅微软服务器软件支持部门。

关于虚拟机的基础信息， 请参阅 MSDN 中关于虚拟机的主题。

关于如何在 Windows Azure 中管理虚拟机的细节信息， 请参阅管理中心， 这部分信息也可以在 WindowsAzure.com 网站下载到。站点中还有 how-to 指南， PowerShell 命令集合以及您可以在 Windows， Mac， Linux 平台上使用的命令行工具。您还可以使用 REST API 和 PowerShell 命令行工具来管理您的程序和虚拟机。更多洗洗， 请在 MSDN 中参阅 Windows Azure 服务管理 API 参考和 Windows Azure 管理命令集合。

重要概念的列表

• 操作系统镜像是一个您可以用来作为模版创建新的虚拟机的虚拟硬盘文件。镜像之所以被称为模版， 是由于镜像不像配置好的虚拟机那样有特定的配置， 这些配置包括电脑名称和用户账户设置。

• 虚拟机磁盘是可以被当前的操作系统装载和启动的虚拟硬盘。磁盘还可以被作为独立于操作系统磁盘的磁盘附加到一个运行中的实例中。当您在 Windows Azure 管理门户创建了一个虚拟机之后就会默认为操作系统创建一个磁盘。我们推荐您为您的数据和日志文件创建一块额外的磁盘。更多信息， 请参阅 How to Attach a Data Disk to a Virtual Machine 和 How to Detach a Data Disk from a Virtual Machine。

• 您可以将正在运行的虚拟机捕获为一个镜像， 但该操作并不会捕获附加磁盘。被捕获的虚拟机可以用于创建多个虚拟机。最终结果是在相同的存储账户中多了一个刚捕获的虚拟机操作系统所在磁盘的镜像。更多关于捕获虚拟机的镜像的相关信息， 请参阅 How to Capture an Image of a Virtual Machine Running Windows Server 2008 R2 和 How to Capture an Image of a Virtual Machine Running Linux。

• 一个 Windows Azure 程序可以存在多个虚拟机。您在 Windows Azure 中创建的虚拟机都可以和在同一个 Could Service 或是虚拟网络的其它虚拟机使用私有网络通道进行交互。 Windows Azure 允许您在这多个虚拟机之间进行负载均衡。 Windows Azure Training Kit 中 introduction to Windows Azure Virtual Machines Hands-on-Lab 这篇文章阐述了如何连接到多个 Windows Azure 虚拟机， 除此之外， 您还应该看看下面的指南:

o How to Connect Virtual Machines in a Cloud Service

o How to Set Up Communication with a Virtual Machine

o Load Balancing Virtual Machines

Windows Azure 虚拟网络

作为新的 Windows Azure 预览版功能的一部分， Windows Azure 提供了一个新的网络虚拟化集合以及基于 VPN 跨域的站点到站点的网络。您可以通过 Windows Azure 管理门户或是一个网络配置文件来提供和管理虚拟网络。 Windows Auzre 虚拟网络提供了下述功能:

• 在云端的分支办事处或是专用的私有虚拟网络:您可以通过 VPN 将您企业网络的一部分扩展到 Windows Azure 上。通过配置 VPN 设备连接到 Windows Azure VPN 网关， 您可以为您的企业网络和 Windows Azure 之间建立一个安全的站对站连接。您在 Windows Azure 上的虚拟机可以加入到您运行在组织内部的域。更多关于建立安全的跨域解决方案的信息， 请参阅:Windows Azure Virtual Network and About VPN Devices for Virtual Network。

• 为虚拟机配置静态的 IPV4地址:您可以为您在 Windows Azure 上运行的虚拟机设置 IPV4 地址空间。当您创建虚拟网络时， 你可以为机器指定 IPV4 地址空间。虚拟机接收的 IP 地址是静态的并且不会随着虚拟机的重启而改变。 IP 地址会被 DNS 记录并且您可以通过主机名来连接虚拟机。更多关于创建虚拟网络的信息， 请参阅:Windows Azure Virtual Network。

• 对于虚拟网络的名称解析(DNS):有很多方式可以为您的虚拟网络提供名称解析。您可以使用 Windows Azure 的名称解析方案或是您可以使用自己的 DNS 服务器。更多关于名称解析和 Windows Azure 的解决方案， 请参阅:Windows Azure Virtual Network 和 Windows Azure Name Resolution Overview。

• Windows Azure 虚拟机上的活动目录: 您可以在云端利用组织内部现有的活动目录和 DNS 服务器。 Windows Azure 虚拟机特性允许您通过组织内部的活动目录服务使得运行在 Windows Azure 上的虚拟机加入到组织内部的域。更多信息， 请参阅:Guidelines for Deploying Active Directory on Windows Azure Virtual Machines。

下图展示了 Windows Azure 虚拟机使得客户可以轻松的将企业网络延伸到 Windows Azure 上。这使得将现有的程序迁移到 Windows Azure 上变得很有优势。您可以更简单的支持横跨云端和组织内部的混合应用程序。您还可以管理 Windows Azure 中您自己的虚拟网络并通过 VPN 网关建立组织内部和云端的连接。因此您就可以使运行在 Windows Azure 上的虚拟机加入到运行在组织内部的域。

如图所示， 在 Windows Azure 虚拟网络中， 您可以设立活动目录域并开启 DNS 服务， 同时 SQL Server 安装在另一个虚拟机中。然后您的程序代码可以托管到在另一台 Windows Azure 虚拟机中 Windows Azure Web 角色中。

关于更详细的虚拟网络指南以及 How-to 指南， 请参阅 WindowsAzure.com 的 Networking。

当迁移到 Windows Azure 虚拟机时需要考虑的方面

使用 Windows Azure 虚拟机可以消除程序对某些资源的依赖。您可以将应用程序直接作为虚拟机迁移以便快速直接的利用 Windows Azure 的优势。除此之外， 您可以连接诸如 Web Sites 或是 Cloud Services Web 或是 Worker 角色的虚拟机。

下面例子是可以利用 Windows Azure 优势的一些模式:

• 迁移存在的非关键数据库程序

• 由于 Windows Azure SQL Database 并不支持 SQL Server 所有的特性， 所以将程序部署到虚拟机中的 SQL Server 当中

• 为新的数据库应用程序快速简单的部署开发和测试环境

• 对于组织内部数据库程序的备份方案

• 对于组织内部高峰期的一个扩展方案

• 克服组织内部虚拟化平台效率过低的解决方案

• 对于需要的某些资源比如 SQL Server， 互动目录， MongoDB， MySQL， SharePoint 等依赖于虚拟机的解决方案

当您考虑将组织内部的程序迁移到云平台时， 我们推荐您仔细的计划好每一步。通常来讲这些步骤会包括分析阶段、应用程序迁移阶段、数据迁移阶段、测试和优化阶段、操作和管理阶段。关于每一个步骤的更详细信息， 请参阅:Overview of the Migration Life Cycle in Windows Azure。

我们推荐通过在 MSDN 中 Migrating to SQL Server in a Windows Azure Virtual Machine 章节所描述的方式将您的 SQL Server 数据库以及其中的数据迁移到 Windows Azure 的虚拟机中。然后， 上传和附加包含数据的数据盘到虚拟机中， 或是附加一个空盘。您可以使用数据磁盘存储 SQL Server 的日志和数据文件， 比如说看 Windows Azure Training Kit 的 Connecting a PAAS application to an IAAS Application with a Virtual Network Hands-on-Lab 章节。该动手实验营讲述了如何附加一个空盘以及如何更新数据库的位置以便使用刚刚附加的空盘。除此之外， 您还可以参阅 WindowsAzure.com 站点的下述指南：

• How to Attach a Data Disk to a Virtual Machine

• How to Detach a Data Disk from a Virtual Machine

• Provisioning a SQL Server Virtual Machine on Windows Azure

在 Windows Azure 虚拟机上的性能取决于多个因素， 包括 VM 的大小、磁盘的数量和配置、网络、数据库软件的配置以及应用程序负载。我们推荐开发人员在不同大小的 VM 测试性能基线。关于更多在虚拟机中使用 SQL Server 时需要考虑的性能问题， 请参阅:Running SQL Server in Windows Azure Virtual Machine - Performance Guidelines for Preview。对于虚拟机中使用 SQL Server 的入门指导， 请参阅:Getting started with SQL Server on a Windows Azure Virtual Machine。

使用 Windows Azure 虚拟机时的高可用性和灾难恢复

为了给数据和磁盘提供灾难恢复， Windows Azure 利用最近发布的 Windows Azure Storage 中的 Geo-Replication 功能。所有由程序或者用客户对于客户自己磁盘所做的操作都会被保留， 以便在硬件失败的情况下恢复， 通过使用 Windows Azure Blob Storage， 正如在 Introducing Geo-replication for Windows Azure Storage 这篇博文所述的那样， Windows Azure 中的 Blob 和表会在同一个大陆上的不同信息进行复制， 这样就可以在不为客户增加额外成本的基础上提供了额外的数据持久性保障。当启动虚拟机时， Windows Azure Storage 会自动将您的操作系统和数据磁盘复制到另一个地理位置。

除此之外， 您还要保证虚拟机处于同一个可用集合。同一个可用集合中的多个虚拟机可以保证在网络故障， 本地硬盘故障以及计划内的停机故障时， 程序依然可用。 关于使用在 Windows Azure 虚拟机中的 SQL Server 所涉及的高可用性和数据恢复技术， 请参阅 Migrating to SQL Server in a Windows Azure Virtual Machine。

在 Windows Azure 中迁移到 SQL Server

自 Windows Azure 2012 预览版发布后， 您就可以轻松的 将Windows Server平 台上已经存在的 SQL Server 应用程序迁移到 Windows Azure 虚拟机中。本篇主题提供了如何通过虚拟机中的 SQL Server 将您组织内部的 SQL Server 数据库迁移到云端的概览。本篇主题还包括在将您的 SQL Server 迁移到云端虚拟机中还是迁移到 Windows Azure SQL Database 中的决策指南。

在虚拟机中部署 SQL Server 能够大大减少总体部署成本， 通过轻松将各种企业级程序迁移到 Windows Azure 中减少管理和维护成本。将现有的 SQL Server 应用程序迁移到 Windows Azure 虚拟机几乎不需要任何代码改变。通过使用虚拟机中的 SQL Server， 数据库开发人员和管理人员完全可以使用和组织内部环境一样的开发和管理工具。

• 在什么情况下使用 Windows Azure 虚拟机中的 SQL Server

• 在 Windows Azure 虚拟机和 Windows Azure SQL Database 中做出选择

• 在 Windows Azure 虚拟机中将数据库构架和数据迁移到 SQL Server 中

• 如何准备在组织内部的构架和数据来将其上传到虚拟机中的 SQL Server 实例

o 选择 1： 数据层应用程序 .BACPAC 或.DACPAC 文件

o 选择 2： 备份和还原

o 选择 3： 分离和附加

o 选择 4： 其它 SQL Server 技术

• 如何将您的数据库构架和数据库文件移动到 Windows Azure 虚拟机中

• 当使用 Windows Azure 中的 SQL Server 时的高可用性和灾难恢复

在什么情况下使用 Windows Azure 虚拟机中的 SQL Server

在 Windows Azure 虚拟机中部署 SQL Server 使得很多组织内部所需的场景在云端成为可能， 这包括:

• 快速应用程序开发和测试:在需要某些特定配置的准生产环境中进行数据库程序开发时， 您可以通过包含 SQL Server 的平台镜像或您自己的镜像来创建虚拟机， 用于进行测试和验证， 从而不需要您购买新的硬件。创建完成之后您可以连接到虚拟机， 配置程序并转移一部分数据， 然后进行测试并解决问题。

• 虚拟平台的总体拥有成本:将现有的组织内部虚拟平台迁移到 Windows Azure， 并不需要您像在组织内部虚拟化平台那样为了不断增长的企业应用购买新的硬件， 通过在 Windows Azure 虚拟机中权衡 SQL Server 基础构架来将其迁移到 Windows Azure 中。

• 应用程序数据备份:通过在 Windows Azure 虚拟机中使用 SQL Server 基础构架来备份企业中的数据库， 您不需要像组织内部那样分配计算机、存储空间、网络资源。通过在虚拟机中使用 SQL Server， 您只需要找到哪部分数据库需要备份到云端。在您将程序和数据迁移到云端之后， 使用 Windows Azure 虚拟网络在组织内部和云端之间建立连接并安排相应的工作备份到虚拟机磁盘中。

• 快速按需扩展:在传统的组织内部程序中您需要在某负载高峰时段购买额外的计算机、存储系统、网络资源。使用 Windows Azure 虚拟机中的 SQL Server 基础构架， 您不再需要这样做。

• 数据可用性和移动性: 将SQL Server数 据库部署在 Windows Azure 虚拟机中使得数据库对于组织内部和云端程序都可用。

在 Windows Azure 虚拟机和 Windows Azure SQL Database 中做出选择

下面的决策工作流详细解释了如何在 Windows Azure 虚拟机中的 SQL Server 和 Windows Azure SQL Database 之间做出选择。

• 对于一个新的数据库应用程序， 您既可以选择 Windows Azure SQL Database(SQL Database)也可以选择 Windows Azure 虚拟机中的 SQL Server:

o 如果 SQL Database 支持所有您需要的特性， 在 Windows Azure 中创建一个新的 SQL Database 实例。通过使用 Windows Azure SDK 和对于 Visual Studio 2010、 JAVA 、 PHP 、 Node.js 的插件来进行开发。将您的程序部署到 Windows Azure 并在 SQL Database 中创建表。

o 如果 SQL Database 并不支持所有的并能并且您也不想更改您的应用程序， 通过管理门户支持的 SQL Server 平台镜像来创建一个新的虚拟机。使用 SQL Server Data Tools 来创建一个数据库部署包， 将该包部署到虚拟机中的 SQL Server 中。您可以使用传统的诸如 SQL Server Management Studio 来管理、升级和监测数据库。

• 对于现有的数据库应用程序来说， 首先需要确认哪一个数据库需要迁移到 Windows Azure 虚拟机中的 SQL Server 中。然后， 按照下述两种选项之一进行操作。

o 通过使用 System Center 2012 Virtual Machine Manager 的 physical-to-virtual machine (P2V) or a virtual-to-virtual (V2V)向导来将物理机或虚拟机转换为 Hyper-V 的 VHD 格式。通过 CSUpload 命令行工具 将VHD文 件上传到 Windows Azure 存储系统中。然后您就可以使用刚刚上传的 VHD 部署一个新的虚拟机。您可以使用传统的诸如 SQL Server Management Studio 来管理、升级和监测数据库。

o 在 Windows Azure 管理门户中通过 SQL Server 平台镜像和应用程序层云计算资源来创建新的虚拟机。使用 SQL Server Data Tools 和 SQl Server Management Studio 来创建一个新的数据库部署包。通过使用 Windows Azure SDK 和对于 Visual Studio 2010、 JAVA 、 PHP 、 Node.js 的插件来将已经存在的应用程序层迁移到 Windows Azure 项目中。将应用程序层部署到 Windows Azure 中并在云端访问您的数据。

在 Windows Azure 虚拟机中将数据库构架和数据迁移到 SQL Server 中

当需要将您的数据库和数据迁移到 Windows Azure 虚拟机中的 SQL Server 时， 按照下面步骤进行:

1. 使用 DAC， 备份， 分离来准备好您组织内部的数据库构架和数据文件。更多信息， 请参阅下面 How to prepare the schema and data on–premises and upload them to an instance of SQL Server in a Virtual Machine 小结。

2. 你也可以在将文件上传到 Windows Azure 之前对其进行压缩和加密， 这一步是可选的。

3. 将您的数据库构架， 数据和日志文件上传到 Windows Azure。如果您使用 CSUpload 工具， 首先将您的文件放到虚拟硬盘 （VHD） 然后再 将VHD上 传到 Windows Azure。更多信息， 请参阅下面 How to move your database schema and data file to Windows Azure Virtual Machine 小结。

4. 将您的数据库构架和数据文件装载到虚拟机的 SQL Server 中， 更多信息， 请参阅下面 How to prepare the schema and data on–premises and upload them to an instance of SQL Server in a Virtual Machine 小结。

5. 重新创建那些迁移工具无法在 Windows Azure 虚拟机中创建的元数据。

如何准备在组织内部的构架和数据来将其上传到虚拟机中的 SQL Server 实例

本节讲述了如何准备好组织内部的数据库构架和数据文件。基于您的需求有几种方案可供选择:

• 选择 1： 数据层应用程序 .BACPAC 或.DACPAC 文件

• 选择 2： 备份和还原

• 选择 3： 分离和附加

• 选择 4： 其它 SQL Server 技术

选项 1:数据层应用程序 .BACPAC 或.DACPAC 文件

您可以使用数据层应用程序(DAC)来准备好您的数据库构架和数据文件来由组织内部上传到 Windows Azure:

• 一个.DACPAC 文件:一个.dacpac 文件包括所有 SQL Server 对象的定义-比如说表、视图、与用户数据库有关的实例对象。一个 DACPAC 包主要用于捕获和部署数据库构架， 包括升级现有的数据库。有关从现有的 SQL Server 抽取数据层应用程序 （DAC） 包， 请参阅 Extract a DAC From a Database。

• 一个.BACPAC 文件:一个.BACPAC 文件包括数据库构架以及数据库内的数据。 BACPAC 主要用于捕获构架和数据。在逻辑上和数据库备份等价， 但不能应用于升级现有数据库。有关如何创建.BACPAC 文件的更多信息， 请参阅 Export a Data-tier Application。

您可以将构架和数据库中的数据导出为 BACPAC 文件。然后， 您可以在主服务器中导入构架和数据到新的数据库中。上面的两种功能都由 Server Management Studio 和 DACFx API 这两种数据管理工具支持， 更多信息， 请参阅 MSDN library 中的 Import a BACPAC File to Create a New User Database 和 Microsoft.SqlServer.Dac Namespace。

注意:

• DAC 操作并不支持自动加密 BACPAC 和 DACPAC 文件。对于组织内部和 Windows Azure 之间的数据传输安全， 您需要保证这些加密。当这类文件依赖于 Windows Azure Blob Storage 或企业磁盘存储时， 您也可以另外的加密 bacpac 和 dac 文件来增加额外的安全保证。

• DAC 不支持全文索引。

• 为了提高安全性， 存储在 DAC 包中的 SQL Server 验证方式的登录名都没有密码， 当包被用于部署或升级， 这些登录名被禁用并且密码变为生成的密码。为了启用登录名， 使用拥有 ALTER ANY LOGIN 权限的登陆名进行登录并使用 ALTER LOGIN 开启用登录名并为其分配用户可用的新密码。对于 Windows 验证方式来说该步骤并不需要， 因为此时密码不再由 SQL Server 管理。

选项 2.备份和还原

为了将数据库迁移到另一个 SQL Server 实例或是另一台服务器， 您可以使用备份和还原操作。如果组织内部的 SQL Server 和虚拟机中的 SQL Server 是同一个版本， 您可以复制数据库备份文件到虚拟机中然后在虚拟机中还原数据库。更多信息， 请参阅:Back Up and Restore of SQL Server Databases。

注意:

• 备份和还原要比 DAC 快。

• 您可以为您的数据创建压缩备份。更多信息， 请参阅 Backup Compression。

• 您可以使用您已经熟悉的诸如 SQL Server Management Studio 备份向导和第三方工具来进行操作。

• 当您将数据库迁移到另一个服务器实例中时， 您必须在目标服务器实例中重新创建所有在 master 和 msdb 数据库中所有的依赖对象和实体。更多信息， 请参阅 Manage Metadata When Making a Database Available on Another Server Instance。

选项 3.分离和附加

为了将数据库迁移到另一个 SQL Server 实例或是另一台服务器， 您可以使用分离和附加操作。将数据(.mdf，.ndf)和日志(.ldf)复制到虚拟机的本地目录中然后附加到数据库。更多信息， 请参阅 Move a Database Using Detach and Attach。

注意:

• 分离数据库从 SQL Server 的实例中将其移除但数据和日志文件保持完整。这项操作需要源数据库下线， 这对于升级或移动非常大的数据库非常适用。

• 如果满足下述任何一项条件， 则不能分离数据库:

o 数据库被复制并被发布。

o 存在数据库快照。

o 存在数据库镜像。

o 数据库质疑状态。

o 数据库是系统数据库。

• 推荐您在分离数据库之前首先要进行完整备份来开启差异备份点。

• 您可以使用另外的压缩工具来压缩被分离的文件。

• 当您将数据库附加到另一个服务器实例中时， 为了为用户和程序提供一致的体验， 您或许需要在另一台服务器上重新创建部分或所有的数据库元数据库， 诸如登录名和作业。更多信息， 请参阅 Manage Metadata When Making a Database Available on Another Server Instance。

选项 4.其它 SQL Server 技术

您可以使用下面额外的技术来在服务器之间复制或迁移数据库。

• 您可以使用 SQL Server Management Studio 中的数据库复制向导来在服务器之间复制或迁移数据库， 或是将数据库升级到更新的版本。更多信息， 请参阅 Use the Copy Database Wizard。

• SQL Server 导入和导出向导提供了在数据源之间复制数据库的方法， 并可以创建基本包。更多信息， 请参阅 SQL Server Import and Export Wizard。 SQL Server 导入和导出向导的目标是在源和目的之间复制数据。该向导也可以为您创建目标数据库和目标表。如果您需要复制多个数据库或表， 或者是其它类型的数据库对象， 您更应该使用复制数据库向导。

• 您可以使用生成和发布脚本向导来创建用于在 SQL Server 数据库引擎之间转移数据库的脚本。生成的脚本可以在另一个数据库引擎实例上运行。您还可以使用由数据库发布服务创建的 Web Service 直接将数据库内容发布上去。您可以创建整个数据库的脚本， 或是数据库中特定对象的脚本， 更多信息， 请参阅:Generate and Publish Scripts Wizard。

• 您可以使用 SQL Server Management Object(SMO)库中的 Transfer 类。更多信息， 请参阅 Transferring Data。 SMO 允许源数据库和目标数据库保持在线并且文件移入或导出 Windows Azure Blob Storage 不再需要额外的步骤。但 SMO 的缺陷是使用客户端连接来连接到两端的数据库， 该技术使用了 TDS， 会导致移动大数据库时非常低效。

• Transfer Database Task 可以用于在两个数据库实例之间复制或迁移 SQL Server 数据库。数据库可以使用在线和离线模式进行迁移。当使用在线模式时， 数据库保持附加状态并使用 SQL Management Object(SMO)来复制数据库对象。当使用离线模式时， 数据库被分离， 数据库文件复制或者移动， 在文件成功传输后数据库会被附加到目标实例。

如何将您的数据库构架和数据库文件移动到 Windows Azure 虚拟机中

您可以在连接到远程桌面后使用复制和粘贴来复制小文件(数据库备份、 BACPAC 或是 DACPAC 文件)到虚拟机中。如果您需要复制大的文件， 使用以下几种选项之一:

• 使用 CSUpload 命令行工具(CSUpload.exe)来 将 VHD 文 件上传到 Windows Azure。 VHD 中可能会包含数据库， 更多信息， 请参阅 Creating and Uploading a Virtual Hard Disk that Contains the Windows Server Operating System。

• 将文件上传到同一个数据中心的 Blob 存储中， 然后使用远程桌面连接到虚拟机中然后从 Blob 存储中下载文件， 更多信息， 请参阅 Understanding Cloud Storage。

• 直接将构架和数据库文件复制到虚拟机中的共享目录里。

• 使用 FTP 来转移文件， 更多关于 FTP 的信息， 请参阅 FTP Publishing Service。

• 使用浏览器来在英特网上直接下载数据库， 举例来说， 您可以从 codeplex 来直接下载 AdventureWorks 数据库。

下表描述了在移动文件到 Windows Azure 虚拟机时， 您可以使用的几种常用的传输方法。该表还解释了不同方法的优劣。

传输方式

优势

劣势

使用 CSUpload 工具来 将VHD复 制到 Windows Azure Blob storage

• 快速， 针对 Windows Azure 优化

• 使用工具可以处理不可靠连接

• 安全传输

• 微软只提供了 CSUpload 工具， 如果您需要图形化用户界面， 您可以使用第三方工具

• 在使用 CSUpload 工具上传 VHD 到 Windows Azure 之前， 您首先需要准备好 VHD； 并且需要创建管理证书后上传到门户

• 您需要将上传后的 VHD 文件作为 Windows Azure 虚拟机的一个磁盘进行附加。

文件复制到虚拟机共享

• 使用简单

• 多种可用客户端工具

• 文件直接放置到虚拟机

• 需要 VPN 连接

• 只有少量文件复制工具支持断点续传

FTP 文件传输

• 使用简单

• 多种可用客户端工具

• 文件直接放置到虚拟机

• 实现安全传输会

比较困难。

点击这里查看表为图像

对于有关如何在虚拟机中安装、配置和部署 SQL Server， 请参阅 Tutorial: Provisioning a SQL Server Virtual Machine on Windows Azure。 该教程会描述了如何使用 Windows Azure 管理门户从画廊中选取镜像来安装虚拟机。除此之外， 该教程还展示了如何使用远程桌面连接连接到虚拟机以及如何使用 SQL Server Management Studio 连接到虚拟机中的 SQL Server。

其它补充信息， 请参阅:Getting Started with SQL Server on a Windows Azure Virtual Machine 和 Creating and Uploading a Virtual Hard Disk that Contains the Windows Server Operating System。

当使用 Windows Azure 中的 SQL Server 时的高可用性和灾难恢复

在 Windows Azure 预览版中， 不存在一些特性， 这些特性包括无侦听器的 Always On 可用性组和数据库镜像、事务日志传送以及事务日志复制这类 SQL Server 所支持的高可用特性， 在 Windows Azure 原生支持高可用性。如果虚拟机所在的主机硬件故障， 则 Windows Azure 会从另一台机器上恢复该虚拟机。类似的， 如果虚拟机所在的主机硬件升级， Windows Azure 会自动升级您的虚拟机。为了防止在这种情况下数据不可用， 我们推荐您实现在 Windows Azure 环境下 SQL Server 的高可用性。除此之外， 为了防止由于用户误操作和应用程序错误导致的数据和配置信息丢失， 我们推荐您定期在虚拟机中备份数据库。更多信息， 请参阅 TechNet 维基上的 High Availability Best Practices for running SQL Server in Windows Azure Virtual Machine。

警告:

当前， 在 Windows Azure 虚拟机环境中并不支持 SQL Server 故障转移集群。除此之外， 除了以使用 Listener 的 SQL Server Always On 可用性组为目的之外， 您不能因为任何目的使用 Windows Server 故障转移。

点击这里查看表为文字

点击这里查看表为文字