IT技术网www.itjs.cn

当前位置:首页 > 数据库 > SQl Server > SQL Server数据库引擎.NET CLR环境数据库管理员向导(1)

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

发布时间:2015-11-30 00:00 来源:未知

这本白皮书也为数据库引擎 .NET Framework 编程 API提供了配置向导。它也为编码,更改和释放管理过程提供建议,并且这些建议应该适合每个数据库管理员的具体情况以确保一个专业和安全的配置。

目录

关于此白皮书

为工作寻找正确的工具

在数据库引擎中.NET Framework编程的初步介绍 

为工作选择正确的工具

程序范例

目录对象 

安全维护

源代码管理

Release 管理 

性能检测

调试代码

排错 

Beyond SQL Server 2005 

概要 

SQL Server 2005的额外资料

在大多数数据库开发项目中,与数据库相互影响的技术选择和组件结构化设计的角色落到了数据库管理员(DBA)的身上。这个管理者就是管理和恢复商业数据拥有最终职责的那个人。大多数数据库管理员们对新技术采取保守态度。这是一个本能,因为同新功能提供的好处随之而来的是,新技术可能包括危及稳定性和完整性的新风险。经验丰富的数据库管理员 经常通过全面的测试和对新技术的理解来为管理风险/利益作出保证。而且更多的是,他们常常花时间来确定哪里加入更值得,或者更重要的是,哪里不能被使用。因此在本能的保守主义作用下,数据库管理员可能会问:“当我明白了这些特性我怎么将它们关掉?”好消息是早前发布的SQL Server ,这回发布的版本在默认情况下新特性是关掉的。

与那些将新特性永久关闭的人不同的是,一个谨慎的数据库管理员 将会注意学习足够的技术来决定它可以在哪里被适当的使用以及哪里可以使它发挥最大作用。完全不需要理解开发者可能会使用到的每一个语言里的每一行代码,但是你确实需要足够的信心来提供非常多的操作支持,维护和排错。 在这些新特性的围绕下,适当使用它们的关键在于理解力,分析能力以及强的控制力。

在数据库引擎中.NET Framework编程的初步介绍

当SQL Server数据库表和视图不许编写代码时,SQL Server 2000数据库程序员拥有如下选择:

◆在数据库中使用Transact-SQL 编写代码。代码可以被写为存储过程,用户定义功能,也可以将触发器看作调用数据变化的已存储的过程。

步骤2: 激活数据库引擎.NET Framework 设计 API

选择Surface Area Configuration for Features opens the dialog below. 将出现两个视图:通过SQL Server默认(通过实例)激活选项,第二个是通过组件激活选项例如数据库引擎和报表服务。

在激活这些功能前,增加SQL 服务器的 的外表区域,推荐数据库管理员确保他们的系统遵从以下几点:

◆最新的服务包和关键的热修补包 (可由 Microsoft Update获得)

第一组观点就是在可能出现错误的地方使用新功能提供指导:

◆深度相关的数据访问

While it is tempting to use the new functionalityt档使用新功能的同时可以更进一步的与现有的商业系统结合是很具诱惑力的,花费时间来确保最终用户在呼叫外部API和外部系统时的花费不会得到消极的影响是非常重要的。这些影响可能在用户定义功能里特别的明显,他们可能会导致对表的每一行查询。在应用于一个10,000-row表时,外部呼叫可能在在线系统中从每秒一行的状态突然变成不可用的。

◆不必要使用用户定义类型

用户定义聚合不可以与SQL Server 索引师徒俩和使用,因为为在线报表操作来自动整合数据是不可能的。 假如状态数据是可接受的,然后,由定期的缓存聚合所产生的结果是一个分离的可创建和可维护的表,它可以被一个索引视图替代。

◆与早期SQL Server版本兼容

数据库引擎 .NET Framework 编程 API 为数据库程序员引入了很多新可能性。然而, 你可能会避免草率的使用这个新功能除非你可以清楚地了解它使用的基本原理。

这些观点可能看起来像是为不发展技术提供了一个很有利的实例。然而, 这有很多强有力的例证可以证明很多值得思考的优点。他们包括以下这些:

◆.NET Framework和the Visual Studio编程环境的杠杆作用

为多用户共同改变数据强制指定一个商业规则是许多系统一直面临的一个问题。新的API允许这些逻辑在数据库队列中移动触发器来确保所有更新是一致的。

一个例子可能会要求以特别的顺序引入数据,而其中的一些系统和技术是通常是不能直接被Transact-SQL触发器访问的。触发器可以检测出一个新的用户是不是第一次进入,是不是一个来自远程的可信任的IBM大型机系统。他可以为所有的商业用户提供风险管理。

减少网络通信量

