Почему репликация слиянием завершается неудачно при установке таблицы LOCK_ESCALATION?

StackOverflow https://stackoverflow.com/questions/813403

Вопрос

У нас проблема с репликацией слиянием. Наш издатель использует SQL Server 2008, а два подписчика - 2005. Наш издатель пытается отправить нашим подписчикам команду ALTER TABLE Foo SET (LOCK_ESCALATION) . Мне кажется, я помню, что читал, что эта команда является новой в SQL Server 2008, и если это так, то имеет смысл, что эта команда не будет выполнена на наших серверах 2005 года. Однако наша репликация слиянием настроена на совместимость с 2005 годом.

  

Сценарий схемы 'if object_id (N' [dbo]. [Users] ') не является null exec (' ALTER TABLE [dbo]. [Users] SET (LOCK_ESCALATION = TABLE))   ')' не может быть передан подписчику.

Есть идеи, почему наш издатель будет пытаться это сделать?

Изменить . Уровень совместимости нашего сервера 2008 года установлен на "Sql Server 2005 (90)"

Это было полезно?

Решение

Это новая функция в SQL 2008, поэтому она не поддерживается в 2005 году. В зависимости от того, насколько сложна ваша установка, вы можете подумать, чтобы ваша база данных работала на совместимости 90 (SQL 2005), чтобы убедиться, что вы не добавляете функции SQL 2008 в свою базу данных. база данных. Были большие проблемы с репликацией данных схемы с тех пор, как это произошло, поэтому всегда немного сдержан. Я всегда стараюсь заставить его действовать глупо и просто управлять данными - мне приходилось поддерживать систему слияния с 32 подписчиками с репликацией слиянием и постоянно возникали большие проблемы со схемой, когда мы выдвигали изменения схемы.

Тем не менее, если он работает так, как задокументировано, он не должен пытаться отменить изменение блокировки. Убедитесь, что подписки помечены как совместимые с SQL 2005. Вероятно, они не создали автоматическую карту параметров с 2008 по 2005 год, как это было сделано для типов данных (например)

Один из разработчиков SQL в блоге о новых типах блокировки некоторое время назад

Другие советы

Это происходит потому, что несовместимость этой инструкции с sql server 2005 и, по-видимому, когда я делаю изменение схемы в реплицируемой таблице, помещает эту инструкцию в изменения схемы.

Существует два способа: удалить и снова создать подозрение, не применимо, когда оно находится на рабочем сервере. Второй способ - перейти к таблице sysmergeschemachange в базе данных и удалить строку, которая выглядит примерно так:

  

Сценарий схемы 'if   object_id (N '[dbo]. [Users]') не является   null exec ('ALTER TABLE [dbo]. [Пользователи]   SET (LOCK_ESCALATION = TABLE) ')'   не может быть распространено на   абонент.

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top