O Sistema de Gerenciador de Banco de Dados Distribuídos (SGBDD) nos permite gerenciar um grande volume de informações geradas nos dias atuais através da combinação das redes e tecnologias de banco de dados.

Para a implantação de um sistema de banco de dados distribuídos se faz necessário o preenchimento de alguns requisitos como: garantir desempenho, escalabilidade e confiabilidade nos processos de fragmentação e de replicação.

Fragmentos são a unidades (linhas/colunas) extraídas de um processo de distribuição e o fator mais significativo para o desempenho de um DDBMS.

Este artigo demonstra a técnica de reconstrução de fragmentos verticais usando o Microsoft SQLServer.

As seguintes tarefas serão necessárias para o desenvolvimento deste trabalho:

  1. Instalação de duas instâncias do SQL Server uma local outra remota.
  2. Criação dos fragmentos (Banco de Dados, relacionamento entre tabelas para reconstrução).
  3. Configurar os servidores para funcionar remotamente.
  4. Criar usuários de Banco de Dados com privilégio apropriado para obter o acesso remoto.
  5. Adicionar servidores “linkados”.
  6. Executar as Queries para reconstruir e processar a requisição do usuário.

Instalação de duas instâncias do SQL Server.

Foram instaladas duas instâncias do SQL Server 2008 R2 em uma mesma máquina, simulando um banco local e outro remoto. O nome das instâncias são CLEBERSON-PC (Figura 1) e CLEBERSON-PC\SharePoint (Figura 2), instâncias local e remota, respectivamente.

Figura 1 – Instância Local

Figura 2 – Instância Remota

Criação dos fragmentos

Três fragmentos de uma tabela com informações sobre produtos foram inseridas em dois servidores. No servidor local está localizado o 1º Fragmento (Figura 1) enquanto que em outro servidor (remoto) estão os fragmentos 2 e 3 (Figura 2).

O banco criado na instância CLEBERSON-PC recebeu o nome de Local_DB enquanto que a instância CLEBERSON-PC\SharePoint recebeu o nome de Remote_DB. A Figura 3 exibe como ficou a divisão de atributos dos fragmentos. Nas Figuras 4 a 9 você confere a descrição dos dados e suas visualização.

Figura 3 – Distribuição dos Dados Fragmentados

Figura 4 - Descrição dos tipos de dados do fragmento 1

Figura 5 - Dados inseridos no Fragmento 1.

Figura 6 - Descrição dos tipos de dados do fragmento 2.

Figura 7 - Dados inseridos no Fragmento 2.

Figura 8 - Descrição dos tipos de dados do fragmento 3

Figura 9 - Dados inseridos no Fragmento 3.

Configurando os servidores para funcionar remotamente.

Configurar um servidor para trabalhar remotamente inclui as seguintes tarefas a seguir.

Abrir o SQL Server Management Studio e logar usando a Autenticação do Windows (Windows Authentication) (Figura 10).

Habilitar o SQL Server authentication juntamente com a autenticação do Windows.

Figura 10 – Login usando a autenticação do Windows

Em Object Explorer (Figura 11), com o botão direito clique sobre a instância remota (CLEBERSON-PC\SharePoint), e depois em propriedades.

Figura 11 – Habilitar o SQL Server Authentication

Na janela que se abrirá clique em Security, em Server authentication selecione "SQL Server and Windows Authentication mode" e clique em Ok (Figura 12).

Figura 12 - Habilitando o SQL Server Authentication

Habilitando Protocolos e SQL Server Bowser

Abra o SQL Server Configuration Manager, expanda o SQL Server Network Configuration, e clique em Protocols for MSSQLSERVER (ou outra instância).

Habilite todos os protocolos da lista a direita, conforme a Figura 13.

Figura 13 - Habilitando protocolos de rede

Após a etapa anterior, expanda SQL Native Client XX.X Configuration, e clique em Client Protocols. Habilite todos os protocolos da lista a direita, conforme a Figura 14.

Figura 14 - Habilitando protocolos de cliente

Clique em SQL Server Services, dê um duplo clique em SQL Server Browser (Figura 15), na próxima janela clique na aba Service, selecione a opção Start ModeAutomatic, clique em Aply, e depois em Ok (Figura 16).

Figura 15 - Opções do Server Browser

Figura 16 - Start Mode em modo automático

Criando um usuário com permissão para acesso remoto.

Passo 1- Criando um usuário.

Faça o Login usando a instância local SQL Server (CLEBERSON-PC) e utilizando a autenticação do windows.

Na janela Object Explorer, abra a pasta Security, clique com o botão direito sobre a pasta Logins e depois em New Login (Figura 17).

Figura 17 - Criando um Usuário

Na janela New Login, no campo Login Name atribua um nome (neste artigo, cleberson_pc), selecione a opção SQL Server authentication. Insira uma senha e a confirme.

A senha deverá ter letras e números. Desmarque a opção Enforce password expiration e User must change password at next login. Então mude Default database para local_db (Figura 18).

