该文引用的是这里,我只是在原文基础上增加了一些自己的想法。
策略管理是SQL Server 2008中的一个新特性,用于管理数据库实例、数据库以及数据库对象的各种属性。
从图中可以看到,策略管理中包含三个节点:策略、条件、方面。
方面就是策略要应用的对象,包括:服务器、表、触发器、视图、存储过程……这些方面对象都是系统定义好了的,仅供瞻仰不可更改。双击具体的某一个方面可以查看该方面的属性,在定义条件时即可对这些属性进行判断,如图为存储过程方面的属性。
条件就是一个布尔表达式判断策略是否为真。
策略就是在条件为假的情况下要执行的操作,即评估模式。策略中的评估模式有4种:按需、按计划、更改时记录和更改时禁止。对于这4种模式,官方给出如下定义:
- 按需。当用户直接指定这种模式时,它可对策略进行评估。
- 更改时: 禁止。这种自动模式使用 DDL 触发器来防止违反策略。
- 更改时: 仅记录。当发生相关更改并违反日志策略时,这种自动模式使用事件通知对策略进行评估。
- 按计划。这种自动模式使用 SQL Server 代理作业定期对策略进行评估。此模式记录违反策略的情况。
其中按需是手动操作的,其他三个则可以自动完成。按计划是使用SQL Server代理来定时检查策略,另外两个是在更改时由DDL触发器触发。
其他的概念我不用多说,大家可以看联机丛书,这里就举个例子来说明策略管理的使用。
假设现在我们要开发个业务系统,其数据库为TestDB1,使用ADO.NET 调用存储过程来实现数据操作,现在项目中规定存储过程的命名规范:以“usp_”开头。这里我们可以使用策略管理来实现对该规范的检查或强制实行。具体操作过程如下:
(1)由于我们针对的对象是存储过程,所以在“方面”节点下右击“存储过程”,选择“新建条件”选项,系统将会弹出新建条件的窗口。
(2)输入“条件”的名称:“存储过程命名规范”,然后字段列表中选择@Name,运算符为LIKE,值为'usp[_]%'。也就是判断存储过程的名字LIKE 'usp[_]%',也就是以“usp_”开头的SQL表达。如图:
这里字段和值都可以使用变量和函数,如果允许“USP_”、“Usp_”等开头的存储过程,则可以将字段运用小写函数,改写为“Lower(@Name)”(黄色区域的喔测试了,感觉这个说法不正确),然后单击“确定”按钮,创建“条件”完成。
(4)单击“新建条件”后将出现与第(2)步新建条件相同的窗口,只是这里我们新建的条件方面是数据库,新建条件TestDB1,如图所示:
此时你能看到如下,有两个条件
针对不同的评估模式测试:
1、按需
该模式不能够右键策略----enable,它只是手动执行评估,右键策略,点击评估即可
2、更改时:禁止,如下设置即可,这个不需要手动执行,是自动触发的
当然,你也可以设置当阻止了事件后给用户提示的内容,如下:
测试如下:
3、更改时:仅记录
这个好像就只有记录,右键策略 ”存储过程命名规范__策略“选择”查看历史“即可
4、按计划
系统会创建一个Job定时检查策略
如果策略被定义为“按需”评估模式的话,则用户可以在其中创建违反策略的存储过程。若要检查现有的数据库对象是否符合策略,只需要在对象资源管理器中右击数据库对象节点,然后选择右键菜单中的“策略”下的“评估” 选项,如果要检查具体某个数据库对象的“方面”属性值的话,则选择右键菜单中的“方面”选项。
选择“评估”选项后系统弹出评估策略窗口,其中列出了所有存储过程方面相关的策略,选择需要验证的策略,然后单击“评估”按钮即可查看当前数据库对象是否符合策略。
这里只是一个简单的示例而已,策略管理的功能远不止命名规范的检查这么简单,通过策略管理还可以检查数据库是否自动收缩、SQL Server的密码策略、网络数据表大小、最大并行度……
微软为我们提供了一个安装包,其中包含了大量的策略示例,帮助大家学习和使用基于策略的管理,下载地址: