《Windows Azure Platform 系列文章目录》

   Azure SQL Database (19) Stretch Database 概览

     Azure SQL Database (20) 使用SQL Server 2016 Upgrade Advisor

     Azure SQL Database (21) 将整张表都迁移到Azure Stretch Database里

     Azure SQL Database (22) 迁移部分数据到Azure Stretch Database 

  注意:本节介绍的是,使用国内由世纪互联运维的Azure China Stretch Database,因为国内的Azure和海外的Azure对应的DNS Name略有不同,请读者仔细甄别

  本节使用的T-SQL语句,在这里下载

  在上一节内容中,Azure SQL Database (20) 使用SQL Server 2016 Upgrade Advisor

  我们发现Sales.OrderTraking这张表,可以迁移到Azure Stretch Database。没有兼容性问题

  

  接下来,本章将介绍如何将这张表的所有内容,都迁移到Azure Stretch Database里。

  准备工作:

  1.首先我们使用Azure China管理平台:https://manage.windowsazure.cn/

  输入Azure China的用户名和密码,然后登陆。

  2.点击SQL是数据库,添加新的SQL Database Server服务器(请注意:是创建Server,不是创建Database,单独创建Server不会产生任何费用)

  

  3.创建的时候,记得选择"启用最新的SQL数据库更新(V12)"

  

  笔者已经预先创建了云上的Server Name: l3cq1dckpd

  用户名:sqladmin,密码:Abc@123456

  注意哦,这些信息下面会使用的。

  4.创建完毕后,记得把本地笔记本的公网IP地址,加入到Azure SQL Database Server的IP白名单里。

  

  

  开始使用:

  1.我们在本地笔记本电脑,打开SQL Server Management Studio (SSMS),运行以下T-SQL语句。  

USE AdventureWorks2016CTP3
GO SELECT ot.SalesOrderID, ot.CarrierTrackingNumber, ot.OrderTrackingID, ot.TrackingEventID, te.EventName, ot.EventDetails, ot.EventDateTime
FROM Sales.OrderTracking ot JOIN Sales.TrackingEvent te ON ot.TrackingEventID = te.TrackingEventID
ORDER BY ot.SalesOrderID, ot.TrackingEventID;

  可以观察到,因为数据表都保存在本地SQL Server 2016数据库中,所以虽然一共有188790行,但是查询结果不超过2秒

  2.运行以下T-SQL语句,对本地SQL Server 2016,打开归档功能

EXEC sp_configure 'remote data archive' , '';
RECONFIGURE;

  3.对云端Azure SQL Database的用户名和密码,进行加密,加密的密码同SQL Database的密码:

USE Adventureworks2016CTP3;
CREATE MASTER KEY ENCRYPTION BY PASSWORD='Abc@123456'
CREATE DATABASE SCOPED CREDENTIAL AzureDBCred WITH IDENTITY = 'sqladmin', SECRET = 'Abc@123456';

  4.将本地的SQL Server 2016的归档目标,指向到微软云SQL Database Server(l3cq1dckpd.database.chinacloudapi.cn)

  这个l3cq1dckpd.database.chinacloudapi.cn,是我们在准备工作中,创建的新的服务器

ALTER DATABASE [AdventureWorks2016CTP3] SET REMOTE_DATA_ARCHIVE = ON
(SERVER = 'l3cq1dckpd.database.chinacloudapi.cn', CREDENTIAL = AzureDBCred);

  上面的语句执行时间有点长。请注意:到目前为止,还没有任何的本地SQL Server 2016表数据,迁移到云端Stretch Database里。

  5.运行以下T-SQL,将Sales.OrderTracking表中的所有内容,都迁移到Azure Stretch Database里

  注意:MIGRATION_STATE = OUTBOUND

ALTER TABLE Sales.OrderTracking SET (REMOTE_DATA_ARCHIVE = ON (MIGRATION_STATE = OUTBOUND));

  运行完毕后,本地SQL 2016数据库中的表Sales.OrderTracking的所有数据行,才开始异步迁移。

  6.请注意,执行步骤5的语句的时候,其实数据是异步进行迁移的

  我们可以执行以下语句,查看归档数据迁移的进度。

