策略管理(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. 20161022 NOIP模拟赛 T1 解题报告

    旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...

  2. 体育游戏中的Player类

    最近在做一个棒球的游戏,开始感觉还是挺酷炫的,但是其实做法挺朴实的,想象中的球员是多么智能,这样那样的,其实只是表象. 关于球员的类是游戏里非常重要的部分,这个玩意怎么写呢,可以这样写...... 棒 ...

  3. db2 日期时间格式

    db2日期和时间常用汇总 1.db2可以通过SYSIBM.SYSDUMMY1.SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值. SELECT 'HELLO DB2 ...

  4. xpath tutorial

    http://www.cnblogs.com/yukaizhao/archive/2011/07/25/xpath.html http://www.w3schools.com/xpath/defaul ...

  5. mac 之 jmeter下载、解压、启动

    1:下载地址:http://jmeter.apache.org/download_jmeter.cgi 2:双击下载的zip文件,即可解压 3:打开终端,cd 到解压的目录下 例如:cd  /User ...

  6. @Autowired

    1. Spring框架中进行注入式,使用@Autowired. @Autowired可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作,这里必须明确:@Autowired是根据类型进行自动装 ...

  7. Apache多站点配置及启动失败解决办法

    一. Apache多站点配置方法 1.打开Apache安装目录下conf/httpd.conf文件,找到下面两行文字,把最前面的 # 号去掉,然后保存. #LoadModule vhost_alias ...

  8. python 中使用 global 引发了莫名其妙的问题

    哪里出问题了 python 中,使用 global 会将全局变量设为本函数可用.同时,在函数内部访问变量会先本地再全局. 在嵌套函数中,使用 global 会产生不合常理的行为. 上代码: In [9 ...

  9. TP字母函数

    http://wenku.baidu.com/view/2a0ec9c13c1ec5da50e27099.html?from=search

  10. RecyclerView添加Header的正确方式

    原文链接:http://blog.csdn.net/qibin0506/article/details/49716795 看了一下博客目录,已经有好几篇博客是关于RecyclerView的,不过对于这 ...