terça-feira, 22 de janeiro de 2008

SQL Server 2008: Declarative Management Framework (DMF) Parte 1

Este artigo foi escrito utilizando o CTP de Novembro do SQL Server 2008.

Declarative Management Framework é um sistema de regras (policy) aplicadas em um ou mais servidores SQL Server 2008. Podemos até comparar este recurso ao Group Policy do Windows!

O SQL Server Management Studio (SSMS) é usado para criar as regras e aplicá-las manualmente ou automaticamente utilizando Triggers DDL, Events Notification ou Jobs do SQL Server Agent.

Até o SQL Server 2005 para garantir com que todos os servidores da empresa obedeçam a uma configuração específica (Autoshrink OFF em todos os bancos em todas as instâncias), o administrador teria que entrar em cada servidor e verificar manualmente, ou escrever script e rodar em cada instância. Com o DMF podemos garantir um padrão de configuração em todas as instâncias facilmente.

Por exemplo, com DMF fica fácil garantir que qualquer tabela nova não tenha o prefixo SYS. Quando o usuário tentar criar uma tabela com prefixo SYS o sistema não deixa, veja abaixo:




Para criar estas regras você pode utilizar o SSMS ou um script, abaixo podemos observar um novo nó em Management:


Objetos do DMF
Todos os objetos que compõe o DMF ficam armazenados em tabelas de sistema no banco de dados MSDB. Para administrar é necessário pertencer ao role PolicyAdministratorRole localizado na MSDB.

► Facets
É o objeto básico do DMF, representando um objeto do SQL Server (como tabela, trigger, servidor, banco de dados, etc). Existe um total de 38 Facets contendo inúmeras propriedades utilizadas pelo próximo objeto Conditions. Não se pode criar novas Facets, apenas utilizar as fornecidas pelo sistema.

► Conditions
É um grupo composto de uma ou mais propriedades de um Facet, um operador de comparação e valor. Por exemplo, a propriedade Name do Facet Stored Procedure é do tipo string e pode utilizar os operadores de comparação =, !=, LIKE, NOT LIKE, IN ou NOT IN, sendo comparado a uma string ou uma lista de strings.

O SQL Server 2008 já vem com 69 Conditions que podemos utilizar e alterar livremente, além de criar novas. Na figura abaixo temos a Condition Windows Authentication Mode que utiliza a Facet Server Security e define a propriedade @LoginMode com o valor “Integrated”.



► Policy
Um Policy está associado a uma Condition que poderá ser aplicada a um ou mais servidores manualmente ou automaticamente. O modo de execução do Policy determina como a condição será aplicada:

  • On demand – o administrador executa o Policie manualmente.
  • On Schedule – verifica sob uma agenda e retorna um log com o resultado. Utiliza Job do SQL Server Agent.
  • On Changes – verifica o Policie quando ocorre uma alteração na propriedade e gera um log (assíncrono). Utiliza Event Notification.
  • Enforce – verifica no momento da alteração, não aceitando se não estiver de acordo com a Policy (síncrono). Utiliza Trigger DDL.

Existem Facets onde alguns modos de execução (listados acima) não estão disponíveis, para obter a lista dos modos de execução por Facet basta executar a query abaixo:

USE MSDB
go
WITH FacetCTE (ModoID, ModoNome)
AS
(SELECT * FROM (VALUES (0,'On demand'), (1, 'Enforce Compliance'),
(2,'Check on change and log'), (4,'Check on schedule and log')) AS EM(ModoID, ModoNome))

SELECT p.management_facet_id as FacetID, p.[name] as NomeFacet, f.ModoNome

FROM syspolicy_management_facets as p JOIN FacetCTE as f
ON p.[execution_mode] & f.[ModoID] = f.[ModoID]
ORDER BY p.[name],f.ModoNome


Todas as Facets possuem On Schedule, só aquelas Facets que as alterações podem ser capturadas por um evento possuem On change. As Facets com suporte transacional a instruções DDL podem utilizar Enforce.

► Policy Group
Agrupa Policies facilitando ao administrador no momento de associar a um banco ou instância. Cada Policy só poderá pertencer a um Policy Group.

No próximo post vou mostrar como é simples criar uma regra utilizando este novo recurso, até lá.

2 comentários:

Anônimo disse...

em qual versao do sql 2008 isso esta disponíve?

lopez disse...

Aguardo a resposta