Figura 18 - Criando um Usuário

O próximo passo será fazer o mapeamento para o usuário criado, na janela do lado esquerdo clique em User Mapping. EmUsers mapped to this login:,selecione a caixa de texto para atribuir o banco Local_DB ao usuário criado em passos anteriores. Após isso no campo Database role membership for:, selecione db_owner e clique em Ok (Figura 19).

Figura 19 - Criando um Usuário

O novo usuário deverá ser adicionado ao banco de dados. Para checar, vá à janela Object Explorer, selecione o banco de dados Local_DB, abra a pasta Security e depois abra a pasta Users, veja se o usuário recém criado aparece na lista de usuários para o banco de dados (Figura 20).

Figura 20 - Visualizando um Usuário

Agora devemos verificar algumas propriedades que devem ser atribuídas ao usuário "db_owner". Para isso dê duplo clique sobre o usuário (neste exemplo, cleberson_pc), e na janela que se abrirá verifique se db_owner está selecionado em ambos os campos, Schemes owned by this usereDatabase role membership. Feito isso clique em OK (Figura 21).

Figura 21 - Verificando um Usuário

Passo 2 – Atribuição do privilégio dos ysadmin.

Abra a pasta Security do servidor, ao expandir a pasta Server Roles, encontre sysadmin, em seguida, com o botão direito clique sobre ele e depois em Properties (Figura 22).

Figura 22 - Editando regras do servidor

A janela Server Role Properties – sysadmin aparecerá. Nesta janela, clique no botão Add, e na janela Select Loginsclique em Browse (Figura 23), selecione o usuário cleberson_pc para adicioná-lo e depois clique em Ok em todas as janelas que seguirem (Figura 24).

Figura 23 - Procurando usuário

Figura 24 - Selecionando um usuário

Siga os passos 1 e 2 para o outro servidor (CLEBERSON-PC\SHAREPOINT).

Adicionando um Linked Server

Como definido anteriormente, o servidor CLEBERSON-PC é local e o servidorCLEBERSON-PC\SHAREPOINT será acessado do servidor CLEBERSON-PC. Sendo assim, CLEBERSON-PC\SHAREPOINT precisa ser adicionado localmente.

Abra a pasta Server Object localizada abaixo do servidor local, com o botão direito clique sobre a pasta Linked Servers, em seguida clique em New Linked Server...(Figura 25) e a janela New Linked Server aparecerá.

Figura 25 - Adicionando um Linked Server

No campo Linked Server, insira o nome da instância (servidor) remoto, CLEBERSON-PC\SHAREPOINT. Selecione a opção SQL Server em Server Type (Figura 26).

Figura 26 - Adicionando um novo linked server.

Na lista localizada a esquerda, clique em Security,e nas opções abaixo selecioneBe made using this security contexte entre com o Login e Senha (criado na instância SQL CLEBERSON-PC\SHAREPOINT) respectivamente nos campos Remote logineWith password, clique em Ok (Figura 27).

Figura 27 - Novo Linked Server

Queries para reconstruir e processar a requisição do usuário.

O script abaixo usa o comando LEFT JOIN para unir as tabelas fragmentadas verticalmente onde o Fragmento_1 está localizado no servidor local e o Fragmento_2 está em um servidor remoto (Listagem 1).

A função UNION é a responsável por unificar as tabelas fragmentadas verticalmente (Fragmento_1 e Fragmento_2) e o Fragmento_3 funcionando como uma fragmentação horizontal. O resultado você confere na Figura 28.

Listagem 1 – União de Tabelas utilizando left join

SELECT FRAGMENTO_1.PRODUTO_ID ,NOME, CATEGORIA,SUB_CATEGORIA,FABRICANTE,--Dados do servidor local
  FRAGMENTO_2.PRECO, ORIGEM, COR, TAMANHO 
   --Dados do servidor remoto
  FROM
  (
      [CLEBERSON-PC\Sharepoint].Remote_DB.dbo.FRAGMENTO_2 
       -- Servidor remoto
      LEFT JOIN Local_DB.dbo.FRAGMENTO_1 -- Servidor Local
      ON FRAGMENTO_2.PRODUTO_ID = FRAGMENTO_1.PRODUTO_ID
      --Verifica se o ID dos produtos são iguais
  )
   
  UNION
  SELECT * FROM [CLEBERSON-PC\SharepoinT].Remote_DB.dbo.FRAGMENTO_3
  -- Exibe os dados do fragmento 3 no servidor remoto
  <p align="left">GO 

Figura 28 - Exibição dos Fragmentos

A técnica exibida neste artigo é um exemplo básico de reconstrução. Na prática, muitas aplicações podem acessar muitas Views que foram criadas de várias tabelas, muitas vezes de diferentes fontes e em alguns casos rodando outros SGBDs como Postgree, Oracle, MySQL e Microsoft SQL Server. Mas o conceito básico é o mesmo para todos os casos.