Data

17 out, 2016

Servidores registrados: executando operações em todo ambiente

Publicidade

Eu sou fã do SQL Server e das ferramentas e produtos que acompanham o pacote. Acho que eles oferecem várias funcionalidades interessantes que aumentam a produtividade de administradores e desenvolvedores. O Management Studio (SSMS) não é exceção e surpreende com recursos sensacionais.
Mas é curioso que algumas destas funcionalidades raramente são mencionadas nas comunidades técnicas. Deste grupo, os servidores registrados são um dos meus preferidos.

Neste artigo, eu descrevo um procedimento que usa os servidores registrados para executar operações em múltiplos servidores simultaneamente.

O que são servidores registrados

“Servidores registrados” é uma funcionalidade do SSMS que existe desde o SQL Server 2005. Ela é muito útil para quem trabalha em ambientes complexos, com várias instâncias em ambientes segregados de desenvolvimento (DEV), teste (QAS) e produção (PROD).

Ele permite gravar as strings de conexão de todas as instâncias do seu ambiente, usar diferentes tipos de autenticação (SQL ou WINDOWS), atribuir apelidos a cada registro e organizar os servidores em grupos de administração.

O registro de uma nova string é bem simples. Você pode registrar uma conexão que já está em execução, ou criar uma nova conexão, clicando com botão direito sobre o grupo de servidores registrados.

001

Em seguida, defina as especificações da sua conexão, teste-a e salve-a com o nome que preferir.

002

Agora, basta um clique duplo sobre o nome da instância para abrir uma nova janela de consulta usando esta conexão.

Criando conexões com diferentes credenciais

Muitas vezes, precisamos criar um objeto no banco usando uma credencial e testar seu comportamento para o usuário final, que usa uma credencial de aplicação com privilégios limitados.

Para atender casos como este, podemos salvar nos servidores registrados duas conexões apontando para a mesma instância usando logins diferentes. Podemos, por exemplo, criar os objetos com um login de desenvolvedor (seja com autenticação SQL ou WINDOWS) e testar a operação com um login de autenticação SQL que tenha os privilégios desejados.

Organizando a lista de rervidores registrados

Muitas empresas trabalham em ambientes complexos, envolvendo distinção de instâncias por destinação (DEV/QAS/PROD), por versão do SGBD (SQL2016, SQL2014, etc), por empresa, unidade de negócio etc.

Para organizar esta árvore de servidores registrados, podemos criar grupos de servidores conforme a necessidade. Veja o exemplo a seguir:

003

Compartilhando a lista de servidores registrados

Os servidores registrados são gravados localmente. Mas é possível compartilhar o arquivo para distribuir a lista para outros usuários, como, por exemplo, para o time de DBAs, time de desenvolvedores, testadores etc.

Neste caso, o maior cuidado a se ter é registrar todas as instâncias usando autenticação do Windows. Assim, garantimos que todos os usuários terão os privilégios adequados de acesso às instâncias.

O procedimento é simples: basta exportar a lista da estação de trabalho e enviar o arquivo de registros para os demais usuários para que façam a importação. A operação requer um clique com botão direito na raiz da lista (que por default se chama LOCAL SERVER GROUPS), escolhendo o grupo TASKS e a opção EXPORT, ou IMPORT no caso dos demais usuários.

004

Executando operações simultâneas

Depois de tudo organizado, podemos aproveitar esta lista para executar operações em várias instâncias ao mesmo tempo.

Para isso, podemos, inclusive, “reorganizar” temporariamente os Server Groups, conforme a conveniência. Exemplo: mover todas as instâncias de DEV para um único grupo DEV_GERAL e executar operações que devem ser aplicadas exclusivamente nestas instâncias.

Qualquer tipo de declaração SQL pode ser executada, portanto deve-se ter cuidado. Uma ação “DROP DATABASE xxx” vai rodar em todas as instâncias e realmente excluir todas as bases com o nome “xxx”.

Para iniciar a operação simultânea, basta dar um clique com botão direito sobre o Server Group desejado e escolher NEW QUERY.

005

A seguir, mostro um exemplo para fazer um inventário de todos os servidores registrados, a versão do SQL usada e a definição de “collation”. Veja que o resultado exibe uma coluna extra com o título “SERVER NAME”, que informa o apelido do servidor registrado.

006

Considerações sobre segurança

Evidente que o recurso de execução de operações simultâneas envolve um risco caso seu ambiente não tenha uma boa política de segurança de dados. No entanto, a falha na definição desta política não pode ser justificativa para se descartar um recurso que aumenta enormemente a produtividade do trabalho de toda equipe de TI (DBAs, desenvolvedores e testadores, por exemplo).

Eu mesmo costumo usar este recurso para inúmeras operações de administração, com uma produtividade que eu nunca alcançaria atuando em cada uma das instâncias do ambiente. Entre estas operações incluo:

  • Verificar modelo de recuperação de dados de cada base;
  • Identificar propriedades de cada base (filegroups, arquivos físicos etc);
  • Acrescentar datafiles em bases que tem um nível baixo de espaço disponível;
  • Fazer inventário de bases e de logins/usuários cadastrados;
  • Verificar integridade física dos bancos.

É evidente que seria desastroso que invasores tivessem acesso a este tipo de recurso. Mas eu entendo que política de segurança é um tópico a parte e que todo DBA tem obrigação de implementar no ambiente em que é responsável, tenha ele apenas uma instância ou centenas delas.

Leituras sugeridas

  1. Using Registered Servers to Manage Servers, por MICROSOFT.