策略管理(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_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,命令执行成功。

三,示例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)

Policy Management的更多相关文章

  1. RDP setting group policy

    RDP setting group policy 1.Login to domain controller and go to Group Policy Management tool2.Click ...

  2. Create a Group Policy Central Store

    一.How to create a Group Policy Central Store You have downloaded or created your own Group Policy Ad ...

  3. Setting IE11 with Group Policy Preferences

    一.Setting Home Page with Group Policy Preferences 1.Open the Group Policy Management Console and cre ...

  4. [转]Missing MSS Settings in Security Options of Group Policy (GPO)

    I'm currently working on a new Windows Server 2012 and Windows 8 project. As part of that project is ...

  5. Three Steps to Migrate Group Policy Between Active Directory Domains or Forests Using PowerShell

    Three Steps Ahead Have you ever wished that you had three legs? Imagine how much faster you could ru ...

  6. 分享 rabbitMQ入门详解

    原文地址http://blog.csdn.net/cugb1004101218/article/details/21243927 目录(?)[-] rabbitMQ说明文档 rabbitMQ是什么 消 ...

  7. AD域修改组策略

    如果我们的计算机加入AD域之后,修改安全策略时不能用本地策略来修改.具体修改方法: .Start(开始)–Programs(程序)–Administrative Tools(管理工具)–Group P ...

  8. RabbitMQctl命令

    RabbitMQControl RabbitMQ提供了可视化的网页供我们进行一些配置与操作,但是ctl的命令比UI来的专业的多,一些UI无法完成的操作就需要使用ctl命令来进行处理了 这里是官方的文档 ...

  9. 运行(WIN+R)中能使用的命令:ms-settings:,shell:,cpl,mmc...

    ms-settings: --- DESC --- --- CMD --- Battery Saver ms-settings:batterysaver Battery Saver Settings ...

随机推荐

  1. 2016 Multi-University Training Contest 2 D. Differencia

    Differencia Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  2. 【NEUQACM OJ】1017: 平面切割(特别版)

    1017: 平面切割(特别版) 题目描述 我们要求的是n条闪电型折线分割平面的最大数目.比如,一条闪电型折线可以将平面分成两部分,两条最多可以将平面分成12部分,三条最多可将平面分成31部分,四条最多 ...

  3. 【SAP BO】处理掉BOE打开Xcelsius报表时,外围出现的外边框(转)

    原帖地址:http://blog.csdn.net/liyi199488/article/details/8943286 通过BOE打开Xcelsius报表时,总是出现一个外边框. 处理办法: Xce ...

  4. Android SDK Manager 更新代理配置

    转自:http://www.cnblogs.com/tao560532/p/4483067.html 出现问题: 消除SDK更新时,有可能会出现这样的错误:Download interrupted: ...

  5. STM32之DAC君

    如花说得好:呃呃呃.是俗话说得好:有了ADC,怎可少了DAC..我觉得奇怪.今天我开头就直奔主题了.我想了想,总结了一句话:孙悟空纵然有七十二变.无论是变成猫也好,变成狗也罢.始终还是会变回他本身.所 ...

  6. 【转】angular指令入坑

    独立作用域和函数参数 通过使用本地作用域属性,你可以传递一个外部的函数参数(如定义在控制器$scope中的函数)到指令.这些使用&就可以完成.下面是一个例子,定义一个叫做add的本地作用域属性 ...

  7. Android使用Application的好处

    如果一个应用程序有2个入口的,1个入口程序打开修改其中的内容,怎么实现另一个入口的数据也修改呢? 下面就用到Application来实现数据的共享,因为一个应用程序只有一个Application,Ap ...

  8. laravel5.2,注册服务提供者时无法生效

    laravel中注册服务提供者原本很简单,只要运行下指令php artisan make:provider TestServiceProvider,然后在config/app.php的provider ...

  9. angular学习之路(一)

    angular是什么? angular是一个用于设计动态web应用的结构框架! 它不仅仅是一个JavaScript框架,他的核心其实是对HTML标签的增强. 何为HTML标签的增强?其实就是使用标签完 ...

  10. wdk中ramdisk代码解读

    入口函数,即驱动加载函数 NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) ...