◆统计计算需要所有数据以产生输出结果。

虽然大多数数据可以被映射为关系模型,这里仍然有很多例子表现出用户自定义数据类型需要值得考虑的地方:

许多的行业数据在本地聚合操作中是基于all/subsets分组定制输入的,例如SUM, AVG, 和MIN, 以及其它公司。实例可能进行一个傅立叶变换或者进行一个精确的预先计算的处理。用户自定义聚合允许通过多线程的散开/散入(关联执行) 操作,因而,通过多重处理器应该很好的被分离。

高性能表值,用户定义函数

目录对象

一个好的数据库管理员的主要任务就是跟踪服务器上的对象,例如那些表在哪些数据库中,哪些存储过程和函数是被要求的,哪些脚本每日,每周,每月一定要运行等等。为了帮助针对所有这些对象的跟踪,我们有很多的工具,他们有来自Microsoft的也有其他的软件生产厂商的,这其中就包括针对数据模型的Microsoft® Visio®和针对数据库的Microsoft SQL Server Management Studio 等等。

面对外部世界SQL Server 2005的整合功能引入了很多新的对象来对相关系统目录的早期版本进行补充和扩展。这部分文字介绍了如何利用改变的编录去获得这些新数据库对象的正确列表,以及数据库中每个新数据库对象类型附加的新的源数据。

程序集

-- SYS.ASSEMBLIES

用户定义类型

-- User Defined Type Metadata

这个权限延展了外部权限的设置,使得程序集允许不可管理的调用,代码不可控。

注意在UNSAFE模式下,整合代码将阻止一部分对.NET Framework 的库使用。例如,编译器,windows 管理器,企业服务器,和其他一些由于SQL Server 无法发现而被阻止掉的功能。

我们推荐数据库管理员限制External/Unsafe模式的使用,假如开发者要求这些高级别的权限时管理员应该去选择更加严格的环境要求。

源代码管理

CREATE ASSEMBLY在SQL Server 数据库中加载二进制程序集,但没有办法同时加载程序源。因为他是为了数据库管理员创建程序集来管理源代码用的。就好像第三方软件只支持二进制代码,也可以为他们的软件提供专业的技术支持。无论如何,在你的代码发生问题之前让你的数据库管理员可以管理源代码是一件非常重要的事情。

在该文的设计范例部分包括推荐的为应用程序开发者提供的工具。根据这些推荐的内容,数据库管理员对于改变控制策略,程序,以及对开发/测试系统和那些正在运行程序的系统的正确描述这些方面会变的非常的容易,使用SQL Server 2005新的安全特性和DDL触发器可以在生产环境中限制访问和支配(至少是审核)来更好的执行控制策略。假如希望,DDL触发器可以阻止一个数据库中所有的DDL(数据定义语言)声明,或者特殊的某个或者某组声明。

注意没有经过完全的检查的代码是不会从开发阶段送到生产阶段的,我们一定要确保代码万无一失。

尽管如此,我们依然推荐开发者执行Visual Studio的自动部署特性利用最大的生产压力在代码开发周期中来进行测试,在完成后开发者应该将源代码和编译文件传给负责部署的数据库管理员 。

需要注意的是因为.NET Framework的编译器是免费的,所以数据库管理员 没有必要安装Visual Studio 除非他们想利用Visual Studio 中的一些特性来对代码进行检查和调试的处理。

数据库管理员 应该将源文件做好备份,然后将检查后的代码和编译后的文件保存在另外的一个位置,这样可以对代码作一个很好的保护。

我们同样建议副本应该在每台它加载程序集的数据库上进行关联。这意味着在开发代码目录上和多个数据库管理员 目录上执行的是单一副本。如下图,在数据库利用CREATE ASSEMBLY命令加载了程序集后所有的支持文件例如源代码,文档都通过ALTER ASSEMBLY命令加载。

ALTER ASSEMBLY LeastSquaresSqlFunction

控制代码提升也是数据库管理员的一个关键角色。允许开发者直接在共享系统上部署,那么它所导致的最终在生产环境中部署产生的不可控源代码和错误几乎是不可避免的。当建立了一个错误版本的源代码或者创建了一个从未测试过的代码时都会马上要求重编译。最终测试环境中不能再有问题出现,因为在资源不能匹配的时候产品程序集是不能做调试的。

下面的例子例举了 Microsoft® C# 程序编译器 csc.exe (.NET Framework 中的C# 编译器).

Csc.exe /noconfig /nowarn:"1701;1702" /warn:4 /define:DEBUG;

TRACE /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215\System.Data.dll

/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215\System.dll

/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215\System.Web.Services.dll

/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215\System.XML.dll /debug+

