【IT168专稿】微软的SQL Azure并不完全支持SQL Server 2005或SQL Server 2008的所有功能,因此,在数据转移的时候必须十分小心。目前SQL Azure也还没有提供任何管理工具(除了SQL Server Management Studio,当然不能完全靠它的Object Explorer来做转移)做这类的管理作业,微软在Codeplex网站上有一个SQL Azure Migration Wizard的工具,到是十分适合采用(这部分我们稍后会提到)。
将既有的数据库数据转换到SQL Azure上面,或是把SQL Azure上面的数据转下来,这都牵扯到数据的输入和输出。如果我们单单针对将数据输入和输出的作法来看,对天天在处理数据库的行家而言,这并不是甚么新鲜的事了,方法也很多,而传统的大批数据转换的做法也大都能适用,例如:
运用SQL Server提供BCP工具程序(请参考MSDNLibray的BCP Utility)。
用SSIS(SQL integration server service,使用Visual Studio2008)。
运用ODBC and ADO.Net 提供的API 功能。
另外,微软的Sync Framework也是一个好选择。这一点我们会在稍后作说明。
云端解决方法
每次读取一次记录然后再写入一次记录,还不如一次性读入一堆数据放置在云端,然后再以本地的方式做大笔数量的写入。
图1 使用Worker role做Bulk传送
如图1所示,基于这个原理运用Web Role作为用户的接口负责读取上传的数据,并将数据放入Blobs中,然后产生Jobs的工作项。至于Worker Role的部分则一直负责观察Jobs的工作项目,一旦有工作项目进入到Blobs中,就会把数据读出来,再运用BCP的工具程序一次性写入到目标数据库中,完成一个Jobs的工作。
使用Blobs
我们使用Blobs是因为它被设计来储存大量的文字及二进制数据格式。非常简单的读取方式,让我们只要运用REST API就能上传、管理、组织及维护这些数据。Blobs有三种资源,分别是Account、Containers及Blobs,它的架构观念简洁且存取容易,因此很容易被拿来再运用。所谓的拿来再运用并非空穴来风,其实它在设计之初就有这个预先的计划,提供非结构化的二进制的庞大存储器;让它具有不受任何限制的基础,可以被用来储存任何数据或索引。Blobs有二种,Block blob能存储最高200GB的数据,而Page Blob能支持最高1TB的数据,主要用于随机读写用。例如Windows Azure XDrive就是运用Page Blob做出来的一块类似NTFS格式硬盘的仿真装置,相当能够吸引哪些熟悉文件系统的人来使用它。
SQL Azure 的存取方式
SQL Azure采用DB Service的方式,与Amazon Web Services的Simple DB类似,可以只用Database的Service(不过存取的命令就不同了,Simple DB是透过Web REST或SOAP接口,而SQL Azure则是透过OLE DB/ODBC/ADO.NET,并透过T-SQL语法来做存取)。与Google App Engine的存取模式不同,Google App Engine内建的Database不能单独存取,只能透过部署在App Engine上面的Application进行存取。
既然可以进行独立存取,便可运用Microsoft Cloud Computing开发Web Application,那样将会有两种模式:
(1)Web Application部署在Windows Azure,并由SQL Azure提供Database Services。
(2)Web Application部署在自家环境,并由SQL Azure提供Database Services。
然而,不管使用哪一种模式,Web Application都是透过传统SQL Server的1433 Port来存取SQL Azure。
因此,若是Web Application or Developer在防火墙里面对外的联机被管制的话,那么使用上述第一个模式会是比较方便开发。
不管采用哪一种connecting String,简单来说,该services就是listen 在tcp:servername.ctp.database.windows.net:1433这个位置。
只要你用对联机的方法(ODBC、ADO.NET、OLE DB)并且对外的网络通畅,应该就能顺利存取:
(1)初次使用,最常用的应该会是现有的SQL Server 2008 SSMS管理工具来连结,虽然SQL Azure 与SQL Server并不完全兼容,但是使用SSMS是最
容易顺利连上一种方式。首先正确的输入下列信息:
Server name 请输入:[你的sql azure server name].database.windows.net账号则输入:[你的sql azure 账号]@[你的sql azure server name]
连进去后,SSMS 会自动记住这个账号,便利下一次的操作(好的设计)。
图2 SSMS连接方式
如下的联机错误信息,表示你尚未在SQL Azure的防火墙(Firewall)之下设定你要通过的IP为位置值。
图3 联机错误信息
可以使用SQLCMD这个DOS下的工具来做联机及管理。这个工具位于你本地端的SQL Server安装位置的\Tools\Bin文件夹下。以下是简单的示例:
联机:sqlcmd -S [servername].ctp.database.windows.net -U
[username]@[servername] -d [database name]
密码:
执行命令:首先建立table,注意在SQL Azure 上面的table 一定要有clustered index (例如:xxxx.dbo,index 指的就是.dbo)。
(
job_id smallint identity(1,1) primary key clustered,
job_desc varchar(50) not null
)
go
理由:这是因为SQL Azure会自动帮你做Table Partitioning以提供Scalability
能力的缘故。
插入资料:
manager')
go
信息:(1个受影响的数据列)
查询: 1>select * from jobs
2>go
job_id job_desc
(3)透过ODBC 的方式连结,使用windows的ODBC数据源管理员一样,输入server位置、账号、密码后进行联机。
(4)透过ADO.NET来联机,只要Connection String 的设定正确,是可以正常用ADO.NET来存取到的,但如果你是在公司内部开发,那么要注意对外联机1433 port是否有被firewall阻隔。
(5)透过3rd party tool大部分现成的SQL联机工具都能再正确设定后立即联机到您的SQL Azure。
总结: 本文对现有数据迁移转换到云端SQL Azure服务的方法进行了较细致的介绍,并且对云端采用的解决方法、使用Blobs和SQL Azure的存取方式也做了分析和讲述,从而使得读者进一步认识数据迁移到云的方法和技巧。