Ошибка транзакции при добавлении столбца в реплицированную таблицу - PullRequest
0 голосов
/ 12 декабря 2011

В моем программном обеспечении у меня есть процесс, который запускает обновления базы данных, которые мне нужно применить для обновления до нашей последней версии.В моем последнем сценарии я хочу добавить столбец в таблицу, в которой есть публикация для настройки репликации.Когда я создаю свой скрипт alter для добавления столбцов, я получаю сообщение о следующем:

You can only specify the READPAST lock in the READ COMMITTED or REPEATABLE READ isolation levels.

Есть идеи, как проще всего обойти эту проблему?Должен ли я написать сценарий удаления публикации, а затем повторно добавить его!?

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011

У нас была эта проблема на этой неделе при использовании сценариев, сгенерированных SQL Compare, для синхронизации наших производственных сред и сред разработки.Проблема вызвана тем, что скрипт из SQL Compare (или что вы используете) запускает транзакцию с более высоким уровнем изоляции, чем READ COMMITTED или REPEATABLE READ.

Когда вы запускаете часть скрипта, у вас есть ALTER TABLE для добавления столбца, который инициирует вызов кода репликации SQL, который распространяет команду ALTER TABLE среди подписчиков.Этот код не может выполняться внутри более крупной транзакции с более высоким уровнем изоляции.

Решением, которое мы использовали, было создание сценария репликации.Удалите репликацию на этой таблице.Примените сценарий синхронизации.Затем воссоздайте репликацию.

Альтернативой может быть редактирование сценария синхронизации для изменения уровня изоляции транзакции или ее полного удаления.Это было не то, что мы хотели сделать, поэтому мы пошли с ранее упомянутым решением.

1 голос
/ 13 декабря 2011

Чтобы добавить новый столбец в таблицу и включить его в существующую публикацию, вам нужно использовать синтаксис ALTER TABLE

...