Virtualização tem sido um dos assuntos mais freqüentes nos bate-papos que tenho feito com meus clientes. Todos querem saber se o SQL Server é um bom candidato para virtualização, tanto no aspecto econômico quanto do aspecto de disponibilidade e tempo de resposta. Com o lançamento do Hyper-V no segundo semestre deste ano as possibilidades de economia em ambientes de TI se tornam uma real possibilidade. Não apenas a economia, aliás, mas também a melhor utilização de seus recursos. Vamos explorar então alguns dos principais aspectos em torno deste assunto.
Benefícios da virtualização
A virtualização de servidores traz diversos benefícios às organizações, não importa o tamanho delas. Vamos entender quais são os principais benefícios desta opção:
Consolidação de Servidores
Estima-se que servidores dedicados funcionem muito abaixo de sua capacidade, mais exatamente de 5% a 15% das capacidades reais do hardware (veja maiores detalhes aqui). Virtualizando servidores em um número menor de servidores físicos ajuda a utilizar melhor o seu investimento em hardware, reduzir custos de energia e de refrigeração, além da economia de espaço físico. Se você precisar crescer sua estrutura, faz mais sentido (e é mais barato) adicionar digamos processador, memória e discos a um sistema existente do que comprar servidores novos. Em alguns servidores hoje pode-se particionar o hardware a fim de se alocar os recursos entre suas "máquinas virtuais" - embora este seja um conceito um pouco diferente do que estamos discutindo.
Licenciamento
Este é um dos assuntos mais importantes a abordar quando falamos em virtualização. Então, vamos primeiro aos básicos de licenciamento para SQL Server. O SQL Server pode ser licenciado de duas formas:
- Por processador: é necessária uma licença do SQL Server 2005 para cada processador presente no servidor onde ele está sendo executado. O importante é lembrarmos que este método de licenciamento leva em consideração os processadores físicos, e não os núcleos em caso de processadores com mais de um núcleo. Por exemplo: uma máquina com quatro processadores quadcore (e, portanto com 16 núcleos) precisa apenas de quatro licenças para o SQL Server. Não é cobrado nada por cada um dos demais núcleos - este é, na verdade, um dos diferenciais do SQL Server em relação aos concorrentes. Este modelo é em geral utilizado em casos onde o número de SQL CALs torna o valor do modelo Server + CAL menos interessante ou em casos onde o acesso ao banco de dados é feito por clientes indeterminados (internet, por exemplo)
- Server+CAL: neste caso adquire-se uma licença para o servidor e uma SQL CAL (Client Access License) para cada acesso feito ao SQL Server. Quando falamos em user CAL, é importante lembrar que esta licença é tratada de forma nominal, e não de acesso simultâneo
O grande benefício do ambiente virtualizado se faz realidade utilizando o SQL Server 2005 Enterprise Edition. Com esta edição, se você tem, digamos, dez máquinas virtuais em um servidor com quatro processadores, é necessário licenciar apenas os quatro processadores físicos do host. Se você utilizar SQL Server 2005 Standard Edition ou Workgroup Edition, seria necessário licenciar cada uma das dez máquinas virtuais.
Vários ambientes consolidados
Pode-se ter em um mesmo servidor físico os seus ambientes de produção, homologação e desenvolvimento, por exemplo. Cada um destes em uma instância virtualizada. Além disto, pode-se implementar soluções de alta disponibilidade como o cluster, log shipping ou database mirroring "in a box". Concordo que algumas destas soluções são específicas para endereçar problemas de hardware, como o cluster, mas mesmo assim é importante registrar.
Administração Centralizada
Ao invés de se ter vários servidores, consoles e racks, um local único para administração ajuda a reduzir os custos de operação e erros humanos.
Performance e Suporte
Tendo em vista todas as reduções de custo ainda permanece a dúvida: devo virtualizar meus servidores de banco de dados? A primeira preocupação é com performance. Também existe a preocupação não menos importante quanto a suportabilidade do ambiente.
Eu entendo que a resposta a este assunto vai variar de caso em caso, sendo oportuno um trabalho de testes comparativos. Em muitos casos, vai melhorar (ou ficar igual). Em muitos outros, vai piorar. Eu entendo que tendo feito um trabalho de capacity planning onde se estima o sizing dos servidores e atribuindo aos servidores virtuais tais recursos mínimos, não devam existir problemas de performance. No entanto, o príncipal gargalo em servidores de banco de dados está no subsistema de discos. Lembre-se que seus servidores virtualizados vão compartilhar de um mesmo bus para fazer IO e esta operação pode se tornar custosa. Com um ambiente de storage bem dimensionado e performático as chances se reduzem aqui.
Quanto ao suporte, desde que seus servidores estejam virtualizados utilizando tecnologia Microsoft (Virtual Server ou Hyper-V, quando este estiver disponível) o suporte é 100% garantido. Em tecnologias de virtualização não-Microsoft, o suporte poderá estar condicionado ao fato de se poder simular o mesmo problema em ambiente físico. Veja a política da Microsoft para suporte a ambientes virtualizados em http://support.microsoft.com/kb/897615/en-us
Conclusão
A virtualização de servidores permite a empresas reduzir seus custos com data center reduzindo espaço necessário, economizando energia e recursos de resfriação. Além disso, viabiliza a melhor utilização dos seus recursos de hardware e a reduzir custos também com licenciamento.
No entanto, é interessante avaliar bem esta solução e suas conseqüências antes de tomar a decisão. Para maiores informações visite os sites:
Como sempre, fique a vontade para deixar suas dúvidas.
Ontem um cliente me fez a seguinte pergunta: é suportado utilizar em um servidor Windows Server 2003 x64, em paralelo, uma instância SQL Server 2005 64 bit e uma 32 bit?
R: Sim. Em um servidor x64 pode-se utilizar uma instância 32bit (sob WoW64) em paralelo a uma instância x64. Se o servidor for IA64, no entanto, não é possível. Veja a matriz de compatibilidade em http://msdn.microsoft.com/en-us/library/ms143694.aspx
Hoje vou escrever sobre um recurso muito popular no SQL Server 2005, que tem ganhado maior receptividade a cada dia: o Full-Text Search. Trata-se de uma tecnologia importantíssima que compõe o SQL Server. Vou falar brevemente aqui sobre seu propósito, como configurar Full-Text Search em português (PT-BR) e alguns cenários de exemplo. Espero que você goste.
Definição
O Full-Text Search (ou simplesmente FTS) permite que sejam feitas pesquisas de palavras em campos do tipo texto, XML ou binário, com flexibilizações semânticas. Imagine ter campos de texto livre em seu banco de dados (comentários, revisões), documentos do Word, PowerPoint ou outros formatos armazenados em colunas do tipo binary (e varbinary) e ter a possibilidade de efetuar uma pesquisa indexada a estes campos, de forma muito simples, obtendo como resultado não apenas os registros que contenham a palavra pesquisada, mas também registros que contenham diferentes formas semânticas da mesma palavra, ou até mesmo outras palavras que estejam relacionadas aos termos pesquisados. Esta é a funcionalidade que o Full-Text Search entrega.
Um exemplo: em uma aplicação web de uma livraria, que contém informações sobre livros, você armazena em uma das colunas as revisões feitas por usuários sobre um livro e, em outra coluna, um documento Microsoft Office Word com o primeiro capítulo do mesmo livro. O Full-Text Search permite que você pesquise as duas colunas pela palavra “Projeto” e que sejam retornados os resultados “Projeto”, “Projetos”, “Projetei”, “Projetaremos”, entre outras formas, com uma coluna que indica um ranking da relevância daquele resultado para a pesquisa solicitada. Ele permite ainda que se relacione a palavra “Obra” a “Projeto”, de modo que ao se pesquisar a palavra “Projeto” resultados que contenham o termo “Obra” também sejam retornados. Isto é especialmente relevante quando lidamos com marcas de produtos. Pode-se, por exemplo, fazer que seja retornado um registro com a palavra “SQL Server” ao se pesquisar pelo termo “SGBD”.
O interessante é que esta busca de semântica pode ser feita em diversos idiomas, incluindo o nosso português do Brasil (PT-BR). O sistema de quebra de palavras e de flexibilização leva em consideração as regras do nosso idioma para fazer a consulta. O Full-Text Search é um recurso integrado ao SQL Server. Ele é, na verdade, o mecanismo utilizado por ferramentas como o Microsoft SharePoint Server.
Faz sentido?
Cenários de exemplo
Além do exemplo acima, da livraria, os cenários abaixo ajudam a ilustrar a utilização do Full-Text Search:
- Gerenciamento Eletrônico de Documentos (GED)
- Pesquisa de currículos em uma base de dados de RH (ex.: pesquisar as palavras “SQL Server”, “Educação”)
- Pesquisa de material técnico
- E-Business
- Navegação em Internet Banking (ex.: ao pesquisar o termo “Investimento” o resultado pode trazer “Investimentos”, “CDB”, “DI”, “Fundo de Ações”, etc)
- Encontrar itens em catálogos de ofertas
- Departamento Legal
- Identificar conteúdo em e-mail
- Pesquisa de jurisprudência
Thesaurus, Noise Words e Idiomas
A obtenção de resultados a partir da associação de palavras relacionadas é produto da funcionalidade de Thesaurus do Full-Text Search. Você pode relacionar palavras em um arquivo XML de modo que resultados que sejam relevantes ao termo pesquisado sejam retornados ao usuário. O exemplo acima com Internet Banking ilustra bem este cenário (retornar “Ações” ao se pesquisar “Investimento”).
Pode-se também configurar palavras a serem ignoradas pelo mecanismo de pesquisa. Este recurso é chamado de Noise Words e se baseia na configuração de um arquivo de parâmetro contendo quaisquer palavras que precisem ser ignoradas, melhorando a relevância da pesquisa. Alguns exemplos são “Para”, “Onde” e “Se”.
Quando são construídos os catálogos e os índices Full-Text especifica-se o idioma daquele índice. A partir daí o SQL Server utiliza o “quebrador” (Word Breaker) que seja do idioma correto. Ainda assim, pode-se forçar a utilização de um Word breaker diferente durante a consulta para, por exemplo, fazer consultas utilizando de forma excepcional outro idioma. Em outras palavras: a pesquisa não é limitada ao idioma especificado ao criar o índice. Atualmente, o Full-Text Search está disponível em 23 idiomas diferentes.
Configuração do Full-Text Search em Português do Brasil (PT-BR)
É necessária configuração manual no SQL Server 2005 para configuração do Full-Text Search no nosso idioma. Isto é necessário, pois o Word Breaker para português foi desenvolvido por uma empresa externa.
AVISO: execute os passos abaixo sob sua responsabilidade. Como qualquer alteração no Windows Registry, é recomendável que o procedimento seja testado em ambiente de laboratório e que se tenha um backup completo do ambiente.
- Clique em Start-> Run. Digite regedit.exe e clique em Ok;
- Navegue até a chave; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSearch\CLSID;
- Clique em Edit-> New e selecione Key. Digite {25B7FD48-5404-4BEB-9D80-B6982AF404FD} e pressione Enter para confirmar;
- Clique com o botão direito sobre o valor “(Default)” no painel da direita e selecione Modify. Insira o valor “ptbrl.dll” e confirme;
- Clique em Edit->New e selecione Key novamente. Digite {D5FCDD7E-DBFF-473F-BCCD-3AFD1890EA85} e pressione Enter para confirmar;
- Clique com o botão direito sobre o valor “(Default)” no painel da direita e selecione Modify. Insira o valor “ptbrl.dll” e confirme;
- Navegue até a chave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSearch\Language\ptb
- Clique em Edit->New e selecione String Value
- Digite NoiseFile e pressione Enter
- Dê um clique duplo em NoiseFile e digite o caminho “C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\noiseptb.txt”
- Repita os passos 8 até 10 para criar valores com os seguintes dados:
| String Value |
TsaurusFile |
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\tsptb.xml |
| DWORD Value |
Locale |
00000416 |
| String Value |
WBreakerClass |
{25B7FD48-5404-4BEB-9D80-B6982AF404FD} |
| String Value |
StemmerClass |
{25B7FD48-5404-4BEB-9D80-B6982AF404FD} |
OBSERVAÇÃO: Os caminhos sugeridos os passos 2,7 e 10 podem variar se você estiver utilizando uma instância nomeada. Os passos acima também estão descritos no artigo http://support.microsoft.com/kb/908441/en-us
Utilizando Full-Text Search
Aí vai um exemplo muito rápido de utilização do Full-Text Search com busca por semântica:
SELECT Descricao FROM Comentarios
WHERE CONTAINS (Descricao, 'FORMSOF(INFLECTIONAL, "colocamos")')
Resultados (visualizados de forma parcial devido ao tamanho do campo utilizado):
Como disse, este é um exemplo bem simples que construí para esta demonstração. Para exemplos mais elaborados por favor deixe um comentário, ou simplesmente visite “Querying SQL Server Using Full-Text Search” http://msdn.microsoft.com/en-us/library/ms142559(SQL.100).aspx. Este artigo inclui os seguintes tópicos:
- Full-Text Search Query Fundamentals
- Searching for Specific Word or Phrase (Simple Term)
- Performing Prefix Searches
- Searching for the Inflectional Form of a Specific Word (Generation Term)
- Searching for Words or Phrases Using Weighted Values (Weighted Term)
- Searching for Words or Phrases Close to Another Word or Phrase (Proximity Term)
- Querying varbinary(max) and xml Columns
- Querying Multiple Columns
- Querying Linked Servers
- Integrating Full-Text Search and Transact-SQL Predicates
- Comparing Full-Text Functions and Full-Text Predicates
Como sempre, sinta-se a vontade para deixar suas dúvidas e comentários.
Recentemente estive em um cliente para configurar o Database Mirroring em uma base de dados. Pedi a ele para fazer um backup da base de dados inicial e restaurar no mirror, para que quando eu chegasse já fizesse o mirror.
Depois de criar os endpoints, ao tentar iniciar o mirror, vinha a mensagem abaixo:
"The server network address "TCP://<FQDN>:5022" can not be reached or does not exist. Check the network address name and that the ports for the local and remote endpoints are operational. (Microsoft SQL Server, Error: 1418)"
Na figura acima, estou omitindo o nome do servidor por questões de privacidade. No lugar da faixa em branco viria o FQDN do servidor de um dos endpoints. A porta 5022 é padrão, mas pode ser alterada durante a configuração.
Foram feitos os seguintes testes:
a) Ping no FQDN partindo do servidor A para o servidor B e vice-versa: OK
b) Telnet na porta 5022, partindo também de um lado para o outro: OK
c) Login utilizado tem permissão CONNECT nos endpoints: OK.
Solução: o restore do banco de dados não havia sido feito com a opção "WITH NORECOVERY". Embora a mensagem de erro nos leve a acreditar que o problema ocorre devido a uma falha de rede, esta foi a causa no nosso caso. É obrigatório que o restore da base de dados seja feito com esta opção, mas isto não foi percebido pela pessoa que fez o restore.
Apenas decidi dividir esta experiência aqui pois, pesquisando pela internet, vi pessoas discutindo em forums o mesmo sintoma, sem atingir uma solução.
O Visual Studio Team System tem a capacidade de incorporar diversos papéis do processo de desenvolvimento de software nas organizações: desde o Arquiteto, passando pelo Designer, Gerente de Projeto, Tester e, é claro, o desenvolvedor. Ele faz isto fornecendo ferramentas que aumentam a produtividade, com um ambiente único de desenvolvimento e gerência do projeto de software. Desde a concepção do Visual Studio Team System (daqui em diante vou me referir a ele simplesmente por VSTS), no entanto, um dos principais papéis estava fora do ciclo de vida de desenvolvimento de software. Este papel é o do desenvolvedor em bancos de dados.
É este o cenário sobre o qual o VSTS 2008 Database Edition atua, o do desenvolvedor em banco de dados. Imagine ter todos os objetos do banco de dados sob controle de fontes, passando pelos mesmos fluxos de aprovação e colaboração de todo o seu código, e das funcionalidades de desenvolvimento offline fazendo check-in e check-out dos objetos do banco de dados. Imagine ainda ter ferramentas que façam teste de unit em código de banco de dados, ferramentas que geram dados de teste que realmente significam alguma coisa, ferramentas que fazem comparação entre schemas de banco de dados (desenvolvimento comparado com produção, por exemplo). Agora chega de imaginar - já é possível!
O objetivo deste post é descrever rapidamente alguns dos recursos do VSTS 2008 Database Edition. Na verdade, os meus recursos preferidos. Esta é uma ferramenta poderosíssima e assunto obrigatório para os desenvolvedores (e até mesmo para os DBAs).
O que é o VSTS 2008 Database Edition?
Trata-se de uma edição do VSTS 2008 que incorpora o profissional de banco de dados ao ciclo de vida de desenvolvimento de software. Na verdade, esta ferramenta já estava disponível no VSTS 2005, porém na forma de um add-in. Ele oferece os seguintes benefícios:
- Desenvolvimento baseado em projeto
- Aderência a processos de desenvolvimento de software
- Colaboração em time com itens de trabalho (Work Item) e integração de processos com o Team Foundation Server
- Reconstrução de nomes de objetos com a habilidade de prever as mudanças antes de realizá-las (Refactoring)
- Ferramentas de comparação (de schemas e dados) permitem comparações e sincronização do schema e dos dados entre bancos de dados de desenvolvimento, teste e produção
- Controle de fontes e de versões de todos os objetos do banco de dados com a possibilidade de se fazer engenharia reversa em um banco de dados a fim de se trazê-lo ao sistema de controle
- Teste de Unit do banco de dados
- Aproveita a infra estrutura de teste de projetos
- Gera valores “Reais e Coerentes” através habilidade de importar informações como Row Counts e histogramas de um banco de dados reais
- Gerador de Dados provê geração repetitiva de dados para testes baseados em configurações
- Integração com MSBuild para Deployments/Builds de banco de dados baseando-se em projetos
- Habilidade de enviar apenas as alterações realizadas em um banco de dados, ao invés de apagar o banco inteiro e reconstruí-lo a cada mudança
A lista de benefícios é extensa. A lista de recursos (features), também. Vou abordar neste post apenas alguns deles, se você tiver alguma dúvida em específico, por favor, poste um comentário.
Iniciando um Projeto
Existem três formas de iniciar um projeto de banco de dados pelo VSTS 2008 Database Edition:
- Iniciar um projeto em branco e criar cada objeto individualmente - O VSTS 2008 já tem os templates de projeto para banco de dados
- Iniciar um projeto utilizando um script T-SQL existente - se você tem um script de criação de um banco de dados e de seus objetos, pode importar este arquivo. O VSTS 2008 faz um processo de engenharia reversa no arquivo e cria os objetos em seu projeto
- Conectar-se a um banco de dados existente - minha preferida. Se você já tem um banco de dados na sua empresa, utilize este recurso. O VSTS 2008 se conecta ao banco de dados e gera os scripts de criação dos objetos. Isto permite que você comece a utilizar o VSTS 2008 Database Edition imediatamente, independente de ser um projeto novo ou um ambiente que já está em produção.
Figura 1: Janela com os templates de projeto para SQL Server
Observação: Perceba que neste instante você já pode colocar seu projeto em controle de fontes.
Para este exemplo, vou utilizar a opção número 3. O próprio assistente que cria o projeto já pergunta se você deseja importar o schema de outro banco de dados. Neste instante, você pode criar uma conexão com um banco de dados existente e o assistente se encarrega de ler seu schema e criar os objetos relevantes no projeto.
Figura 2: Opção por importar o schema de um banco de dados existente
O processo de importação de schema gera um arquivo .sql para cada objeto do seu banco de dados. Você pode visualizá-los pelo sistema de arquivos, ou pelo Schema View, no VSTS 2008. Cada um destes arquivos .sql irá fazer parte do seu controle de fontes e você pode fazer check-in e check-out nos arquivos, da mesma forma como faz com seus arquivos .cs, .vb ou outros. Por padrão, o nome destes arquivos é formado por [nomedoschema].[nomedoobjeto].[tipo].sql
Figuras 3 e 4: Visualização dos objetos gerados no Schema View e no Solution Explorer
Schema Refactoring (Reconstrução)
De acordo com Scott Ambler, autor de Agile Database Development, "Reconstrução do banco de dados é fazer uma alteração pequena no Schema que melhore o seu design sem alterar sua semântica". Por exemplo:
- Renomear o nome de um objeto Schema para melhorar sua consistência, entendimento ou manutenção
- Renomear TODAS referências deste schema
- Renomear tabelas, views, stored procedures, user defined functions, etc.
É muito comum precisarmos alterar o nome de um objeto durante o processo de desenvolvimento. Com a funcionalidade de Refactoring, o VSTS 2008 atualiza todas as referências a este objeto no projeto com o nome novo. Ele ainda pode simular a alteração e emitir um mini-relatório de conclusão, para que você mesmo possa avaliar a mudança antes de efetivá-la.
Basta um clique com o botão direito para realizar o processo de refactoring. Após as alterações, se você estiver utilizando controle de fontes, o próprio processo de refactoring se preocupa em fazer o check-out dos arquivos necessários e fazer as alterações. Se você alterar o nome de uma coluna, como no exemplo abaixo, o VSTS atualiza quaisquer stored procedures que façam referência a esta coluna para refletir as alterações.
Figura 5: Renomeando uma coluna no banco de dados.
Figura 6: Alterando o nome de uma coluna. Perceba a opção "Preview Changes"
Se mesmo após tiver feito as alterações você desejar desfazê-las, o Global Undo está disponível para desfazer tudo.
Build e Deploy
O VSTS 2008 Database Edition tem completa integração com o MSBUILD. Isto significa que você pode usufruir de todo o processo de build e entrega de versões de suas aplicações também em mudanças na camada de banco de dados.
Sempre que são feitas alterações no ambiente, sejam objetos novos ou a alteração de objetos existentes, é gerado um arquivo .sql com as alterações. Este arquivo pode ser enviado a um DBA para aprovação e execução, ou pode ser integrado ao seu processo de build diário.
Figura 7: Processo de Build e Deploy
Através do MSBuild é possível:
- Utilização por linha de comando
- Acesso por programação
- Ligação entre as tarefas
- Integração do time
Como já disse aqui, é possível enviar apenas alterações realizadas ou um banco de dados completo para o destino.
Em um deployment completo, todo o banco de dados é criado no destino. Este é o comportamento padrão, quando o destino não existe, mas também pode ser forçado pela opção de build “Always Recreate Database”
Em um deployment incremental, são enviadas apenas as diferenças entre o projeto e o banco de dados de destino.
Você pode ainda utilizar um script incremental que valida a versão do servidor de destino, nome do banco de dados e database compatibility level, entre outros atributos do servidor ou do banco de dados. Se a validação falhar em algum critério que voc6e especifique, o deploy pode ser abordado.
Mas se você não deseja utilizar o MSBUILD por linhas de comando, o VSTS 2008 pode enviar as alterações através de sua IDE.
Recursos para Teste
O VSTS 2008 oferece recursos para que você possa realizar testes em seu banco de dados. É possível fazer teste de unit e gerar dados de teste para popular suas bases.
Testes de Unit
O recurso de Unit Test disponível no VSTS 2008 funciona em conjunto com o Team Test do VSTS 2008. É possível utilizar código .NET para gerar os testes e também T-SQL. Pode-se, por exemplo, dizer se é esperado um tipo de resultado a partir de uma stored procedure e avaliar este resultado ao final da execução dos testes. O resultado pode ser um ResultSet, um RowCount ou valores escalares, por exemplo. Ou até mesmo um retorno sem conclusão determinada.
Dados de teste
Este é um dos meus recursos preferidos no VSTS 2008. O gerador que já vem embutido no VSTS 2008 (ele também permite que você plugue geradores de dados de terceiros) utiliza diferentes técnicas para gerar dados que são realmente relevantes para os seus testes. Pode-se pode exemplo utilizar expressões regulares para gerar expressões.
Aí vai um roteiro de exemplo para um gerador de testes em cima do banco de dados Northwind:
- Clique em dbo.Orders
- Clique no menu Data, Data Generator, e clique em Column Details.
- Em Column Details, selecione ShipCity, e defina o campo Generator com o valor Data Bound Generator. Isto indica que o gerador vai obter seus resultados a partir de uma query.
- No menu View, clique em Properties Window
- Na janela de propriedades, veja a sessão Generator. Na propriedade Connection Information, clique na conexão que corresponde ao banco de dados do qual você importou o schema. Esta opção se deve ao fato de consultarmos os dados em um banco de dados já existente.
- Na janela de propriedades, em Generator, na propriedade Query, defina a query string como "SELECT * FROM Orders".
- Em Column Details, no campo Generator Output para ShipCity, clique em [OutputTable1].[ShipCity].
- Salve o data generation plan.
Como sempre, fique a vontade para escrever seus comentários ou dúvidas.
Já está disponível o webcast que gravei para a equipe do MSDN sobre Manage and Deploy Database, com o Microsoft Visual Studio Team System 2008 Database Edition. Os tópicos abordados no webcast são:
- Visão Conceitual: visão geral sobre o produto
- Ciclo de vida de Desenvolvimento em Banco de Dados: como o desenvolvimento em banco de dados se integra ao ciclo de vida de desenvolvimento de software na sua empresa
- Iniciando um Projeto Novo (demonstração): técnicas para iniciação de um projeto a partir de um banco de dados novo, ou criação de um projeto baseado em um banco de dados já existente
- Estrutura do Projeto (demonstração): como o banco de dados fica estruturado no Visual Studio Team System
- Enviando Alterações (demonstração): como enviar apenas uma alteração simples para o banco de dados de produção, ao invés de "dropar" o banco de dados e reconstruí-lo
Para quem não conhece o DB Pro (como é chamado), trata-se de uma edição do Visual Studio que insere o banco de dados no ciclo de vida de desenvolvimento de software. Ele contém ferramentas interessantes, como a comparação de schemas (pode-se comparar o schema de um banco de produção com um de desenvolvimento e ver as diferenças, por exemplo), geração de dados relevantes para teste e deploy diferencial de um banco de dados, entre muitos outros recursos.
No próximo post vou escrever especificamente sobre o Visual Studio Team System 2008 Database Edition. Por hora, recomendo o webcast de apenas 37 minutos disponível em https://www.msdnbrasil.com.br/experience/vsts/Secure/Conteudo.aspx (Módulo 04 - Sessão 2 - Manage and Deploy Database)
Alta disponibilidade é um assunto obrigatório quando falamos em servidores corporativos de banco de dados. Em qualquer segmento do mercado podemos citar exemplos de aplicações que não podem parar de funcionar: desde o controle de uma balança de caminhões na estrada até a emissão de passagens aéreas. Hospitais são um dos exemplos com o qual eu mais gosto de pensar quando falamos em missão crítica.
Meu professor de guitarra dizia a alguns anos que eu parecia médico, pois, quando eu trabalhava com suporte e precisava fazer plantão, ficava disponível 24 horas por dia no período de uma semana, que era o meu período de plantão em um mês. Mas eu acho que, por maior que seja o prejuízo de um sistema parado, nenhum supera o prejuízo de uma vida perdida ou de um atendimento de emergência que não pôde ser iniciado. Então quem faz missão crítica mesmo são os médicos e enfermeiros, não nós, meros geeks da área de TI J
Vamos voltar aos nossos prejuízos por causa de aplicações paradas. Os prejuízos podem ser em receita (entrada de pedidos, vendas), em aumento de custos (caminhões parados, utilização de processos manuais ou de contingência) e até mesmo na imagem da empresa (atendimento a clientes, emissão de passagens, entrega de produtos), entre outros. O SQL Server oferece diversas alternativas para atingirmos níveis non-stop de alta disponibilidade. É a abordagem que a Microsoft chama de Always On Technologies. No caso do SQL Server, seja com soluções como clusters geográficos ou outras muito simples e baratas como o Database Mirroring, os níveis alcançados de alta disponibilidade atendem as necessidades de negócio, independente do tamanho ou complexidade da aplicação. Neste post, vamos explorar algumas das alternativas de alta disponibilidade oferecidas pelo SQL Server 2005 e como elas foram melhoradas no SQL Server 2008. Mãos a obra.
Antes de tudo, porque tantas opções?
Uma pergunta freqüente é: porque existem tantas opções para resolver o mesmo problema? As diversas opções de alta disponibilidade oferecidas pelo SQL Server visam atender a qualquer cenário, não importa o tamanho da empresa. Seja um banco de dados de 100MB ou de 30TB, uma aplicação distribuída contra uma centralizada, temos uma solução mais apropriada para cada cenário. O que se deve fazer é olhar caso a caso e optar pela melhor opção. E, porque não, utilizar as opções de alta disponibilidade combinadas.
Database Mirroring
O Database Mirroring foi introduzido ao SQL Server 2005 como parte do Service Pack 1. Trata-se de uma tecnologia que permite atingir os maiores níveis de alta disponibilidade de uma forma muito simples e barata. Ele permite espelhar um banco de dados em outro servidor, aplicando quaisquer alterações no banco de dados no servidor principal instantaneamente no servidor de espelho.
Dependendo da forma como o Database Mirroring for configurado, o failover para o servidor de mirror pode ser automático, sem necessidade de chaveamento manual na aplicação. Isto é feito através da utilização de um servidor chamado witness (testemunha) que monitora a disponibilidade do servidor principal e “notifica” as aplicações que se conectam a ele a chavearem para o servidor de mirror. (as aplicações procuram pelo witness através de um parâmetro em sua connection string) Muito simples de configurar e manter, tem sido amplamente utilizado no mercado.
Quanto a desempenho, pode-se configurar se as transações serão enviadas em tempo real (de forma síncrona) ou com um pequeno atraso (de forma assíncrona). Isto permite balancear a carga de rede e de processamento.
No SQL Server 2008, o Database Mirroring foi melhorado. Ele compacta os dados que são enviados entre os servidores, gerando uma carga menor em rede. Além disso, a proteção dos dados passa a ser feita por páginas (pages of data): se uma página estiver corrompida, tanto no servidor principal quanto no mirror, o mecanismo do Database Mirroring toma o cuidado de recuperar a página a partir do outro servidor.
O que torna o Database Mirroring uma solução barata, afinal de contas? Vários fatores. Um dos principais é o fato de não precisar de hardware específico, como um cluster, por exemplo, que exige um disco compartilhado e hardware para cluster. Outro ponto importante é que se o servidor onde fica o mirror não for utilizado para consultas de outras bases de dados (apenas em stand by), não é necessário pagar a licença do SQL Server que está atuando como mirror. Esta configuração é chamada de cold backup. A partir do momento que a instancia de cold backup passa a ser utilizada, ainda que apenas para leitura, se faz necessário licenciar também este servidor. Porém, no caso de um failover, o servidor de backup pode ficar no ar até trinta dias no lugar do principal, sem que seja necessário pagar a licença do cold backup.
Log Shipping
O Log Shipping é uma tecnologia de alta disponibilidade que aplica logs transacionais em uma cópia do banco de dados com certa periodicidade, garantindo uma cópia atualizada do banco de dados na rede. Embora o tempo de atraso entre a aplicação destes logs no servidor secundário possa resultar em um banco de dados desatualizado no destino, pode-se utilizar a base secundária para leitura dos dados e recuperação caso ocorra um erro humano na base principal.
O Log Shipping está disponível desde versões anteriores do SQL Server e também é utilizado amplamente.
Failover Clustering
Geralmente o Failover Clustering é a solução mais comum quando falamos em alta disponibilidade. O SQL Server usufrui do serviço de cluster do Windows Server para garantir alta disponibilidade em caso de falha de hardware. O serviço de cluster do Windows Server (Microsoft Cluster Service) garante que serviços hospedados em um servidor sejam movidos a outro em caso de falha de hardware, com queda mínima no tempo de serviço (pouco maior do que o Database Mirroring). Esta solução requer hardware específico, sendo esta a principal desvantagem. Os servidores que são membros do cluster acessam um mesmo sistema de discos, que é compartilhado entre todos os membros do cluster.
O cluster é muito simples de se configurar, tendo todos os pré-requisitos atendidos. Da parte do Windows Server, um simples assistente faz a configuração. No caso do SQL Server, durante a instalação você marca uma opção dizendo que irá “clusterizar” recursos como o Database Engine ou o Analysis Services, escolhe os nós (nodes) do cluster que farão parte da instalação do SQL Server e o programa de instalação toma os devidos cuidados. Ao contrário do que muitas pessoas pensam, a versão Standard do SQL Server 2005 suporta a configuração de cluster de dois nós (nodes).
A principal novidade no SQL Server 2008 é o fato de não precisar de um drive lógico para cada instância SQL no cluster: agora várias instâncias podem utilizar um mesmo drive lógico (“G:“, por exemplo), o que deverá viabilizar mais a instalação de múltiplas instâncias SQL Server em um mesmo cluster. Além disto, agora será possível suportar 16 nós (nodes) em um cluster, mas este é na verdade um benefício do Windows Server 2008.
Geographically Dispersed Failover Clustering
Imagine um cluster separado fisicamente, com replicação de storage. Isto é o Geographically Dispersed Failover Clustering. A grande vantagem dele sobre o cluster comum é exatamente a característica de replicação do storage, que elimina um ponto de falha na solução. Na eventual falha do sistema de discos de um dos nós, todo o controle é cedido ao servidor secundário, que tem uma réplica dos dados.
Peer-to-Peer Replication
Entre os vários modelos de replicação do SQL Server, talvez este seja o que melhor se aplica ao tema alta disponibilidade. A replicação Peer-To-Peer permite que os dados sejam replicados entre dois ou mais servidores, não importa onde as alterações ou inserções estão sendo feitas. Para este cenário, no entanto, as aplicações precisam ser desenhadas de modo que sejam direcionadas a um dos servidores em específico, já que o SQL Server não faz resolução de conflitos (para isto, veja merge replication). Esta solução é especialmente apropriada quando falamos em servidores que estão separados por distâncias maiores.
Até o SQL Server 2005, o processo de replicação precisava ser interrompido caso houvesse a necessidade de adicionar um servidor a topologia de replicação. No SQL Server 2008, no entanto, este não é o caso: servidores podem ser adicionados à topologia de replicação sem parada da replicação.
Downtime Reduzido
Além das tecnologias citadas acima, vários recursos internos do SQL Server permitem uma maior disponibilidade do sistema. Alguns deles são:
- Fast Database Recovery: disponibiliza parcialmente os bancos de dados durante o processo de recovery (enquanto faz rollback de algumas transações, por exemplo) , durante o failover em Database Mirroring e em processos de restore.
- Backup and Restore: o processo de backup e restore permite que você faça cópias em várias unidades de fita, por exemplo, (também pode ser em disco) para ajudar em casos de perda ou de comprometimento da mídia de backup. O SQL Server também gera checksums para poder fazer verificações na fase de restore. No SQL Server 2008 a novidade é poder fazer backup comprimidos, que podem reduzir o número de fitas necessárias para o backup significativamente.
- Checksum on Data Pages: compara os valores escritos no disco aos valores lidos do checksum (aplicando-se um algoritmo de verificação). Se não coincidirem, a página é marcada como suspect e precisa ser restaurada.
- Online Index Operations: outro dia falei sobre isto em um cliente e ele disse: “-O SQL Server realmente faz isso?”. Faz sim!Desde o SQL Server 2005, é possível fazer manutenção em índices sem afetar a disponibilidade.
- Online Piecemeal and Page-Level Restore: no SQL Server 2008, permite que se faça o restore dos filegroups por partes, deixando disponíveis os dados já restaurados. Também permite que se faça o restore de páginas corrompidas.
- Partial Database Availability: deixa um banco de dados disponível mesmo se parte dele estiver comprometida (por falha em um disco, por exemplo)
- Snapshot Isolation: garante que registros sejam lidos mesmo durante alteração dos dados, a partir da visualização de versões de uma linha. Aumenta a disponibilidade pelo fato de reduzir os tempos de lock substancialmente. Eu considero este um dos principais benefícios do database engine do SQL Server 2005 em relação a versões anteriores.
- Dynamic Configuration: possibilidade de fazer upgrade de hardware sem parar o serviço. Como um exemplo, adicione memória em um servidor ligado (desde que o hardware dê suporte a isto) e disponibilize esta memória para o SQL Server sem parar o servidor. No SQL Server 2008, a novidade é o suporte a adição de processadores sem parar o servidor.
Perceba que alguns destes recursos estão disponíveis apenas na edição Enterprise do SQL Server. Para uma tabela comparativa entre as diferentes edições visite http://www.microsoft.com/sql/prodinfo/features/compare-features.mspx
Outro fator importante que precisa ser lembrado é que o SQL Server oferece todos os recursos citados acima out-of-box. Não é necessário pagar nada a mais para ter o Database Mirroring ou o Failover Cluster, por exemplo.
Conclusão
O SQL Server oferece diversas soluções para atingir níveis de alta disponibilidade. Embora sejam soluções individuais e auto-suficientes (não dependem necessariamente uma da outra), elas podem ser utilizadas em conjunto para atingir maiores níveis de alta disponibilidade, como no cenário abaixo:
- Database Mirroing: site primário de disastre
- Log Shipping: sites adicionais para disastre e recovery lógico (alterações não desejadas)
- Replicação: relatórios e escalabilidade para leitura, com redundância
- Clustering: redundância de servidor
- Backup
|  |
Não importa o tamanho do seu negócio ou a complexidade da sua aplicação: O SQL Server é o servidor de banco de dados ideal para atingir alta disponibilidade com baixos custos.
Filed under: SQL Server 2008, SQL Server 2005, SQL Server em português, SQL Server, Gerenciamento, Alta disponibilidade, Database Mirroring, Failover Clustering, SQL Server backup, Cluster, Log Shipping, Peer-To-Peer Replication
Existem muitos mitos em torno de Data Mining. O principal deles diz que Data Mining é algo que está fora do alcance dos usuários comuns. Dizem que Data Mining requer treinamento específico e que as ferramentas que o fazem são, em geral, caixas pretas das quais não tiramos proveito nenhum. Para quebrar tais mitos, nada melhor do que demonstrar como utilizar os algoritmos de Data Mining do SQL Server a partir do Office Excel - fácil, simples, poderoso e todo mundo já conhece.
O que é Data Mining?
Data Mining é um processo de análise dos dados a fim de se identificar informações relevantes. Tais informações podem representar tendências, comportamentos, determinar perfis, agrupar registros em comum ou várias outras tarefas. Quando eu estava na escola, aos 7 ou 8 anos de idade, ficava perguntando para minha professora (e para os meus pais) por que eu precisava aprender História. Achava chato e desnecessário. A resposta que eu tinha, em geral, era: "-Precisamos estudar história para entender o presente e o futuro.". Nunca entendi isso muito bem. Eu ia bem em matemática, português, inglês... mas ia muito mal em história. Só fui me interessar por história mais tarde. Com Data Mining, é a mesma coisa. Os terabytes de dados presentes nos datawarehouses podem nos ensinar muito sobre o que fizemos e, principalmente, sobre onde podemos chegar. E é isso que o Data Mining nos permite: fazer uma análise do seu histórico, a fim de se interpretar os dados e tomar decisões melhores.
Algoritmos
O SQL Server 2005 Analysis Services já traz implementações dos principais algoritmos de Data Mining utilizados no mercado. A tabela abaixo indica alguns cenários e quais algoritmos se aplicam melhor:
| Objetivo | Algoritimo |
| Prever um atributo discreto. Por exemplo, prever quando o destinatário de uma campanha de mala direta vai comprar um produto. | Decision Trees Naive Bayes Clustering Neural Network Logistic Regression Linear Regression |
| Prever um atributo contínuo. Por exemplo, fazer a previsão de vendas do próximo ano. | Decision Trees Time Series |
| Prever uma seqüência. Por exemplo, realizar uma análise de seqüência de clicks em um site. | Sequence Clustering |
| Encontrar grupos de itens em comum em transações. Por exemplo, analisar uma cesta de compras e sugerir produtos relacionados. | Association Rules Decision Trees |
| Encontrar grupos com itens similares. Por exemplo, segmentar dados demográficos em grupos para entender melhor o relacionamento entre os atributos. | Clustering Sequence Clustering |
O Analysis Services aceita plugins de terceiros para implementar outros algoritmos, caso sua necessidade não seja atendida pelos algoritmos que são oferecidos out-of-box. Você pode também desenvolver seu próprio algoritimo de Data Mining utilizando programação .NET.
Data Mining no Excel 2007
Os algoritmos citados acima são oferecidos pelo Analysis Services e podem ser utilizados em seus cubos, ou até em modelos de mining acessando dados em um banco de dados relacional. Isto todos já sabem. O que algumas pessoas não sabem ainda é que toda a inteligência do Analysis Services pode ser consumida através de APIs, ou a partir do Microsoft Office. Para esta segunda finalidade, foi desenvolvido um add-in de Data Mining para o Microsoft Excel que permite utilizar os recursos de análise de dados do Analysis Services em dados de tabelas do Excel. Isto mesmo, seus dados nem precisam estar em um SQL Server. Vamos ver como isto funciona.
O Add-in de Data Mining para o Microsoft Office Excel 2007 está disponível em http://www.microsoft.com/sql/technologies/dm/addins.mspx. Já de antemão, lhe convido a instalar o Add-In e navegar pelos webcasts presentes neste mesmo site. Ele dá exemplos da utilização e mostra como funciona esta ferramenta (que na verdade é composta de três add-ins: dois para o Excel e um para o Visio).
Tendo instalado o Add-In, você vai perceber que duas Ribons novas são adicionadas: uma delas chamada Data Mining, que permite trabalhar com modelos de mining presentes em um Analysis Server, e uma outra chamada Analyse, que só fica visível quando você seleciona uma tabela dentro do Excel.
Para utilizar os algoritmos de data mining em uma tabela de dados do Excel, basta selecionar a tabela e clicar no botão do algoritmo apropriado.
Um exemplo rápido
A planilha de exemplo utiliza dados no cenário do banco de dados AdventureWorks, que faz parte dos samples do SQL Server 2005. AdventureWorks é uma empresa fictícia de vendas de bicicletas e acessórios. A tab SourceData da planilha de exemplo descreve o perfil de potenciais clientes, com informações de renda anual, estado civil, idade e sexo entre outros, e no final diz se este cliente adquiriu uma bicicleta ou não (na coluna BikeBuyer). A idéia do exemplo é mapearmos o perfil de cliente que compra uma bicicleta, para que possamos fazer uma mala direta direcionada a clientes com o mesmo perfil. Para fazer esta análise utilizando a planilha de exemplo do Add-in, siga os seguintes passos:
1) Após ter aberto a planilha (presente em Iniciar-> Programas -> Microsoft SQL Server 2005 DM Add-ins), clique na Sheet SourceData
2) Selecione a tabela com dados de exemplo. Perceba que ao selecionar, o ribon "Analyze" fica disponível. Clique no botão "Analyze Key Influencers". Um assistente será iniciado
3) É iniciado um assistente. Este assistente coleta informações sobre as colunas que devem ser utilizadas por parte desta análise e qual é o atributo que devemos analisar.
4) Em Column Selection, selecione BikeBuyer. Este é o atributo sobre o qual será feita a análise de influência, ou seja, o que tem de comum os clientes que tem BikeBuyer = Yes e o que tem em comum os clientes que tem BikeBuyer = No.
5) Clique em Choose columns to be used for Analysis. Aqui você poderá escolher todos os atributos que serão utilizados na análise. O campo ID não é relevante para análise, assim como nosso RG ou CPF não determina se você tem o perfil de uma pessoa que compraria uma bicicleta ou não. Portanto, vamos remover este atributo e manter os demais
6) Clique em Ok e depois em Run.
Neste instante, o add-in passa os dados da tabela do Excel para o Analysis Services, que aplica o algoritmo de Data Mining mais apropriado aos dados. Após a conclusão, o add-in exibe já no Excel o resultado da análise. Perceba que pessoas que não tem carro tem maior chance de comprar uma bicicleta, ssim como as que tem entre 36 e 46 anos. Já uma pessoa que tem 2 carros e 64 anos ou mais, baseando-se nos dados de prospecto que temos, não compraria uma bicicleta.
O add-in vai muito além disto, este é apenas um exemplo rápido e superficial. Lembre-se ainda que estes algoritmos podem ser consumidos a partir de uma aplicação .Net, o que significa que esta funcionalidade pode ser embutida dentro da sua aplicação. A partir daí, não existem mais limites. O principal desafio ao fazer Data Mining é o entendimento de negócio. É preciso saber qual a necessidade específica que se tem e como melhor utilizar seus dados para ter o resultado desejado.
Como sempre, fique a vontade para utilizar a área de comentários para postar suas dúvidas.
Uma pergunta bastante frequente que eu recebo é sobre a integração do SQL Server Reporting Services com o SharePoint Services (ou SharePoint Server). É possível armazenar seus relatórios .rdl em document libraries do SharePoint e se conectar a um Report Server para que este "renderize" os relatórios. Também é possível utilizar web parts do SharePoint para exibir relatórios armazenados em um Report Server, estando ele integrado ao SharePoint ou não. Esta configuração é bem simples, vamos passar por ela neste artigo.
Passo a Passo
Vou seguir o processo aqui como se não tivesse um Report Server e um SharePoint instalado em seu ambiente. Desta forma, você pode começar a utilizar este recurso imediatamente, mesmo se não utiliza o SharePoint atualmente na sua organização. Os passos para esta configuração se resumem em:
- Instalar e Configurar o SQL Server Reporting Services e aplicar o Service Pack 2
- Instalar o Microsoft .NET Framework 3.0 (requerido pelo SharePoint Services 3.0)
- Instalar o Windows SharePoint Services ou Office SharePoint Server 2007
- Instalar o add-in do Reporting Services para o SharePoint
- Configure a integração.
Por questões de praticidade, não vou entrar nos detalhes passo-a-passo de cada item acima. Ao invés disso, vou dar foco aos pontos chave desta integração. Se você tiver dúvidas em qualquer um dos passos abaixo por favor me avise, eu explico com maiores detalhes.
SQL Server Reporting Services e Service Pack 2
Você não precisa instalar nenhum outro componente do SQL Server 2005 além do Reporting Serivces, nem mesmo o Database Engine, se assim preferir. O banco de dados de configuração do Report Server pode ficar em outro servidor na sua rede. Para isto, basta executar o Reporting Services Configuration para deixar o Report Server no ar. No primeiro instante, configure-o de forma nativa, sem integração com SharePoint.
Após a instalação, aplique o Service Pack 2 do SQL Server 2005. Ele está disponível em http://www.microsoft.com/downloads/details.aspx?FamilyId=d07219b2-1e23-49c8-8f0c-63fa18f26d3a&DisplayLang=en
.NET Framework 3.0
O SharePoint Services 3.0 exige a instalação de componentes do Microsoft .NET Framework 3.0. Basta fazer o download e executar o assistente de instalação. Este pacote tem apenas 2.8 MB e pode ser encontrado em http://www.microsoft.com/downloads/details.aspx?FamilyID=10CC340B-F857-4A14-83F5-25634C3BF043&displaylang=en
Windows SharePoint Services ou Office SharePoint Server 2007
Se você não tiver o Office SharePoint Server 2007 na sua empresa, pode baixar o Windows SharePoint Services gratuitamente. Este segundo não contém todas as funcionalidades do Office SharePoint Server, mas atende aos requisitos de integração com o Reporting Services.
Para fazer o download do SharePoint Services 3.0, visite http://www.microsoft.com/downloads/details.aspx?familyid=D51730B5-48FC-4CA2-B454-8DC2CAF93951&displaylang=en
Add-in do Reporting Services para o SharePoint
Este é o componente de integração entre o Reporting Services e o SharePoint. Ele instala os web parts que são utilizados pelo SharePoint para visualizar relatórios do Reporting Services e a interface de integração. Se você sentir que ao final do assistente de instalação deste componente, em "Removing Temporary Files", o assistente ficar parado por vários minutos, saiba que isto é normal. Esta etapa leva um tempo considerável para concluir.
O add-in está disponível para download em http://www.microsoft.com/downloads/details.aspx?familyid=1E53F882-0C16-4847-B331-132274AE8C84&displaylang=en
Configuração
Tendo instalado todos os componentes necessários, podemos partir para a configuração do ambiente. Vamos aos passos necessários para a configuração
IIS
Quando configuramos o Reporting Services (ou quando o instalamos com opção de configuração padrão), o serviço configura o Report Manager e o Report Server no Default Web Site do IIS, que, por padrão, utiliza a porta 80. Logo depois, quando instalamos o SharePoint Services, o assistente configura o portal do SharePoint em um web site diferente no IIS, porém também configura este web site na porta 80. Como resultado, teremos o Default Web Site parado, já que não podemos ter dois sites configurados na mesma porta TCP. Portanto, o primeiro passo é configurar o Default Web Site (onde o Report Server e o Report Manager são instalados por padrão) com uma porta diferente. Neste exemplo, vamos configurar na porta 8080. A figura abaixo ilustra a configuração dos dois Web Sites.
Para testar a configuração do Report Server, abra um browser e acesse o site http://localhost:8080/ReportServer. A resposta deverá ser como a tela da figura abaixo:
Reporting Services em modo integrado
O próximo passo é configurar o banco de dados do Reporting Services em modo integrado com o SharePoint. Esta configuração cria o banco de dados de metadados do Reporting Services com atributos específicos para a integração e desativa o Report Manager.
- Abra o Reporting Services Configuration tool e clique em Database Setup
- Em Server Mode, clique em Change e depois em Yes
- Em Database Name, digite o nome que preferir para o banco de dados (por exemplo, ReportServer_MOSS). Garanta que o checkbox Create a report server database in SharePoint integrated mode está marcado
- Clique em OK, em Apply e em OK novamente. A janela de configuração deverá estar parecida com a janela da imagem abaixo
Configurar a integração pelo SharePoint
O SharePoint precisa saber qual é o Report Server responsável por "renderizar" relatórios existentes nas document libraries. Para fazer esta configuração, siga os passos abaixo:
- Abra o SharePoint 3.0 Central Administration (Start->Administrative Tools)
- Clique em Application Management. Aqui você perceberá que tem uma sessão nova chamada Reporting Services, que foi adicionada pelo add-in que já instalamos. Clique em Integration Settings
- Em Report Server Web Service URL, digite o endereço para o Report Server, como na figura abaixo. Neste exemplo, utilizei localhost porque o Report Server e o SharePoint estão no mesmo host. No entanto, perceba que esta configuração pode ser feita em servidores diferentes, então aqui você digitaria o hostname do seu Report Server. Selecione também o modo de autenticação e clique em OK
-
De volta a tela Application Management, clique em Grant Database Access
-
Clique em OK. O nome do servidor já deve estar configurado nesta tela.
Resultado e conclusão
Após ter concluído esta configuração, vários benefícios e recursos novos ficam disponíveis. Entre eles, você poderá ter arquivos .rdl em uma document libary, por exemplo, e exibir o seu relatório a partir da página onde ele está armazenado. Você pode ainda invocar o Report Builder e editar seus relatórios gerados a partir de modelos (veja a imagem abaixo). Também será possível exibir relatórios presentes em um report server em um dashboard por exemplo.