SELECT * from sys.dm_db_rda_migration_status

  注意:如果上面的语句执行没有结果,请稍等片刻后继续执行。会看到以下结果:

  请注意:时间为UTC时区,Migrated_Rows表示已经迁移到云端的Stretch Database的数据行,可以看到每次迁移的数据量是9999行

  7.等到步骤6中的T-SQL产生执行结果了,我们分别执行以下语句。

USE AdventureWorks2016CTP3
GO
--显示本地数据行和数据容量
EXEC sp_spaceused 'Sales.OrderTracking', 'true', 'LOCAL_ONLY';
GO --显示云端Stretch Database的数据行和数据量
EXEC sp_spaceused 'Sales.OrderTracking', 'true', 'REMOTE_ONLY';
GO

  执行结果如下图:

  

  图的上半部分,显示本地SQL Server 2016的表Sales.OrderTracking,一共有数据行188790

  下半部分,显示云端的Stretch Database的表Sales.OrderTracking,一共有0行数据

  8.我们稍等片刻后,继续执行步骤7的语句。结果如下图:

  

  可以看到,本地SQL Server 2016的表Sales.OrderTracking的所有数据,都迁移到了云端Stretch Database。

  本地0行,云端Stretch Database 188790行。

  9.我们登陆Azure China管理平台:https://manage.windowsazure.cn/

  可以看到在云端,已经有新的Stretch Database,版本为 DS100

  

  

  10.然后我们重复执行步骤1中的查询语句,因为Sales.OrderTracking数据从本地迁移到了云端,所以查询时间变长了。

  之前本地执行2秒,现在在云端查询,需要18秒左右。图略。

  11.请记住,可以迁移到云端(但未迁移)的SQL数据(表Table或者试图View),或者已经迁移到Stretch Database云端的SQL数据,无法执行UPDATE和DELETE操作

  插入测试数据到云端Stretch Database的表Sales.OrderTracking,没问题:

---插入测试表
INSERT INTO [Sales].[OrderTracking]
([SalesOrderID],[CarrierTrackingNumber],[TrackingEventID],[EventDetails],[EventDateTime])
VALUES('','046DFAA-F901-442A-9D09-67',,'This Data is generated by Lei Zhang',GetDate())

  但是无法执行UPDATE和DELETE操作

--这句话会报错
UPDATE [Sales].[OrderTracking] SET [CarrierTrackingNumber]='' WHERE [EventDetails]='This Data is generated by Lei Zhang'

  12.现在表Sales.OrderTracking数据都保存到云端Stretch Database,如果我们想关闭归档功能,可以执行以下语句。

--Disable Stretch Database and bring back remote data
ALTER TABLE Sales.OrderTracking SET (REMOTE_DATA_ARCHIVE (MIGRATION_STATE = INBOUND));

  13.重复执行步骤7的语句,可以观察到数据异步从云端,迁移到本地SQL 2016。

USE AdventureWorks2016CTP3
GO
--显示本地数据行和数据容量
EXEC sp_spaceused 'Sales.OrderTracking', 'true', 'LOCAL_ONLY';
GO --显示云端Stretch Database的数据行和数据量
EXEC sp_spaceused 'Sales.OrderTracking', 'true', 'REMOTE_ONLY';
GO

  执行结果略。

  14.最后请大家记住,如果要完全关闭归档功能,除了执行步骤13以外,还需要登陆Azure China管理平台:https://manage.windowsazure.cn/

  删除之前迁移产生的数据库。

  

