频道直达:新闻 - 组网 - 安全 - 服务器 - 存储 - 系统 - 应用 - 开发 - 数据库 - 前沿 - 技术人 - 培训 - 求职 - 读书 - 教程 - 专题 - 产品 - 案例 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

SQL Server数据库引擎.NET CLR环境数据库管理员向导(10)

作者: Kimberly L. Tripp/Founder/SQLskills.com 出处:51CTO.com 2007-02-27 17:56    砖    好    评论   进入论坛
阅读提示:Microsoft® SQL Server™ 2005依靠Microsoft .NET Framework Common Language Runtime(CLR)环境为数据库应用程序程序员提供了一个丰富的,全新的开发平台。新的性能使数据库管理员 (DBA)获得了全新的角色和职责。这本白皮书帮助数据库管理员 来决定如何适当的使用这个新特性,以及在其它数据库产品可能提供更好的操作性,灵活性或性能时提供指导。

排错

这部分内容给出了数据库管理员对.NET Framework设计API数据库引擎的排错和代码检查的一些指导方针。当然这不是一个完整的列表。我们还是推荐所有的开发者和数据库管理员们应该聚在一起然后制定出符合自己的一个标准。我们以当前流行的Transact-SQL标准作为出发点,来确定一些相对坏的项目的,创建一个好的项目的公认的一些注意点。

Lack of Set-based Operations (Loops within Loops)

那些对于SQL Server 语法并不熟悉的开发者可能不得不用一些非常复杂的语句来替代像JOIN 或者SELECT等语句。例如一个表的处理需要其他外部表的每行数据时,那么下面这种处理方式是正确的,具体代码如下:

getdata()
foreach (datarow in datatable)
getdata()
foreach (datarow in datatable2)
etc

它通常是被一个简单的INNER JOIN语句所替代。

这个行为在SQL Server Profiler中很容易被发现,因为其内部的循环会在服务器上产生大量的查询。

在CLR中的CPU-Intensive处理

一些复杂的逻辑结构在.NET Framework 语言中要比在Transact-SQL结构中更容易去处理。所以如果SQL Server 不能像中间服务器一样做一些负载平衡,那么可能会成为瓶颈。在sys.dm_clr_appdomains表中的一列可以列出有关CLR CPU消耗的检测数据。

如果按照文章前面的建议进行使用,那么这点将不是什么大问题。因此,middle-tier的迁移功能将是一个很小的代码任务。

例举内存中的大的对象

在SQL Server 2000中的Transact-SQL并不提供创建大对象的方法。在小的存储过程中加入大的IMAGE 或者 N/TEXT参数这一方法的能力可能是最差的。很多的内容都将作为@TABLE 变量或#TEMP 表贮存在TempDB中。然而在SQL Server 2005 的.NET Framework 运行时中就不是这个样子了,在ADO.NET数据集和用户自产收集中可以放置大的和潜在的大内存要求。你应该使用系统检测计数器来检测代内存的使用情况。因为在从开发到生产的整个过程中我们应该都可以保证代码流的稳定。

这些解决方案与在middle-tier上获得的是相似的。

◆使用分页来得到内存中的数据子集。
◆确认数据已经提交。
◆移动聚合数据替代具体的细节数据。

出错处理

数据库引擎.NET Framework 设计API支持不同语言的出错处理。所以出错处理是非常容易的,任一个外部操作,例如数据库,文件系统或者web服务访问,以及操作的上溢出,下溢出的处理方法都在出错处理中有预先的安装。

结合SQLContext.Pipe.ExecuteAndSend()使用RAISERROR命令可以返回SQL Server 的错误。注意在SQL Server 2005 中Transact-SQL的出错处理有了一个很大的改变。开发者应该对他们的代码使用RAISERRORS这一处理。

提供一个例外比返回错误代码对开发者来说更加有意义。因为开发者可能会忘记标记@@ERROR。

不安全的代码问题

数据库管理员对于UNSAFE注册代码非常难以控制。尤其是在共享实例中。因为在开发者的被允许调用非管理代码。这是一个未经授权的任务。在其他的代码安全模式下,SQL Server 只关注那些注册的程序集和仅授权级别的调用。

Unsafe代码和不可管代码在高权限下可以被完全访问。因此,在部署前应该进行一次全面的代码检查。尤其应该注意所有的参数以及SQL Server 上的连接。在部分升级时确认事务的边界。最后我们应该确任代码在服务器上不会有错误信息提示显示。

用户自定义类型问题

用户自定义类型使用时应特别小心。注意他的8-KB的限制,以及他们的其他限制:

◆他们将作为一个自动对象进行读写。
◆执行代码在架构级别使用,所以对于现有类型的改变的潜在花费是很高的。

Beyond SQL Server 2005

SQL Server 2005 的.NET Framework 运行时环境同时装载了Visual Studio 2005。预期的服务包和热修补并没有改变版本,然而,这对于SQL Server 未来的发展并不是一个好的设定。作为.NET Framework 的发展,未来的SQL Server 版本将会转化到可以使用这些新设备。

