SQL Server 2008 Express невозможно использовать для репликации слиянием? - PullRequest
2 голосов
/ 07 марта 2012

По мнению Microsoft, SQL Server 2008 Express должен иметь возможность участвовать в репликации слиянием в качестве подписчика по запросу. По крайней мере, с объектами RMO.

Но можно использовать и другие варианты.

Однако мы не можем запустить агент SQL Server на клиентах (работает SQL Server 2008 Express). Кажется, это общая проблема, и, насколько я могу судить, нерешенная.

Правильно ли я считаю, что слияние (вытягивание) подписок в действительности не поддерживается SQL Server 2008 Express? Кто-нибудь успешно использовал эту технологию? Я думаю, это довольно серьезно, что Microsoft заявляет, что это работает нормально, хотя это совсем не так.

Я надеюсь, что у кого-то есть опыт с этим!

Ответы [ 4 ]

3 голосов
/ 10 марта 2012

Мне удалось синхронизировать подписку по запросу Merge в SQL Server 2008 R2 Express - без агента SQL Server - через RMO со следующим битом C #:

static void SynchronizeMergePullSubscriptionViaRMO()
{
        // Define the server, publication, and database names.
        string subscriberName = "WIN8CP\\SQLEXPRESS";
        string publisherName = "WS2008R2_1";
        string distributorName = "WS2008R2_1";
        string publicationName = "TestMergePub2";
        string subscriptionDbName = "TestSubDB1";
        string publicationDbName = "AdventureWorksLT";

        // Create a connection to the Subscriber.
        ServerConnection conn = new ServerConnection(subscriberName);

        MergePullSubscription subscription;
        MergeSynchronizationAgent agent;

        try
        {
            // Connect to the Subscriber.
            conn.Connect();

            // Define the pull subscription.
            subscription = new MergePullSubscription();
            subscription.ConnectionContext = conn;
            subscription.DatabaseName = subscriptionDbName;
            subscription.PublisherName = publisherName;
            subscription.PublicationDBName = publicationDbName;
            subscription.PublicationName = publicationName;

            // If the pull subscription exists, then start the synchronization.
            if (subscription.LoadProperties())
            {
                // Get the agent for the subscription.
                agent = subscription.SynchronizationAgent;

                // Set the required properties that could not be returned
                // from the MSsubscription_properties table.
                agent.PublisherSecurityMode = SecurityMode.Integrated;
                agent.DistributorSecurityMode = SecurityMode.Integrated;
                agent.Distributor = publisherName;

                // Enable agent output to the console.
                agent.OutputVerboseLevel = 4;
                agent.Output = "C:\\TEMP\\mergeagent.log";

                // Synchronously start the Merge Agent for the subscription.
                agent.Synchronize();
            }
            else
            {
                // Do something here if the pull subscription does not exist.
                throw new ApplicationException(String.Format(
                    "A subscription to '{0}' does not exist on {1}",
                    publicationName, subscriberName));
            }
        }
        catch (Exception ex)
        {
            // Implement appropriate error handling here.
            throw new ApplicationException("The subscription could not be " +
                "synchronized. Verify that the subscription has " +
                "been defined correctly.", ex);
        }
        finally
        {
            conn.Disconnect();
        }
}

Пример кода можно загрузить из MSDN Code Gallery .

1 голос
/ 22 сентября 2012

Центр синхронизации Windows WIN7:

Если предположить, что эта репликация будет выполняться на «бюджетном сервере» (например, на клиентской ОС, такой как Win7) для удаленного филиала с одним человеком - тогда это будет работать достаточно хорошо. Он имеет приятный графический интерфейс, выдает окно сообщения «удар за ударом» во время синхронизации и может выполнять некоторые расширенные функции планирования.

ПРЕДОСТЕРЕЖЕНИЯ:

РАБОТАЕТ С: Проверка подлинности Windows НЕ С: SQL-аутентификация

РАБОТАЕТ: один пользователь, вошедший в данный момент, который остается в системе постоянно, при условии, что:

  1. Имя пользователя и пароль этого пользователя имеют те же учетные данные, что и на странице replisapi.dll WEBSYNC
  2. Они такие же, как и пользователь Windows, прошедший проверку подлинности, имеющий доступ к удаленной базе данных
  3. Они могут получить доступ к репликации для других разрешений (основные пункты 1 и 2 выше)
  4. Центр синхронизации работает самостоятельно Внутренний планировщик

NB - это обманчиво, поскольку сделано так, чтобы выглядеть так, как будто оно поддерживает аутентификацию SQL, но на самом деле это не так; это будет работать, если вы вводите пароли вручную, но только один раз и каждый раз после этого при вводе пароля. Таким образом, НЕ МОЖЕТ использовать sql аутентификацию, в практическом смысле.

Причина в том, что он не может сохранить пароль. Microsoft сделала это специально, и пока нет обходного пути.

1 голос
/ 07 марта 2012

Как упомянуто в Замечания по репликации (SQL Server Express) , SQL Server Express может выступать в качестве подписчика во всех типах репликации.

Что более важно, SQL Server Express не включает агент SQL Server. Это означает, что необходимо использовать принудительные подписки, чтобы агенты репликации запускались от распространителя, или можно использовать извлекаемые подписки, если они синхронизируются с помощью диспетчера синхронизации Windows, RMO или пакетных сценариев.

0 голосов
/ 10 марта 2012

Другой вариант - запустить агент слияния (replmerg.exe) для синхронизации подписки Express с помощью пакетного сценария. Это описано в Как: синхронизировать подписку по запросу (программирование репликации) . Отсюда пакетный скрипт может быть запущен через планировщик заданий по заданному расписанию.

Наконец, диспетчер синхронизации Windows может использоваться для синхронизации подписки по запросу Express Merge: Как: синхронизировать подписку с помощью диспетчера синхронизации Windows (Диспетчер синхронизации Windows)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...