Quantas vezes eu ouvi administradores reclamarem que seus desenvolvedores fazem queries "assassinas", que derrubam todo o servidor. Muitas vezes. Algumas soluções atuais como particionamento e até o Database Mirroring atendem a demandas de queries que consomem mais recursos de hardware sem afetar o restante do sistema, mas estas soluções em geral requerem um servidor adicional e copiar o banco de dados com queries "pesadas" para uma outra localidade.
Agora será possível limitar os recursos de hardware que serão alocados para um banco de dados em específico - imagine poder reservar 20% do seu processador e 35% da sua memória para um banco de dados e garantir que o restante estará reservado para os outros bancos de dados: isto é o Resource Governor.
Definição
O Resource Governor é uma nova tecnologia presente no SQL Server 2008 que permite aos administradores gerenciar a carga e os recursos do SQL Server 2008. Ele faz isso através de políticas de limite de consumo de recursos (ufa). É possível criar grupos (workloads) com perfis de utilização de hardware, como "Queries de Alta Prioridade" ou "Queries Menos Importantes" e atribuir a estes workloads critérios de consumo de processador e memória. Ele não apenas é importante para limitar a utilização de processador e memória em queries que já conhecemos, mas também para garantir que queries com comportamento desconhecido se comportem de forma que não comprometam o restante da operação do servidor. Ou seja: não apenas podemos definir o que conhecemos por prioritário, mas também queries (ou requisições) que nos pegam de surpresa.
Conceitos
Quando falamos em Resource Governor, os seguintes termos precisam ser entendidos:
Resource Pools
Trata-se de um pool que representa os recursos físicos de um servidor. Ao criar um Resource Pool (por padrão, o SQL Server 2008 instala um default e um system pool), pode-se especificar um valor mínimo GARANTIDO e máximo de reserva de CPU e de memória. Você pode criar tantos pools quanto achar necessário, mas a soma dos valores mínimos de cada pool não podem exceder 100% dos recursos disponíveis (ex.: não posso ter um pool que reserva mínimo de 60% de CPU e outro que reserva mínimo de 50%). O valor máximo pode ser qualquer valor entre o mínimo e 100%. Conforme os pools são criados, o SQL Server calcula o valor real reservado para cada um dos pools. Por exemplo:
| Nome do Pool | MIN % | MAX % | Efetivo (Calculado) MAX % | Calculado (compartilhado)% | Como o cálculo é feito |
| internal | 0 | 100 | 100 | 0 | |
| default | 0 | 100 | 30 | 30 | Efetivo (MAX): min(100,100-(20+50)) = 30. Compartilhado: MAX (Efetivo) - MIN = 30. |
| Pool 1 | 20 | 100 | 50 | 30 | Efetivo (MAX): min(100,100-50) = 50. Compartilhado: MAX (Efetivo) - MIN = 30. |
| Pool 2 | 50 | 70 | 70 | 20 | Efetivo (MAX): min(70,100-20) = 70. Compartilhado: MAX (Efetivo) - MIN = 20. |
Se outros pools forem criados, os valores efetivos e compartilhados seriam recalculados, de acordo com o requerimento mínimo do novo pool.
Workload Groups
Os Workload Groups são containers que agrupam requisições que tem algo em comum.
Classification
Utilizamos Classifications para identificar sessões abertas ao SQL Server 2008 e atribuí-las a Workload Groups. São criadas funções que analisam um critério e estas funções são executadas em TODAS as conexões abertas ao SQL Server para que o encaminhamento seja feito. Veremos mais a frente como a classificação é feita (o que é avaliado no instante da conexão).
Como utilizar e exemplos
Recomendo fortemente que você comece a testar o Resource Governor e se familiarizar com sua configuração. Veremos aqui que é bastante simples habilitar e começar a criar seus Resource Pools.
Habilitar e Desabilitar o Resource Governor
Para habilitar ou desabilitar, simplesmente abra o SQL Server Management Studio, expanda Management e clique com o botão direito em Resource Governor, como na figura abaixo. Selecione Enable ou Disable (respectivamente).
Configurar Resource Pools e Workload Groups
Ao clicar com o botão direito do mouse sobre o Resource Governor e selecionando properties, a janela da figura abaixo é exibida. Ela também será exibida se clicarmos em "New Resource Pool". Perceba que a lista de Workload groups for resource pool (itens do grid de baixo) exibe apenas os Workload Groups do Resource Pool selecionado
Classificar as conexões e utilizar os pools corretos
O código abaixo cria uma função que avalia o nome do usuário conectado e a aplicação de origem e registra esta função com o Resource Governor:
CREATE FUNCTION rgclassifier_v1() RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @grp_name AS SYSNAME
IF (SUSER_NAME() = 'sa')
SET @grp_name = 'groupAdmin'
IF (APP_NAME() LIKE '%MANAGEMENT STUDIO%')
OR (APP_NAME() LIKE '%QUERY ANALYZER%')
SET @grp_name = 'groupAdhoc'
IF (APP_NAME() LIKE '%REPORT SERVER%')
SET @grp_name = 'groupReports'
RETURN @grp_name
END
GO
--Registra a função com o Resource Governor
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_v1)
Perceba que o Resource Governor registrou a função
Conclusão
As possibilidades são infinitas. O maior desafio vai ser definir os Resource Pools e a classificação das conexões. O Resource Governor resolve de forma muito simples (gráfica, embora tudo possa ser feito por T-SQL) uma necessidade importante dos administradores SQL Server. Os exemplos acima são superficiais e refletem o estado do SQL Server 2008 CTP5.
Um dos recursos mais aguardados do SQL Server 2008 para os administradores é o Declarative Management Framework. Trata-se de um sistema de gerenciamento baseado em políticas que, através de objetos reutilizáveis, permite que se configure o SQL Server e seus componentes em aderência a políticas de governança das empresas. Por exemplo: digamos que a política de uma empresa define que o Database Mail não deve estar habilitado em um grupo de servidores SQL Server, ou que todas as tabelas criadas em um banco de dados não podem pertencer ao schema dbo – ou ainda melhor, que todas as tabelas precisem seguir um padrão de nomenclatura. O Declarative Management Framework ajuda os administradores a chegar a este nível de granularidade na administração de seus servidores. Vamos falar sobre alguns conceitos chave do Declarative Management Framework e em seguida para um exemplo rápido.
O SQL Server Management Studio é a ferramenta utilizada para trabalhar com o Declarative Management Framework. Pode-se criar políticas para prevenir mudanças que violem as suas normas, alertar e logar mas permitir a mudança, e pode-se agendar a verificação de aderência a políticas (neste caso, quaisquer exemplos não-aderentes são também apenas logados). Imagine se seu sistema pudesse enviar uma mensagem ao desenvolvedor ou administrador quando estes tentam criar objetos com nomes que não sigam a convenção imposta pela sua empresa, dizendo como deve ser o nome correto – as políticas do Declarative Management Framework também permitem isto. Vamos então aos principais conceitos do Declarative Management Framework:
· Facets – são objetos que contém propriedades que expõe uma área gerenciável. Por exemplo, a facet Surface Area inclui propriedades que são relacionadas aos recursos do SQL Server como Database Mail Enabled, e CLR Integration Enabled;
· Conditions – expressam o estado de uma facet. Por exemplo: pode-se criar uma condição chamada “Área de Ataque Reduzida” onde todas as propriedades da facet Surface Area são definidas como False;
· Policies – aplica uma condição em um ou mais Targets (definido mais adiante). Como um exemplo, pode-se criar uma policy chamada “Servidores Protegidos” que aplica a condição “Area de Ataque Reduzida” a um servidor;
· Categories – é um agrupamento de policies. Digamos que se criem diversas policies com exigências em bancos de dados novos, como padrões de nome de tabelas ou stored procedures, exigência sobre o Compatibility Level do banco de dados ou outros. Pode-se atribuir os bancos de dados a Categories para que eles sejam aderentes a um conjunto de policies. Por padrão, todos os bancos de dados pertencem a default category.
· Targets – são entidades como servidores, bancos de dados, logins, tabelas ou qualquer outro objeto sobre os quais se aplica uma policy. Pode também ser uma hierarquia, como “Todos os Objetos do Schema ‘Produtos’”.
Para definir uma política (policy), simplesmente especifique a condição (condition) que você quer aplicar e selecione uma facet.
É importante o entendimento destes conceitos para que se possa fazer o melhor uso do Declarative Management Framework. Este sistema viabiliza de uma forma muito fácil a re-utilização de qualquer regra, condição ou objeto definido em uma política. O SQL Server 2008 já vem com uma série de facets pré-definidas que você pode utilizar para configurar seus servidores. Aí vão alguns exemplos de utilização das facets que já vem com o produto e um cenário onde você pode utilizá-la:
· A Facet Server pode ser utilizada para forçar configurações específicas do nível do servidor, como o modo de autenticação;
· A Facet Surface Area pode ser utilizada para controlar quais recursos estão habilitados a fim de se reduzir a área de ataque;
· A Facet Database pode ser utilizada para restringir configurações específicas de um banco de dados, como o Compatibility Level;
· A Facet Multipart Name ajuda a garantir a aderência de nomenclatura dos objetos dos bancos de dados como tabelas, views e stored procedures.
Nunca é demais lembrar que uma category pode ser publicada para outros servidores em seu ambiente, o que reduz drasticamente o esforço de administração e a possibilidade de se ter servidores com políticas diferentes.
Exemplos de Utilização
Tendo falado sobre os conceitos do Declarative Management Framework, vamos um exemplo passo a passo de utilização das políticas. Este exemplo verifica se o servidor está configurado para permitir a utilização do CLR (Common Language Runtime) e de queries Ad Hoc. Para isto, siga os seguintes passos:
1) Abra o SQL Server Management Studio. No Object Explorer, clique em Management -> Policy Management -> Facets. Aqui você já pode visualizar todas as facets que foram criadas e as que o SQL Server 2008 traz por padrão. Para este exemplo, clique com o botão direito na facet Surface Area Configuration e clique em New Condition;
2) Na caixa Name, digite “Area de Ataque Reduzida” ou o nome que preferir. Perceba que a caixa Facet já mostra “Surface Area Configuration”;
3) Em Expression, no campo Field, selecione ”@ClrIntegrationEnabled”. Em Operator, selecione “=” e em Value “False”;
4) Na linha seguinte, em Field selecione ”@AdHocRemoteQueriesEnabled”. Em Operator, selecione “=” e em Value, “False”. A janela deve ficar como ilustrado na figura abaixo. Até aqui, criamos uma condição sobre uma facet;
5) Para criar a política, clique com o botão direito novamente em Surface Area Configuration e clique em New Policy;
6) No campo Name, digite “Desativados por padrão”. Na caixa Check Condition, selecione “Area de Ataque Reduzida” (que está sob “Surface Area Configuration”);
7) Clique na tab Description. Em Category, clique em New. Digite “Servidores com configuração restrita” e clique em Ok. Digite uma descrição para esta categoria, como preferir – estas informações estarão disponíveis aos administradores quando a política for violada. Clique em OK.
NOTA: Perceba que esta política será utilizada sob demanda. Você poderia também habilitar a caixa Enabled e em Execution Mode selecionar “On Schedule” para que ela fosse executada automaticamente.
Agora que criamos a política, vamos executar e ver o resultado.
1) No Object Explorer, clique com o botão direito sobre um servidor e selecione Policy -> Run Now;
2) Na caixa Run Now, selecione a política que foi criada (neste caso, “Desativados por padrão”) na caixa From Server e clique em Check.
Perceba que a política avalia a configuração dos servidores e indica se estão sendo violadas ou não. Neste exemplo, como você pode ver na figura abaixo, apenas uma das políticas foi violada.
Vamos utilizar a mesma interface para FORÇAR a aderência a esta política. Para isto, simplesmente clique no botão Configure, na caixa Run Now. Verifique que agora os servidores passam no teste das políticas.
A figura abaixo mostra um exemplo do resultado de uma violação de política de nomenclatura de objetos. Se você gostaria de saber como criei este exemplo, deixe um comentário aqui e eu envio diretamente.

Este tipo de política pode ser aplicada ao servidor inteiro ou a bancos de