• 策略管理


    策略管理(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:SQLSQLServerInstanceNameDEFAULTDatabasesdb_studyStoredProceduresdbo.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)

  • 相关阅读:
    图解SQL inner join、left join、right join、full outer join、union、union all的区别
    Memcache应用场景介绍,说明[zz]
    PHP REST架构简单设计
    PHP的session存储对PHP运行环境的影响
    使用PHP创建一个REST API(Create a REST API with PHP)
    面试、笔试中常用的SQL语句(数据库知识必杀)一共50个!!!
    一.软件介绍(apache lighttpd nginx)
    spark总结3
    Spark 总结2
    Spark总结1
  • 原文地址:https://www.cnblogs.com/ljhdo/p/5173893.html
走看看 - 开发者的网上家园