下面的表可以用于应用程序开发者使用SQL Server 的.NET Framework 测试应用测试。注意如果CLR不可用,查询将返回一个空的字符串。通常来说,主要的版本都需要做检查,除非只是为了测试某些特性而发布的版本。

-- Will return the version if the .NET Framework has been used
SELECT p.[value]
FROM sys.dm_clr_properties AS p
WHERE p.[name] = N'version'

-- Will return the version even if the .NET Framework is unused
-- Test the version of the Microsoft .NET Runtime Execution Engine
SELECT lm.product_version
FROM sys.dm_os_loaded_modules AS lm
WHERE lm.[name] LIKE N'%\MSCOREE.DLL'

在这个白皮书出版的时候,windows只能处理一个单一的.NET Framework 运行时环境。虽然这一点在今后的版本中还没有被确定。但是未来的SQL Server 版本可能有一下特性:

◆要求代码重编译 – 确定数据库管理员 和加载到SQL Server 上的源代码版本是同步的。同时使得重编译更加简单。
◆要求代码修改– 利用新的API的优势同时为现有的选项设计不当的API增加选项。管理源文件以及API使用的情况。
◆要求多个 .NET Framework运行时在SQL Server “down level” 代码检查时加载。它可以在性能开销方面提供更好的保护。

数据库管理员要管理他们公司的源代码,检测开发API的使用,还要花时间保护代码的修改。及在需要代码重写的情况下保护系统。

概要

这个白皮书从传统的数据库管理员的角度探究了SQL Server 2005 .NET 公共语言时的整合。

下面的部分提供了:

◆使用这个新的能力提供的对于处理和程序的安全以及成功部署的确定。
◆为数据库管理员 提供了更好的目录数量管理和动态管理视图查询的能力。更简单的访问对象列表,了解系统状态的信息。
◆在调试和跟踪方面为数据库管理员 提供可以发挥起最大生产力的工具集。

我们关心的问题是能否提出一个新特性并不适应的例举环境。丰富的SQL Server 2005 CLR整合使得再各种情况都可以很好的满足人们的要求。

在这篇文章中我们要学习的最重要的就是CLR整合提供了一种新的,强有力的应用程序开发工具包,以使得在许多的场景下生产力被大大提高,并且为许多企业环境提供了新的可选项。

SQL Server 2005的额外资料

在Microsoft.com, MSDN和 TechNet上的免费资料

MSDN SQL Server Developer Center

MSDN 白皮书: An Overview of SQL Server 2005 for the Database Developer
MSDN白皮书: Processing XML Showplans Using SQLCLR in SQL Server 2005
MSDN白皮书: Using CLR Integration in SQL Server 2005
MSDN白皮书: XML Support in Microsoft SQL Server 2005
MSDN白皮书: XML Options in Microsoft SQL Server 2005
MSDN白皮书: What's New in FOR XML in Microsoft SQL Server 2005
MSDN白皮书: XML Best Practices for Microsoft SQL Server 2005
MSDN白皮书: Usage Scenarios for SQL Server 2005 Native Web Services
MSDN白皮书: Managed Data Access Inside SQL Server with ADO.NET and SQLCLR
MSDN On-demand Webcasts
MSDN Live Webcasts 
SQL Server 2005 Hands-On Labs
SQLCLR Hands-On Lab Manual
Microsoft SQL Server TechCenter on TechNet

其他资源
Sample Book Chapters for SQL Server 2005 是一个讲述SQL Server 2005 的书目的列表。
Hosting the .NET Runtime in Microsoft SQL Server 在 Association for Computing Machinery (www.ACM.org)上. 要想访问这些资料需要成为SIGMOD, the ACM的会员或者直接购买。
Service Oriented Database Architecture David Campbell编写, 也是在Computing Machinery (www.ACM.org). 上发表。要想访问这些资料需要成为SIGMOD, the ACM的会员或者直接购买。

更多信息:http://www.microsoft.com/sql/

(责任编辑 火凤凰 sunsj@51cto.com  QQ:34067741  TEL:(010)68476636-8007)



共10页: 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 10
【内容导航】
专题
专题:ASP.NET 2.0基础开发指南
.NET移动与嵌入式技术专题
.NET Framework新手入门专题
VS.NET实用开发专题
ADO.NET实用技巧专题
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看81120次)
·UML类图详解 (查看72587次)
·C++是垃圾语言?! (查看42719次)
·C#技术开发指南 (查看40290次)
·UML统一建模语言 (查看39225次)
·Java编程开发手册 (1198个砖)
·Java基础教程 (431个砖)
·C#技术开发指南 (311个砖)
·.NET开发手册 (254个砖)
·PB开发教程 (223个砖)
·Java编程开发手册 (658个好)
·Java基础教程 (578个好)
·.NET开发手册 (282个好)
·PB开发教程 (213个好)
·Delphi开发技术手册 (200个好)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。