码迷,mamicode.com
首页 > 数据库 > 详细

sql server2008中的策略

时间:2020-05-07 19:31:07      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:表达式   存储   sms   策略   width   com   调用   class   服务器   

策略管理是SQL Server 2008中的一个新特性,用于管理数据库实例、数据库以及数据库对象的各种属性。策略管理在SSMS的对象资源管理器数据库实例下的“管理”节点下,如图:

技术图片

从图中可以看到,策略管理中包含三个节点:策略、条件、方面。

方面就是策略要应用的对象,包括:服务器、表、触发器、视图、存储过程……这些方面对象都是系统定义好了的,仅供瞻仰不可更改。双击具体的某一个方面可以查看该方面的属性,在定义条件时即可对这些属性进行判断,如图为存储过程方面的属性。

技术图片 

条件就是一个布尔表达式判断策略是否为真。

策略就是在条件为假的情况下要执行的操作,即评估模式。策略中的评估模式有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)”,然后单击“确定”按钮,创建“条件”完成。

(3)右击“策略”节点,在右键菜单中选“新建策略”选项,系统将打开新建策略窗口,输入策略名“检查存储过程命名规范”,在检查条件的下拉列表中选择刚创建的条件“存储过程命名规范”,系统将根据选择的检查条件列出针对目标,默认情况下是对每个数据库的每个存储过程进行检查,由于这里我们只希望检查TestDB1数据库,所以需要新建数据库的条件,如图:

技术图片

(4)单击“新建条件”后将出现与第(2)步新建条件相同的窗口,只是这里我们新建的条件方面是数据库,新建条件TestDB1,如图所示:

技术图片

(5)单击“确定”按钮回到新建策略窗口,针对目标变成了对TestDB1数据库的每个存储过程。这里若要强制实现这个策略,则选择评估模式为“更改:禁止”并选中“已启用”复选框表示启用该策略。

(6)单击“说明”选择页,可以在其中选择策略的类别、在违反策略时给出的友好说明。最后单击“确定”按钮即可完成策略的创建工作。

(7)接下来就是测试该策略是否有效了,运行如下SQL语句创建一个存储过程usp_GetDate:

USE TestDB1
GO
CREATE PROC usp_GetDate
AS
SELECT GETDATE()
GO 

 

一切正常,存储过程被创建成功。那么再创建一个存储过程db1_GetDate:

USE TestDB1
GO
CREATE PROC db1_GetDate
AS
SELECT GETDATE()
GO 

sql server2008中的策略

标签:表达式   存储   sms   策略   width   com   调用   class   服务器   

原文地址:https://www.cnblogs.com/gered/p/12844793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!