Azure SQL Database (21) 将整张表都迁移到Azure Stretch Database里的更多相关文章

  1. SQL中的每一张表都必须设有主键吗

    问题描述: 公司的数据库表有时候会看到没有主键的,SQL中的每一张表都必须设有主键吗? 主键的作用: 1)保证实体的完整性: 2)加快数据库的操作速度: 3)在表中添加新记录时,数据库ACCESS会自 ...

  2. sql用逗号连接多张表对应哪个join?

    转自:http://blog.csdn.net/huanghanqian/article/details/52847835 四种join的区别已老生常谈: INNER JOIN(也可简写为JOIN): ...

  3. 转载:sql用逗号连接多张表对应哪个join?

    http://blog.csdn.net/huanghanqian/article/details/52847835 四种join的区别已老生常谈: INNER JOIN(也可简写为JOIN): 如果 ...

  4. Mysql InnoDB行锁不使用索引锁表的时候会锁整张表

    原文:http://www.thinkphp.cn/topic/41577.html 如果使用针对InnoDB的表使用行锁,被锁定字段不是主键,也没有针对它建立索引的话.行锁锁定的也是整张表.锁整张表 ...

  5. (转) 【oracle调优】优化全表扫---cache整张表或索引

    情景分析: 1)某查询必须要走全表扫描 2)该查询执行的频率相当高 3)对执行时间的要求也相当苛刻的话 4)数据库的IO比较吃紧 5)数据库的内存比较宽松 6)该表的大小没有大到离谱 以上情况下,可以 ...

  6. Django项目:CRM(客户关系管理系统)--41--33PerfectCRM实现King_admin编辑整张表限制

    readonly_table=False#默认表单不锁定 readonly_table=True#默认表单不锁定 # forms.py # ————————19PerfectCRM实现King_adm ...

  7. sql语句 怎么从一张表中查询数据插入到另一张表中?

    sql语句 怎么从一张表中查询数据插入到另一张表中?  ----原文地址:http://www.phpfans.net/ask/MTc0MTQ4Mw.html 比如我有两张表 table1 字段 un ...

  8. oracle中查询某张表都被哪些表参照了

    起因: 系统测试的时候发现如果某条记录已经被引用了,这个时候删除这条记录会引起数据不一致,系统会报错.比如警员信息,在考勤记录表里会引用警员ID,如果考勤记录表中已经存在这个警员ID了,这时从警员表中 ...

  9. Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台

    <Windows Azure Platform 系列文章目录> 本文将简单介绍,如何将企业内现有的ASP.NET应用程序迁移到Azure PaaS平台. 因为在迁移过程中,可能需要对现有的 ...

随机推荐

  1. SpringMVC(一) SpringMVC概述

    SpringMVC为展现层提供的基于MVC设计理念的优秀的WEB框架,是目前主流的MVC框架之一.Spring 3.0之后,超越Struts2成为最优秀的MVC框架. SpringMVC通过一套MVC ...

  2. [spring源码学习]十、IOC源码-conversionService

    一.代码示例 1.我们在之前的Person类里新增一个两个属性,分别是客户的兴趣和生日,兴趣爱好有很多,我们使用list进行保存,生日使用日期进行保存 public class Person { pr ...

  3. php sprintf 函数的用法

    sprintf() 函数把格式化的字符串写入变量中. arg1.arg2.++ 参数将被插入到主字符串中的百分号(%)符号处.该函数是逐步执行的.在第一个 % 符号处,插入 arg1,在第二个 % 符 ...

  4. iOS XMPP 通信协议实现 图形化直观感受

    第一次随笔,实在不知写点什么有用的东西,那就分享一下本人最近的研究所得吧! 是关于iOS-XMPP-通信协议的实现,具体代码比较复杂,三言两句也实在难表达清楚,网上已有很多关于iOS XMPP协议的讲 ...

  5. BZOJ2109: [Noi2010]Plane 航空管制

    Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频 发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此, 小X表示很不满意. 在这次来烟台的 ...

  6. ThreadPoolExecutor源码学习(1)-- 主要思路

    ThreadPoolExecutor是JDK自带的并发包对于线程池的实现,从JDK1.5开始,直至我所阅读的1.6与1.7的并发包代码,从代码注释上看,均出自Doug Lea之手,从代码上看JDK1. ...

  7. HDu--我要拿走你的蜡烛

    我要拿走你的蜡烛 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  8. Usaco*Monthly Expense

    Description Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后N(1<=N<=100 ...

  9. cocos2d-x:Particle System(粒子系统)

    一.粒子系统简介: 粒子系统最早出现在80年代,主要用于解决由大量按一定规则运动(变化)的微小物质在计算机上的生成和显示问题.Particle System的应用非常广泛,大的可以模拟原子弹爆炸,星云 ...

  10. asp.net 验证码(一)Session

    1.模板页 //创建网页模板 输入验证码文本框 并且将文本框中的内容发送的后端验证中去 <p>请输入验证码:<input type="text" name=&qu ...