SQL Server 2008 Express невозможно использовать для репликации слиянием?
Согласно Microsoft, SQL Server 2008 Express должен иметь возможность участвовать в репликации слиянием в качестве подписчика pull. По крайней мере, с РМО-объектами.
http://msdn.microsoft.com/en-us/library/ms147890.aspx
http://msdn.microsoft.com/en-us/library/ms151819.aspx
Но должны быть также возможны и другие варианты.
Однако мы не можем запустить агент SQL Server на клиентах (под управлением SQL Server 2008 Курьерский). Похоже, это общая проблема, и, насколько я могу судить, она не решена.
Прав ли я, полагая, что слияние (вытягивание) подписок в действительности не поддерживается SQL Server 2008 Express? Кто-нибудь успешно использовал эту технологию? Я думаю, что это довольно серьезно, что Microsoft утверждает, что это работает нормально, хотя это совсем не так.
Я надеюсь, что у кого-то есть опыт в этом!
4 ответов:
Мне удалось синхронизировать подписку Merge pull на 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 .
Как уже упоминалось в разделевопросы репликации (SQL Server Express) , SQL Server Express может служить подписчиком во всех типах репликации.
Что еще более важно, SQL Server Express не включает агент SQL Server. Это означает, что необходимо использовать принудительные подписки, чтобы агенты репликации запускались от распространителя, или использовать принудительные подписки, если они синхронизированы с помощью Диспетчера синхронизации Windows, RMO или пакетных сценариев.
Центр синхронизации Windows WIN7:
Предполагая, что эта репликация должна выполняться на "бюджетном сервере" (например, клиентской ОС, такой как Win7) для одного удаленного филиала-тогда это будет работать довольно хорошо. Он имеет хороший графический интерфейс, дает удар за ударом messagebox во время синхронизации и может сделать некоторые расширенные планирования.
Предостережения:
Работает с: аутентификацией Windows Не с помощью: аутентификация SQL
Работает с: одним зарегистрированным пользователем, который остается вход в систему в любое время, при условии, что:
- имя пользователя и пароль этого пользователя имеют те же учетные данные, что и replisapi.страница dll WEBSYNC
- они являются такими же, как аутентифицированный пользователь windows, имеющий доступ к удаленной базе данных
- они могут получить доступ к репликации для других разрешений (базовый пункт 1 и 2 выше)
- Центр синхронизации работает самостоятельно внутренний планировщик
NB - это обманчиво, как и было похоже, что он поддерживает аутентификацию SQL, на самом деле это не так; он будет работать, если вы введете пароли вручную, но только один раз и каждый раз после этого, когда вы вводите пароль. Таким образом, он не может использовать аутентификацию sql в практическом смысле.
Причина этого в том, что он не может сохранить пароль. Microsoft сделала это специально, и до сих пор нет обходного пути.
Другой вариант-выполнить агент слияния (replmerg.exe) для синхронизации Экспресс-подписки с помощью пакетного сценария. Это описано в разделе Как синхронизировать подписку по запросу (Программирование репликации). Отсюда пакетный сценарий может быть запущен через планировщик задач по заданному расписанию.
Наконец, диспетчер синхронизации Windows можно использовать для синхронизации подписки на экспресс-запрос слияния: Как синхронизировать подписку с помощью синхронизации Windows Диспетчер (Диспетчер Синхронизации Windows)
Comments