Partilhar via


Passo a passo: definindo um escopo e provisionando um banco de dados servidor

Para preparar o banco de dados de servidor para sincronização, você precisará descrever um escopo de sincronização e provisionar o banco de dados servidor com artefatos relacionados ao escopo.

Ao descrever um escopo de sincronização, você define o que deseja sincronizar. Um escopo de sincronização é um conjunto de tabelas que devem ser sincronizadas como uma única unidade. As tabelas talvez já existam no banco de dados, ou elas podem ser descritas usando o modelo de objeto do Sync Framework e depois serem geradas em tempo de execução quando o repositório subjacente é provisionado. Neste passo a passo, você usará a tabela Products que já existe no banco de dados servidor.

O provisionamento de um banco de dados envolve a adição de artefatos relacionados ao escopo de sincronização, como tabelas de rastreamento, gatilhos e procedimentos armazenados, ao banco de dados. Esses artefatos são usados pelo processo de sincronização em tempo de execução. Opcionalmente, a tabela base também é adicionada ao banco de dados conforme especificado no parágrafo anterior. Para obter mais detalhes técnicos sobre o provisionamento, consulte Como configurar e executar a sincronização de bancos de dados (SQL Server) e Provisionamento para sincronização (SQL Server).

Neste passo a passo, você criará um aplicativo de console que define um escopo de sincronização denominado ProductsScope, que inclui a tabela Products, e provisiona o banco de dados do SQL Server criado no passo a passo anterior com artefatos relacionados ao escopo de sincronização.

