本文共 4092 字,大约阅读时间需要 13 分钟。
《》
注意:本节介绍的是,使用国内由世纪互联运维的Azure China Stretch Database,因为国内的Azure和海外的Azure对应的DNS Name略有不同,请读者仔细甄别
本节使用的T-SQL语句,在下载
在上一节内容中,
我们发现Sales.OrderTraking这张表,可以迁移到Azure Stretch Database。没有兼容性问题
接下来,本章将介绍如何将这张表的所有内容,都迁移到Azure Stretch Database里。
准备工作:
1.首先我们使用Azure China管理平台:
输入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.EventDateTimeFROM Sales.OrderTracking ot JOIN Sales.TrackingEvent te ON ot.TrackingEventID = te.TrackingEventIDORDER BY ot.SalesOrderID, ot.TrackingEventID;
可以观察到,因为数据表都保存在本地SQL Server 2016数据库中,所以虽然一共有188790行,但是查询结果不超过2秒
2.运行以下T-SQL语句,对本地SQL Server 2016,打开归档功能
EXEC sp_configure 'remote data archive' , '1';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 AdventureWorks2016CTP3GO--显示本地数据行和数据容量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管理平台:
可以看到在云端,已经有新的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('6666','046DFAA-F901-442A-9D09-67',1,'This Data is generated by Lei Zhang',GetDate())
但是无法执行UPDATE和DELETE操作
--这句话会报错UPDATE [Sales].[OrderTracking] SET [CarrierTrackingNumber]='6666' WHERE [EventDetails]='This Data is generated by Lei Zhang'
12.现在表Sales.OrderTracking数据都保存到云端Stretch Database,如果我们想关闭归档功能,可以执行以下语句。
--Disable Stretch Database and bring back remote dataALTER TABLE Sales.OrderTracking SET (REMOTE_DATA_ARCHIVE (MIGRATION_STATE = INBOUND));
13.重复执行步骤7的语句,可以观察到数据异步从云端,迁移到本地SQL 2016。
USE AdventureWorks2016CTP3GO--显示本地数据行和数据容量EXEC sp_spaceused 'Sales.OrderTracking', 'true', 'LOCAL_ONLY';GO--显示云端Stretch Database的数据行和数据量EXEC sp_spaceused 'Sales.OrderTracking', 'true', 'REMOTE_ONLY';GO
执行结果略。
14.最后请大家记住,如果要完全关闭归档功能,除了执行步骤13以外,还需要登陆Azure China管理平台:
删除之前迁移产生的数据库。
本文转自Lei Zhang博客园博客,原文链接:http://www.cnblogs.com/threestone/p/5826310.html,如需转载请自行联系原作者