Репликация SQL Server 2008 в SQL Express 2005 через веб-синхронизацию - PullRequest
0 голосов
/ 26 ноября 2010

У меня есть сервер SQL 2008 R2. Я создал публикацию с помощью мастера, которая вроде бы прошла нормально. В разделе «системные базы данных» есть база данных «дистрибуция», в которой не так много информации. (Не уверен, что это уже было или «Мастер публикаций» его создал.) Я настроил веб-синхронизацию и имею доступ к relisapi.dll через IIS7 и самозаверяющий сертификат.

Моя программа установки для моего веб-сайта ASP.NET устанавливает SQL Express 2005. Я написал небольшой сайт для проверки создания подписки и начальной синхронизации. Я не "создаю исходную" базу данных, так как я предполагаю, что первая синхронизация будет сбрасывать все с сервера.

Кажется, что работает следующий фрагмент кода, потому что подписка создается в SQL Express и на сервере SQL 2008.

' Define the pull subscription.
            subscription = New MergePullSubscription()
            subscription.ConnectionContext = subscriberConn
            subscription.PublisherName = publisherName
            subscription.PublicationName = publicationName
            subscription.PublicationDBName = publicationDbName
            subscription.DatabaseName = subscriptionDbName
            subscription.HostName = hostname
            subscription.CreateSyncAgentByDefault = True

            ' Specify the Windows login credentials for the Merge Agent job.
            subscription.SynchronizationAgentProcessSecurity.Login = winLogin
            subscription.SynchronizationAgentProcessSecurity.Password = winPassword

            ' Enable Web synchronization.
            subscription.UseWebSynchronization = True
            subscription.InternetUrl = webSyncUrl

            ' Specify the same Windows credentials to use when connecting to the
            ' Web server using HTTPS Basic Authentication.
            subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication
            subscription.InternetLogin = winLogin
            subscription.InternetPassword = winPassword

            If Not subscription.LoadProperties() Then
                ' Create the pull subscription at the Subscriber.
                subscription.Create()

Затем я запускаю этот бит кода:

        If Not subscription.PublisherSecurity Is Nothing Or _
               subscription.DistributorSecurity Is Nothing Then

                '0: Only error messages are logged.
                '1: All progress report messages are logged.
                '2: All progress report messages and error messages are logged.
                subscription.SynchronizationAgent.OutputVerboseLevel = 2
                subscription.SynchronizationAgent.Output = "c:\createmerge.txt"

                ' Synchronously start the Merge Agent for the subscription.
                subscription.SynchronizationAgent.Synchronize()

но синхронизация выдает ошибку:

Не удалось подтвердить подписку на публикацию «Моя публикация». Убедитесь, что все параметры командной строки агента слияния заданы правильно и что подписка настроена правильно. Если у издателя больше нет информации об этой подписке, удалите и заново создайте подписку.

На сервере с помощью «Монитора репликации» моя подписка отображается как «Унифицированная».

Я думаю, что одна проблема заключается в том, что моя подписка неверна. Примеры Microsoft на MSDN говорят

"adventure-works\garrett1"

но неясно, является ли adventure-works сервером, экземпляром или базой данных и кто такой garrett1 (логин или что-то еще). Так что же это на самом деле должно быть?

Поскольку я ничего не знаю о репликации, и я просто слежу за MSDN и некоторыми книгами, я бы оценил некоторые указания относительно того, куда идти дальше.

Извините, что так долго!

Ответы [ 3 ]

1 голос
/ 26 ноября 2010

Исходя из документации , настройка Subscription.Hostname не критична для работы публикации - это значение, которое подписчик предоставляет для HOST_NAME, когда публикация слиянием разделена. См. здесь для получения дополнительной информации о фильтрованных публикациях.

Если вы уверены, что правильно настроили свою среду для поддержки веб-синхронизации, вам придется отлаживать этот фрагмент по одному за раз.

Возможно, стоит начать с настройки не-веб-подписки для другой базы данных на издателе, чтобы доказать, что публикация работает так, как ожидалось. Предполагая, что это работает, попробуйте настроить не веб-подписку на экземпляре SQL 2005 Express, а затем перейдите к тестированию веб-синхронизации.

0 голосов
/ 22 декабря 2010

Хорошо, вот еще немного информации о HOST_NAME (), если вам интересно.

http://msdn.microsoft.com/en-us/library/ms152478%28v=SQL.110%29.aspx

В основном вы используете его для передачи переменной издателю со значением вашеговыбор (который перегружает функцию HOST_NAME на сервере).Это позволяет вам фильтровать строки, такие как Employee.ID = CONVERT (HOST_NAME () как int), чтобы получать только те строки, которые вам нужны в подписке.

0 голосов
/ 02 декабря 2010

Хорошо, у меня были две причины, по которым у меня были проблемы.

Во-первых, на моем компьютере для разработки в какой-то момент машина была переименована, поэтому подключение к моему локальному подписчику SQL было неправильным.

Во-вторых, «самозаверяющий сертификат» в IIS7 преобразовывался во внутреннее имя, а не в реальное имя, которое можно было видеть через HTTPS из внешнего мира. Мы получили тестовый сертификат для правильного домена, и он работал нормально!

...