/optimize- /out:obj\Release\MainframeWebService.dll

/target:library IBMSystemCode.cs AssemblyInfo.cs "Web References

\com.Mainframe.webservices\Reference.cs"

这是一个调用web服务的例子,下面的阶段要求连续的代码,这将在下面的例子中提到。这个程序是安装在.NET Framework 2.0 SDK 下,可以在C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin找到。在SQL Server 2005 中使用CREATE ASSEMBLY命令或者用户界面注册一个创建的程序集“MainframeWebService.XmlSerializers.dll”

Productivity Tip

.一个服务器运行多个SQL Server 实例处理的时候,每个CLR代码在列表中都不显著,这时,应该将某一个实例连接到CLR,然后通过CPU的活动型来判别。

计数器有很多的设置帮助我们了解程序在SQL上运行时的健康性和活动型。

◆.NET CLR Exceptions –Exceptions/Sec 提供了一个对应用程序代码的早期警告,假如这个值比平时高(这个设置也可以用在正常的功能上),应用程序可能会失败。更深入的报告要去看错误日志。

.NET Data Provider for SQL Server –提供了每秒的连接数和非连接数,在获取数据库级别的活动性方面非常有用。如下图这个计数器是数据库级别的。

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

除了服务监控计数器,我们在SQL Server Dynamic Management Views (DMV)中也可以得到大量SQL Server操作系统的数据的信息。下面是一些有用的查询。

-- Loaded Assemblies (run in each database)

排错

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

Lack of Set-based Operations (Loops within Loops)

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

getdata()

这本白皮书也为数据库引擎 .NET Framework 编程 API提供了配置向导。它也为编码,更改和释放管理过程提供建议,并且这些建议应该适合每个数据库管理员的具体情况以确保一个专业和安全的配置。

目录

关于此白皮书

为工作寻找正确的工具

在数据库引擎中.NET Framework编程的初步介绍 

为工作选择正确的工具

程序范例

目录对象 

安全维护

源代码管理

Release 管理 

性能检测

调试代码

排错 

Beyond SQL Server 2005 

概要 

SQL Server 2005的额外资料

在大多数数据库开发项目中,与数据库相互影响的技术选择和组件结构化设计的角色落到了数据库管理员(DBA)的身上。这个管理者就是管理和恢复商业数据拥有最终职责的那个人。大多数数据库管理员们对新技术采取保守态度。这是一个本能,因为同新功能提供的好处随之而来的是,新技术可能包括危及稳定性和完整性的新风险。经验丰富的数据库管理员 经常通过全面的测试和对新技术的理解来为管理风险/利益作出保证。而且更多的是,他们常常花时间来确定哪里加入更值得,或者更重要的是,哪里不能被使用。因此在本能的保守主义作用下,数据库管理员可能会问:“当我明白了这些特性我怎么将它们关掉?”好消息是早前发布的SQL Server ,这回发布的版本在默认情况下新特性是关掉的。

与那些将新特性永久关闭的人不同的是,一个谨慎的数据库管理员 将会注意学习足够的技术来决定它可以在哪里被适当的使用以及哪里可以使它发挥最大作用。完全不需要理解开发者可能会使用到的每一个语言里的每一行代码,但是你确实需要足够的信心来提供非常多的操作支持,维护和排错。 在这些新特性的围绕下,适当使用它们的关键在于理解力,分析能力以及强的控制力。

在数据库引擎中.NET Framework编程的初步介绍

当SQL Server数据库表和视图不许编写代码时,SQL Server 2000数据库程序员拥有如下选择:

◆在数据库中使用Transact-SQL 编写代码。代码可以被写为存储过程,用户定义功能,也可以将触发器看作调用数据变化的已存储的过程。

不要将简单的查询执行移出Transact-SQL。Transact-SQL 基本设置访问将会比在.NET Framework中移进移出数据更快速,特别是基本设置查询被类指针所代替。排错包含了此种潜在信息可能的花费。应该注意那些相反的请求,那些被查询所替代的复杂的计算,在这种情况下,将逻辑移动到.NET Framework程序里,在那里计算将被完全编译,逻辑可以明显改善。

那些简单的计算和基本的关系型数据访问在Transact-SQL和.NET Framework执行环境之间转换所需的花费是很明显的。在这样的情况下,Transact-SQL很可能将会胜过CLR。

◆长时间与转,外部呼叫

当对象数据可能被简单的映射成一个一队夺得关联数据类型,你可以中止或继续相关。用户定义类型有以下几种:

◆8-K大小约束。他们必须适合单一SQL Server数据页。

