在业界热切的期盼中,微软终于在上个月正式推出了SQL Server 2008。虽然大家对这个最新版SQL Server的期盼程度没有当年对待2005登场时那么热烈,但总的来说,SQL Server 2008还是有很多显著的改进,从资源管理到基于策略的管理就让不少的数据库管理员希望能尽快升级。其中也有一些引人注目的变化和对性能的补充是针对开发人员的。如果开发人员在正式发布之前曾花费不少时间来评估SQL Server 2008社区技术预览版的话,那么就会发现其中很多改进的功能值得进一步细细品味。
T-SQL的甜点
为了让那些大部分时间都得用在闷头写T-SQL语句的开发人员活得轻松自在一些,微软在SQL Server 2008中增加了两样新甜点:表值参数(table-valued parameter)和新的MERGE语法。
表值参数,简而言之,就是能够被传递到存储过程或函数的包含了多个数据行的参数。很多开发人员如果要编写不断重复被调用来执行完全相同操作的存储过程,那么表值参数就能解决这个问题。此外,在很多情况下,表值参数还可以帮助清除和简化临时表。
让纯T-SQL开发人员来编写表值参数对他们来说可能有一点棘手,但其实也不是真的那么难学。基本上,首先必须创建一确切的用户自定义数据类型,其中涵盖了表的定义。然后要往表里填充数据。表填入数据后,使用Readonly关键字,在只读状态下传递表值参数给其他代码,也就是说,你不能对代码(引用了该参数)中的表值参数执行数据操作语言或DML等操作,等同于你不能修改表内的数据。执行完上面的步骤,就可以将表值参数传递到存储过程或函数了。开发人员可以利用表值参数在T-SQL内直接抽取一定的数据记录(或者构建一个记录集),然后将记录集传递到一个存储过程,应用到业务逻辑。这比其它一些以前常用的解决方法都要好用多了。
下面要提到另外一个和T-SQL相关的新玩意,那就是新的MERGE语句,有了它开发人员用一条语句就可以将插入、更新、删除等复杂操作全部执行完。利用这个新语句,开发人员可以将数据源和目标表或目标视图联结(join)起来,然后根据初始联结的结果,按照源数据表来对目标对象表的数据执行上述操作。基本上,就是用MERGE语句来比较某个表和另外一个数据集的异同,然后根据比较的结果来对目标表的数据进行插入、更新或删除操作,使目标表数据和源表一致。还没有这个MERGE语句的时候,我们一般要通过比较源数据和新数据的异同对数据集进行迭代,或者构建查询来更新已有的记录、插入新记录或删除旧记录,每次只能执行一种操作。
数据类型的盛宴
SQL Server 2008还推出了一整桌新数据类型的大餐,既有旧数据类型改进的新版本也有全新的数据数据类型,用来支持一些特定的复杂应用。全新的数据类型包括Date和Time数据类型,显然是将前一个版本中标准的datetime数据类型一分为二而成的。借此,开发人员就能够在存储日期和时间数据时品尝到一些新的选项。
此外,值得大家注意的是Datetime2和Datetimeoffset这两种数据类型。Datetime2类型存储的时间精度更高(达到秒的小数点后七位,也就是100纳秒,而不是传统的毫秒),且可以使用的日期范围更广(可以从0001-01-01开始,而非传统的1753-01-01)。Datetimeoffset类型存储的精度以及准确度都和Datetime2一样,但还提供了设置时区偏移量的功能,可以用来跟踪跨时区日期和时间的转换。
其他数据类型还包括流数据、层次数据和空间数据等。从技术层面上讲,FILESTREAM的存储方法并不是一种数据类型,不过它可以允许SQL Server应用程序直接在文件系统上存储图片和文档非结构化数据。应用程序可以利用新的流访问接口(Streaming API)来访问文件系统中的数据,同时维护和正在被访问的文件相应的结构化关系数据的事务一致性。对于层次数据,SQL Server 2008引入了一种名为Hierarchyid的数据类型,用来管理应对一个表内层次结构关系。最让人垂涎欲滴的新功能也许是对空间数据类型的支持。空间数据类型引入了构建地理导向应用的功能,无需额外的应用程序来操纵数据。空间数据设置了两种不同的数据类型:Geometry和Geography。Geometry数据类型采用欧几里德的平面坐标系统来存储平面空间数据,如距离和方向数据。Geography数据类型采用圆形地球坐标系来记录数据,也就是经纬度坐标之类数据。
绿色无毒的SQL Server
保护数据安全问题对于数据库开发人员和管理员来说都是一个日益严峻的难题。政府不断的出台新的法律法规来为数据的访问和存储把关。此外,即使现在黑客比以往任何时候更横行无阻,客户和用户还是越来越依赖于这些存储着个人重要数据的系统的安全来保护数据。SQL Server 2008引入了一些新特性来帮助程序开发人员和数据库管理员确保数据的安全。这些新特性包括透明数据加密(Transparent Data Encryption,TDE)和可扩展的密钥管理(Extensible Key Management,EKM)。
透明数据加密在SQL Server的结构中引进了新的加密层。透明数据加密通过使用本地存储的对称金钥(Symmetric Key)或保护数据库服务器外部的非对称金钥(Asymmetric Key)来保护数据。透明数据加密实际上是加密静止数据(备份磁盘或磁带上的数据)的,可执行往返于磁盘的数据文件和日志文件之间的数据的实时I/O加密和解密。透明数据加密使用AES和3DES加密算法,引进了新安全层,适用于任何应用程序,且无需对现有的应用程序做任何更改。
透明数据加密是在服务器水平生效的,所以一旦启用此功能,整个数据库都会被加密,但数据库内部的操作还是正常进行。要注意的是,透明数据加密不会保护正从服务器传输到远程应用程序的数据,它只是保护磁盘上存储的数据(或磁带备份文件的数据)。
可扩展的密钥管理则通过使用外部管理的加密金钥来扩展SQL Server保护数据的能力。这意味着,如果客户使用了“硬件安全模块”(HSM),甚至使用了外部软件安全模块,那么可以将这些模块在SQL Server注册,从而使用这些密钥来一起加密和解密数据。当和透明数据加密一起联用时,保护圈就完整了,不仅保护了SQL Server上所有的数据,也保护了传入和传出的数据。
SQL Server 2008为开发人员提供了很多数据库内部新工具,来帮助他们更有效地存储数据和对数据进行操作,甚至还可以处理以前必须保存在数据库外的数据类型。
等了3年,这顿大餐终于正式上桌了,味道好坏,不妨一试。