为了账号安全,请及时绑定邮箱和手机立即绑定

策略管理

标签:
SQL Server

策略管理(Policy Management)实际上是一个评估和监控系统,而评估和监控的规则由用户定义,用于管理数据库实例、数据库以及数据库对象的各种属性,使用基于策略的管理,用户能够有效地评估、监视以及管理数据库系统。继承了SSMS一贯简单易用的作用,使用策略管理的向导,能够非常简单地对数据库系统进行策略管理。

一,策略管理的基本概念

1,策略管理包含的基本组件:策略(Policy)、条件(Condition)、方面(Facet)和目标(Targets):

  • 方面(Facet):是策略评估和检查的项目,每个Facet都定义了大量的属性,方面对象是系统预定义的;用户在进行策略管理时,必须首先查看系统是否预定义了相应的Facet,根据Facet的属性创建相应的管理策略;

  • 条件(Condition):是一个布尔表达式,在条件中引用方面对象的属性,用于判断策略是否为真;

  • 目标(Target):是策略作用的对象,包括服务器、数据库、Login、表、存储过程以及其他数据库对象;

  • 策略(Policy):策略将目标和条件关联,并定义评估的模式,在条件(Check Condition)为假时,根据评估模式执行相应的操作,或回滚事务,或记录异常消息;

2,评估模式

策略的评估模式有4种:按需、按计划、更改时记录和更改时禁止。对于这4种模式,官方给出如下定义:

  • 按需(On Demand):当用户指定这种模式时,DBA可以手动调用策略来评估发面是否满足条件;

  • 更改时-禁止(On Change - Prevent):最严格的评估模式,SQL Server自动使用 DDL 触发器来检查用户对方面的更新操作是否违反策略,如果违反策略则回滚该操作,以达到强制策略的效果;

  • 更改时-仅记录(On Change - Log Only):SQL Server自动检查用户对方面的更新操作是否违反策略,如果违反策略则发送消息,仅仅记录违反侧露的日志消息。

  • 按计划(On Schedule):该模式使用 SQL Server 代理作业定期对目标对象进行策略评估,并记录违反策略的情况;

其中按需是手动操作的,其他三个可以自动执行。按计划是使用SQL Server代理来定时检查策略,另外两个是在更改时由DDL触发器触发。

3,在SSMS中查看和管理策略

策略管理位于管理目录(Management Catalog)下,如图:

二,示例1,规范存储过程(Stored Procedure)的命名

强制存储过程的命名必须以"usp_"开头, 命名规范是: sp_name like 'usp[_]%'。

Step1,选择对应的Facet,查看属性

由于我们针对的目标对象是存储过程(Stored Procedure),所以需要从Facets列表中选中Stored Procedure:

查看其属性,在Properties列表中有Name属性,表示存储过程的名字(Object Name)。

step2,创建条件(Condition)

条件(Condition)是一个逻辑表达式,可以使用SQL Server 支持的任何操作符来编写逻辑表达式,以规定存储过程的命名。

1,右击Facet,弹出快捷菜单,点击新建条件(New Condition),打开新建条件向导(Create new condition wizard)。

2,填写Facet的name属性,命名为SP_NameCondition。

Facet是Stored Procedure,Facet 属性直接决定了表达式面板(Expression Grid)的字段(Filed)列表的Items。从Field列表中选择@Name。

3,编辑字段

点击Field后面的省略号(...),弹出高级编辑器(Advanced Editor),在编辑器中编写TSQL代码对@Name进行编辑,如果允许“USP_”、“Usp_”等开头的存储过程命名,那么可以将Cell Value改写为“Lower(@Name)”。

在属性和函数面板(Properties and functions)中列出对字段进行编辑的函数或属性,在右侧的详细面板(Details)中,SQL Server简单描述函数的Properties和使用示例:

4,操作符(Operator)

在操作符列表中选择LIKE,值(Value)中填写'usp[_]%',点击Value后面的省略号“...”,能够弹出高级编辑器(Advanced Editor),对Value值进行编辑。

 

step3,创建策略

1,输入策略命名

本例将策略命名为“SP_NamePolicy”,在检查条件(Check Condition)列表中选择step2中创建的条件"SP_NameCondition"

2,目标(Against Targets)

我们针对的不是所有的SP,而是用户自定义的SP,点击 Stored Procedure 前面的下三角,不使用Every,而选择新建条件(new condition)。

我们针对的是特定数据库(db_study)中的所有用户自定义存储过程(User Defined Stored procedure),再创建一个Facet 为Database的Condition。

3,评估模式(Evaluation Mode)

评估模式共有四种,本例选择On change:prevent,并勾选 Enable复选框。 

点击OK,弹出错误消息,不支持Evaluation Mode “On Change:Prevent”,Object Set 是指Stored Procedures的集合,将SP_Name_NotSystemSP这个condition换成 Every,适用于所有的SP。然后点击OK,创建成功。

step4,查看创建的Policy 和condition

Step5,测试Policy

1,创建一个sp,命名不符合Policy

复制代码

CREATE PROCEDURE dbo.sp_test_policyASBEGIN    -- SET NOCOUNT ON added to prevent extra result sets from    -- interfering with SELECT statements.    SET NOCOUNT ON;    -- Insert statements for procedure here    select top 11 *    from sys.objectsENDGO

复制代码

创建失败,错误消息是:violate policy,创建SP的事务回滚,创建失败。

复制代码

Policy 'SP_NamePolicy' has been violated by 'SQLSERVER:\SQL\SQLServerInstanceName\DEFAULT\Databases\db_study\StoredProcedures\dbo.sp_test_policy'.This transaction will be rolled back.Policy condition: 'Lower(@Name) LIKE 'usp[_]%''Policy description: ''Additional help: '' : ''Statement: 'CREATE PROCEDURE dbo.sp_test_policyASBEGIN    -- SET NOCOUNT ON added to prevent extra result sets from    -- interfering with SELECT statements....'.Msg 3609, Level 16, State 1, Procedure sp_syspolicy_dispatch_event, Line 65The transaction ended in the trigger. The batch has been aborted.

复制代码

2,创建一个sp,命名符合policy,命令执行成功。

三,示例2: 强制Table 或Index 必须使用数据压缩策略(Data Compression Policy)

从示例1中,我们可以看出,选择相应的Facet非常重要。在table facet列表中,系统自动创建了HasCompressedPartitions和RowCount属性,属性HasCompressedPartitions表示Table 或 index是否压缩,RowCount属性返回table的数据行数。

step1,创建条件

当表的数据行数大于1000000,必须进行数据压缩。当对策略进行评估时,如果 @RowCount>1000000 and @HasCompressedPartitions=true,那么符合策略;如果 @RowCount>1000000 and @HasCompressedPartitions=true 不满足,即@RowCount<=1000000 or @HasCompressedPartitions=false,那么违反策略。所以,检查条件(Check Condition)的表达式是 @RowCount<=1000000 or @HasCompressedPartitions=false。

step2,创建策略

评估模式选择 On Demand。

Step3,查看策略管理

step4,评估策略

查看策略评估(Policy Evaluation)的结果,DB中的所有tables 满足检查条件(Check condition):

四,对单个对象进行策略评估

1,选择一个Table,右击弹出快捷菜单,有Policies 和facets 子菜单,点击评估(Evaluate)

2,选择Policy,对单个table进行评估

3,查看评估结果

 

推荐文档:

Administer Servers by Using Policy-Based Management

SQL Server 2008新特性——策略管理

SQL Server 2008 : 基于策略的管理(Policy-Based Management)

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消