Para definir um escopo e provisionar um servidor com artefatos relacionados a escopo

  1. Inicie o Visual Studio 2008: clique em Iniciar, aponte para Programa, aponte para Microsoft Visual Studio 2008 e clique em Microsoft Visual Studio 2008.

  2. Clique em Arquivo na barra de menus, aponte para Novo e clique em Projeto.

  3. Selecione Visual C# em Tipos de Projeto e selecione Aplicativo do Console em Modelos.

  4. Digite ProvisionServer para o nome do projeto, C:\ para Local e SyncSQLServerAndSQLExpress para Nome da Solução.

  5. Clique em OK para fechar a caixa de diálogo Novo Projeto.

  6. Na janela Gerenciador de Soluções, clique com o botão direito do mouse em ProvisionServer e clique em Adicionar Referência.

  7. Selecione Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer na guia .NET. Estes são os assemblies enviados com o Microsoft Sync Framework.

  8. Clique em OK para fechar a caixa de diálogo Adicionar Referência.

  9. Adicione as instruções using a seguir ao início do arquivo Program.cs após as instruções using existentes. Esses namespaces contêm as classes que você usará no código deste aplicativo de console.

    using System.Data;
    using System.Data.SqlClient;
    
    using Microsoft.Synchronization;
    using Microsoft.Synchronization.Data;
    using Microsoft.Synchronization.Data.SqlServer;
    
  10. Adicione a instrução a seguir ao método Main para criar uma conexão com o banco de dados servidor SyncDB.

    // connect to server database
    SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
    

    Importante

    Na instrução anterior, substitua o nome do servidor pelo nome da instância do seu servidor, caso não esteja usando a instância padrão. Por exemplo: se o nome de sua instância do SQL Server for MYSQLINSTANCE, substitua (local) por .\MYSQLINSTANCE.

  11. Adicione as linhas de código a seguir ao método Main para definir um escopo de sincronização com base na tabela Products do banco de dados SyncDB. Esse código cria o escopo de sincronização ProductsScope, obtém a descrição da tabela Products no banco de dados SyncDB e adiciona a descrição a ProductsScope. Etapas de alto nível para definir um escopo de sincronização:

    1. Crie uma instância da classe DbSyncScopeDescription. A classe DbSyncScopeDescription é usada para especificar o nome do escopo de sincronização e a lista de tabelas a serem sincronizadas. As tabelas são especificadas com a classe DbSyncTableDescription.

    2. Crie uma instância da classe DbSyncTableDescription com base no esquema da tabela Products recuperada do banco de dados servidor SyncDB. A classe DbSyncTableDescription é usada para especificar o nome da tabela, colunas da tabela a serem sincronizadas, tipos de dados da tabela e outras informações necessárias para a sincronização. Essas informações podem ser especificadas explicitamente ou podem ser obtidas através da consulta ao banco de dados usando o método GetDescriptionForTable(String, SqlConnection).

      Neste passo a passo, você usará o método GetDescriptionForTable(String, SqlConnection) da classe SqlSyncDescriptionBuilder para recuperar a descrição da tabela.

    3. Adicione o objeto DbSyncTableDescription à coleção Tables do objeto DbSyncScopeDescription usando o método Add.

    // define a new scope named ProductsScope
    DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("ProductsScope");
    
    // get the description of the Products table from SyncDB dtabase
    DbSyncTableDescription tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Products", serverConn);
    
    // add the table description to the sync scope definition
    scopeDesc.Tables.Add(tableDesc);
    
  12. Adicione as linhas de código a seguir ao método Main para provisionar o SQL Server com artefatos relacionados à sincronização. Este código cria um objeto SqlSyncScopeProvisioning, ignora a criação da tabela Products no servidor pois ela já existe e provisiona o banco de dados SyncDB com artefatos relacionados a escopo. Etapas de alto nível para provisionar o banco de dados servidor com artefatos relacionados ao escopo de sincronização:

    1. Crie uma instância da classe SqlSyncScopeProvisioning com base no objeto DbSyncScopeDescription e uma conexão com o banco de dados servidor. A classe SqlSyncScopeProvisioning representa o provisionamento de um banco de dados SQL Server para um escopo específico que é representado por um objeto DbSyncScopeDescription.

    2. Invoque o método SetCreateTableDefault(DbSyncCreationOption) especificando o valor DbSyncCreationOption como Skip porque a tabela Products já existe no banco de dados servidor. O método SetCreateTableDefault(DbSyncCreationOption) é usado para especificar se tabelas base devem ser criadas quando um escopo é configurado.

    3. Invoque o método Apply()()()() no objeto SqlSyncScopeProvisioning para iniciar o processo de provisionamento, que cria a infraestrutura de controle de alterações no banco de dados servidor.

    // create a server scope provisioning object based on the ProductScope
    SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc);
    
    // skipping the creation of table since table already exists on server
    serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);
    
    // start the provisioning process
    serverProvision.Apply();
    
  13. No Gerenciador de Soluções, clique com o botão direito do mouse em ProvisionServer e clique em Compilar.

  14. Pressione Ctrl+F5 para executar o programa.

  15. Pressione ENTER para fechar a janela do prompt de comando.

  16. No SQL Server Management Studio, expanda o nó SyncDB e Tables. Deverão aparecer as seguintes tabelas adicionais criadas pelo processo de provisionamento: Products_Tracking, schema_info, scope_config e scope_info. Há outros objetos de banco de dados, como gatilhos e procedimentos armazenados, criados pelo processo de provisionamento.

  17. Mantenha o Visual Studio e o SQL Server Management abertos.

Exemplo de código completo

using System;
using System.Data;
using System.Data.SqlClient;

using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServer;

namespace ProvisionServer
{
    class Program
    {
        static void Main(string[] args)
        {
            // create connection to the server database
            SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");

            // define a new scope named ProductsScope
            DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("ProductsScope");

            // get the description of the Products table from SyncDB dtabase
            DbSyncTableDescription tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Products", serverConn);

            // add the table description to the sync scope definition
            scopeDesc.Tables.Add(tableDesc);

            // create a server scope provisioning object based on the ProductScope
            SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc);

            // skipping the creation of table since table already exists on server
            serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);

            // start the provisioning process
            serverProvision.Apply();
        }
    }
}

Consulte também

Outros recursos

Como configurar e executar a sincronização de bancos de dados (SQL Server)

Provisionamento para sincronização (SQL Server)