策略管理(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. Codeforces CF#628 Education 8 F. Bear and Fair Set

    F. Bear and Fair Set time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  2. [转] 前后端分离开发模式的 mock 平台预研

    引入 mock(模拟): 是在项目测试中,对项目外部或不容易获取的对象/接口,用一个虚拟的对象/接口来模拟,以便测试. 背景 前后端分离 前后端仅仅通过异步接口(AJAX/JSONP)来编程 前后端都 ...

  3. bzoj1026数位dp

    基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...

  4. React-native之持久化保存----AsyncStorage

    AsyncStorage AsyncStorage是一个简单的,未加密的,异步的,持久化,关键值存储系统,是全局的. iOS中存储类似于NSUserDefault,存储问plist文件存放在设备中. ...

  5. UVA103 dp基础题,DAG模型

    1.UVA103 嵌套n维空间 DAG模型记忆化搜索,或者 最长上升子序列. 2.dp[i]=max( dp[j]+1),(第i个小于第j个) (1) //DAG模型记忆化搜索 #include< ...

  6. 移动端常用的meta

    1. 禁止缩放:<meta name="viewport" content="width=device-width, initial-scale=1.0, maxi ...

  7. C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法

    C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法 使用C#导入 Excel数据到 DataTable,如果连接串中只写 Excel 8.0,则正常的字符列,数值列都没有问题,但 ...

  8. 基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包

    续接 打开eclipse新建java项目,如下图所示: 输入项目名称后点击"完成"按钮,如下图所示: eclipse中新建一个java项目,如下图所示: 添加类库,如下图所示: 在 ...

  9. Python之路Day18-正则及Django

    一. 正则表达式 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m 表示多行匹配JS正则匹配时本身就是支持多行,此处多行匹 ...

  10. cookies,sessionStorage 和 localStorage区别

    cookies,sessionStorage 和 localStorage 的区别 cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密). cook ...