用户定义聚合不可以与SQL Server 索引师徒俩和使用,因为为在线报表操作来自动整合数据是不可能的。 假如状态数据是可接受的,然后,由定期的缓存聚合所产生的结果是一个分离的可创建和可维护的表,它可以被一个索引视图替代。

◆与早期SQL Server版本兼容

数据库引擎 .NET Framework 编程 API 为数据库程序员引入了很多新可能性。然而, 你可能会避免草率的使用这个新功能除非你可以清楚地了解它使用的基本原理。

这些观点可能看起来像是为不发展技术提供了一个很有利的实例。然而, 这有很多强有力的例证可以证明很多值得思考的优点。他们包括以下这些:

◆.NET Framework和the Visual Studio编程环境的杠杆作用

为多用户共同改变数据强制指定一个商业规则是许多系统一直面临的一个问题。新的API允许这些逻辑在数据库队列中移动触发器来确保所有更新是一致的。

一个例子可能会要求以特别的顺序引入数据,而其中的一些系统和技术是通常是不能直接被Transact-SQL触发器访问的。触发器可以检测出一个新的用户是不是第一次进入,是不是一个来自远程的可信任的IBM大型机系统。他可以为所有的商业用户提供风险管理。

减少网络通信量

◆统计计算需要所有数据以产生输出结果。

虽然大多数数据可以被映射为关系模型,这里仍然有很多例子表现出用户自定义数据类型需要值得考虑的地方:

许多的行业数据在本地聚合操作中是基于all/subsets分组定制输入的,例如SUM, AVG, 和MIN, 以及其它公司。实例可能进行一个傅立叶变换或者进行一个精确的预先计算的处理。用户自定义聚合允许通过多线程的散开/散入(关联执行) 操作,因而,通过多重处理器应该很好的被分离。

高性能表值,用户定义函数

这个权限延展了外部权限的设置,使得程序集允许不可管理的调用,代码不可控。

注意在UNSAFE模式下,整合代码将阻止一部分对.NET Framework 的库使用。例如,编译器,windows 管理器,企业服务器,和其他一些由于SQL Server 无法发现而被阻止掉的功能。

我们推荐数据库管理员限制External/Unsafe模式的使用,假如开发者要求这些高级别的权限时管理员应该去选择更加严格的环境要求。

源代码管理

CREATE ASSEMBLY在SQL Server 数据库中加载二进制程序集,但没有办法同时加载程序源。因为他是为了数据库管理员创建程序集来管理源代码用的。就好像第三方软件只支持二进制代码,也可以为他们的软件提供专业的技术支持。无论如何,在你的代码发生问题之前让你的数据库管理员可以管理源代码是一件非常重要的事情。

在该文的设计范例部分包括推荐的为应用程序开发者提供的工具。根据这些推荐的内容,数据库管理员对于改变控制策略,程序,以及对开发/测试系统和那些正在运行程序的系统的正确描述这些方面会变的非常的容易,使用SQL Server 2005新的安全特性和DDL触发器可以在生产环境中限制访问和支配(至少是审核)来更好的执行控制策略。假如希望,DDL触发器可以阻止一个数据库中所有的DDL(数据定义语言)声明,或者特殊的某个或者某组声明。

注意没有经过完全的检查的代码是不会从开发阶段送到生产阶段的,我们一定要确保代码万无一失。

尽管如此,我们依然推荐开发者执行Visual Studio的自动部署特性利用最大的生产压力在代码开发周期中来进行测试,在完成后开发者应该将源代码和编译文件传给负责部署的数据库管理员 。

需要注意的是因为.NET Framework的编译器是免费的,所以数据库管理员 没有必要安装Visual Studio 除非他们想利用Visual Studio 中的一些特性来对代码进行检查和调试的处理。

数据库管理员 应该将源文件做好备份,然后将检查后的代码和编译后的文件保存在另外的一个位置,这样可以对代码作一个很好的保护。

我们同样建议副本应该在每台它加载程序集的数据库上进行关联。这意味着在开发代码目录上和多个数据库管理员 目录上执行的是单一副本。如下图,在数据库利用CREATE ASSEMBLY命令加载了程序集后所有的支持文件例如源代码,文档都通过ALTER ASSEMBLY命令加载。

ALTER ASSEMBLY LeastSquaresSqlFunction

Productivity Tip

.一个服务器运行多个SQL Server 实例处理的时候,每个CLR代码在列表中都不显著,这时,应该将某一个实例连接到CLR,然后通过CPU的活动型来判别。

计数器有很多的设置帮助我们了解程序在SQL上运行时的健康性和活动型。

◆.NET CLR Exceptions –Exceptions/Sec 提供了一个对应用程序代码的早期警告,假如这个值比平时高(这个设置也可以用在正常的功能上),应用程序可能会失败。更深入的报告要去看错误日志。