2009-05-01 1 views
3

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

Схема сценария 'если object_id (N' [DBO]. [Пользователи] ') не равно нулю Exec (' ALTER TABLE [DBO]. [Пользователи] SET (LOCK_ESCALATION = TABLE) ')' может не распространяются на абонента.

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

Edit: Наших 2008 уровень совместимости сервера установлен в «Sql Server 2005 (90)»

+1

Подтвержденная ошибка в SQL Server 2008. Вероятно, она не будет исправлена ​​до SQL Server 2011. (https://connect.microsoft.com/SQLServer/feedback/details/536571) – hangy

ответ

5

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

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

Один из SQL Девых ребят blogged на новых типах запирающих некоторое время назад

+1

Спасибо за подтверждение моих подозрений и напоминание об этом совместимость. К сожалению, наш уровень совместимости * * установлен на 90. –

+0

обновлен для комментариев; вероятно, это ошибка в репликации 2008 года. его не задокументировано в статье msdn http://msdn.microsoft.com/en-us/library/ms143241.aspx – u07ch

4

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

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

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

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

+0

Даже если это немного страшно для строк 'DELETE' из этой таблицы, я попробовал - и это сработало для меня. – hangy

 Смежные вопросы

  • Нет связанных вопросов^_^