Policy Management

策略管理用于管理数据库实例、数据库以及数据库对象的各种属性,Policy Management 位于Management Catalog下,

Policy Management_第1张图片

一,Basic concepts

引用园子里深蓝的博客《SQL Server 2008新特性——策略管理》解释Basic concepts: Policy,condition 和 facet。

策略管理中包含三个节点:策略、条件、方面。

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

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

策略就是在条件为假的情况下要执行的操作,即评估模式。策略中的评估模式有4种:按需、按计划、更改时记录和更改时禁止。对于这4种模式,官方给出如下定义:

  • 按需。当用户直接指定这种模式时,它可对策略进行评估。
  • 更改时: 禁止。这种自动模式使用 DDL 触发器来防止违反策略。
  • 更改时: 仅记录。当发生相关更改并违反日志策略时,这种自动模式使用事件通知对策略进行评估。
  • 按计划。这种自动模式使用 SQL Server 代理作业定期对策略进行评估。此模式记录违反策略的情况。

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

二,Example1,规范Stored Procedure 的命名,必须以"usp_"开头, 命名规范是: sp_name like 'usp[_]%'。

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

由于我们针对的对象是Stored Procedure,所以从Facets中 选中Stored Procedure,查看Facet 属性,在properties列表中有Name 属性,表示object name。

Policy Management_第2张图片

step2,创建Condition

Condition就是一个boolean 表达式,可以使用SQL Server 支持的任何operatior。

1,右击Facet,弹出快捷菜单,点击New Condition...,进入 Create new condition wizard。

Policy Management_第3张图片

Policy Management_第4张图片

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

Facet 是Stored Procedure,Facet 属性直接决定了Expression Grid的Filed 列表的Items。

从Expression Grid中Field中选择@Name。

Policy Management_第5张图片

3,点击Field 后面的ellipsis,弹出Advanced Edit,能够对@Name进行编辑,如果允许“USP_”、“Usp_”等开头的存储过程命名,那么可以将Cell Value改写为“Lower(@Name)”。

在Properties 和 functions 中有对应的Facet的Properties 和 Functions,在details中,有对Properties 和 functions的描述和使用Example。

Policy Management_第6张图片

4, Operator 选择LIKE

Value 填写'usp[_]%',点击value后面的ellipsis,能够弹出Advanced Editor,对Value值进行编辑。

 Policy Management_第7张图片

 

step3,Create Policy

1,输入Policy的Name为SP_NamePolicy,Check Condition选择 SP_NameCondition

Policy Management_第8张图片

2,Against Targets

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

Policy Management_第9张图片

我们针对的是db_study 这个db下的所有User Defined Stored procedure,再创建一个Facet 为Database的Condition。

Policy Management_第10张图片

3,Evaluation Mode

Evaluation Mode 有四种,选择On change:prevent,并勾选 Enable checkbox。

Policy Management_第11张图片

 

Policy Management_第12张图片

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

Policy Management_第13张图片

 

step4,查看创建的Policy 和condition

Policy Management_第14张图片

Step5,测试Policy

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

CREATE PROCEDURE dbo.sp_test_policy
AS
BEGIN
    -- 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.objects
END
GO

创建失败,错误消息是: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_policy AS BEGIN -- 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 65 The transaction ended in the trigger. The batch has been aborted.

2,创建一个sp,命名符合policy,commands completed successfully。

Policy Management_第15张图片

三,Example2: 强制Table 或Index 必须使用Data Compression Policy。

从Example1中,我们可以看出,选择 Appropriate Facet 非常重要。在table facet中,存在属性 HasCompressedPartitions 和 RowCount,属性HasCompressedPartitions返回的boolean表示Table 或 index是否压缩,RowCount属性返回table的数据行数。

Policy Management_第16张图片

step1,Create Condition

当表的数据行数大于1000000,必须进行数据压缩。当对Policy evaluate时,如果 @RowCount>1000000 and @HasCompressedPartitions=true,那么 comply with policy;如果 @RowCount>1000000 and @HasCompressedPartitions=true 不满足,即@RowCount<=1000000 or @HasCompressedPartitions=false,那么 violate policy。

所以,Check Condition 的Expression 是 @RowCount<=1000000 or @HasCompressedPartitions=false。

Policy Management_第17张图片

step2,Create Policy

Evaluation Mode选择 On Demand。

Policy Management_第18张图片

Step3,查看Policy management

Policy Management_第19张图片

step4,Evaluate Policy

Policy Management_第20张图片

查看Policy Evaluation的结果,DB中的所有tables 满足 Check condition

Policy Management_第21张图片

 

四,对Individual object 进行Policy Evaluate

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

Policy Management_第22张图片

 

2,选择Policy,对Individual table 进行Evaluate

Policy Management_第23张图片

3,查看Evaluation Result

Policy Management_第24张图片

 

 

推荐文档:

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

你可能感兴趣的:(Policy Management)