Поделиться через


Пошаговое руководство. Определение области и провизионирование сервера

Для подготовки серверной базы данных для синхронизации необходимо описать область синхронизации и выполнить провизионирование серверной базы данных с использованием артефактов, связанных с областью.

При описании области синхронизации определяется объект синхронизации. Область синхронизации представляет собой ряд таблиц, которые необходимо синхронизировать как единое целое. Таблицы в области синхронизации могут уже существовать в базе данных или описываться с помощью объектной модели Sync Framework, а затем создаваться во время выполнения, когда проводится провизионирование базового хранилища. В этом пошаговом руководстве будет использоваться таблица Products, уже существующая в серверной базе данных.

Провизионирование базы данных включает в себя добавление к базе данных артефактов, связанных с областью синхронизации, таких как таблицы отслеживания, триггеры и хранимые процедуры. Эти артефакты используются процессом синхронизации во время выполнения. При необходимости базовая таблица также добавляется к базе данных, как указано в предыдущем абзаце. Подробные технические сведения о провизионировании см. в разделах Как настроить и выполнить синхронизацию базы данных (SQL Server) и Провизионирование для синхронизации (SQL Server).

В этом пошаговом руководстве будет создано приложение командной строки, которое определяет область синхронизации с именем ProductsScope, включающую таблицу Products, и используется для провизионирования базы данных SQL Server, созданной в предыдущем пошаговом руководстве, с помощью артефактов, связанных с областью синхронизации.

Определение области и провизионирование сервера с помощью артефактов, связанных с областью

  1. Запустите Visual Studio 2008: нажмите Пуск, выберите Программы, выберите Microsoft Visual Studio 2008, а затем выберите Microsoft Visual Studio 2008.

  2. На панели меню нажмите Файл, выберите пункт Создать, а затем выберите Проект.

  3. Выберите Visual C# в Типы проектов и выберите Приложение командной строки в Шаблоны.

  4. Укажите ProvisionServer в качестве имени проекта, C:\ как Расположение и SyncSQLServerAndSQLCompact как Имя решения.

  5. Нажмите кнопку ОК, чтобы закрыть диалоговое окно Создать проект.

  6. В обозревателе решений щелкните правой кнопкой мыши ProvisionServer и выберите Добавить ссылку.

  7. Выберите Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer на вкладке .NET. Это сборки, поставляемые с Microsoft Sync Framework.

  8. Нажмите кнопку ОК, чтобы закрыть диалоговое окно Добавить ссылку.

  9. Добавьте следующие инструкции using в начало файла Program.cs после имеющихся инструкций using. Эти пространства имен содержат классы, которые будут использоваться в коде для этого приложения командной строки.

    using System.Data;
    using System.Data.SqlClient;
    
    using Microsoft.Synchronization;
    using Microsoft.Synchronization.Data;
    using Microsoft.Synchronization.Data.SqlServer;
    
  10. Добавьте следующую инструкцию к методу Main, чтобы создать соединение с серверной базой данных SyncDB.

    SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
    
    Важное примечаниеВажно!

    Если не используется экземпляр по умолчанию, в указанной выше инструкции замените имя сервера именем экземпляра используемого сервера. Например, если используемый экземпляр SQL Server имеет имя MYSQLINSTANCE, замените (local) на .\MYSQLINSTANCE.

  11. Добавьте следующий код к методу Main, чтобы определить область синхронизации. С помощью этого кода будет создана область синхронизации ProductsScope, возвращено описание таблицы Products в базе данных SyncDB и добавлено описание к ProductsScope. Общие этапы определения области синхронизации таковы:

    1. Создайте экземпляр класса DbSyncScopeDescription. Класс DbSyncScopeDescription используется для указания имени области синхронизации и списка таблиц для синхронизации. Таблицы задаются с помощью класса DbSyncTableDescription.

    2. Создайте экземпляр класса DbSyncTableDescription на основе схемы таблицы Products, вызванной из серверной базы данных SyncDB. Класс DbSyncTableDescription используется для указания имени таблицы, столбцов таблицы для синхронизации, типов данных таблицы и других сведений, необходимых для выполнения синхронизации. Эти сведения могут быть указаны явным образом или получены путем запроса базы данных с помощью метода GetDescriptionForTable(String, SqlConnection).

      В данном пошаговом руководстве будет использоваться метод GetDescriptionForTable(String, SqlConnection) класса SqlSyncDescriptionBuilder для получения описания таблицы.

    3. Добавьте объект DbSyncTableDescription к коллекции Tables объекта DbSyncScopeDescription с помощью метода 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. Добавьте следующий код к методу Main для провизионирования серверной базы данных SyncDB с использованием артефактов, связанных с синхронизацией. Код создаст объект SqlSyncScopeProvisioning, пропустит создание таблицы Products на сервере, поскольку она уже существует, и выполнит провизионирование базы данных SyncDB с помощью артефактов, связанных с областью. Общие этапы провизионирования серверной базы данных с использованием артефактов, связанных с областью синхронизации, таковы:

    1. Создайте экземпляр класса SqlSyncScopeProvisioning на основе объекта DbSyncScopeDescription и соединения с серверной базой данных. Класс SqlSyncScopeProvisioning представляет провизионирование базы данных SQL Server для конкретной области, представленной объектом DbSyncScopeDescription.

    2. Вызовите метод SetCreateTableDefault(DbSyncCreationOption), указав значение DbSyncCreationOption как Skip, поскольку таблица Products уже существует в серверной базе данных. Метод SetCreateTableDefault(DbSyncCreationOption) используется для указания того, следует ли создавать базовые таблицы при настройке областей.

    3. Вызовите метод Apply()()()() на объекте SqlSyncScopeProvisioning, чтобы начать процесс провизионирования, в ходе которого создается инфраструктура отслеживания изменений в серверной базе данных.

    // 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. В обозревателе решений щелкните правой кнопкой мыши ProvisionServer и выберите команду Построить.

  14. Нажмите клавиши Ctrl+F5, чтобы выполнить программу.

  15. Нажмите ВВОД, чтобы закрыть окно командной строки.

  16. В среде SQL Server Management Studio разверните узел SyncDB, разверните Таблицы, после чего должны отобразиться следующие дополнительные таблицы, созданные в процессе провизионирования: Products_Tracking, schema_info, scope_config и scope_info. Также в процессе провизионирования создаются и другие объекты баз данных, такие как триггеры и хранимые процедуры.

  17. Не закрывайте Visual Studio и SQL Server Management.

Полный пример кода

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)
        {
            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();
        }
    }
}

См. также

Другие ресурсы

Как настроить и выполнить синхронизацию базы данных (SQL Server)

Провизионирование для синхронизации (SQL Server)