Как изменить схему подписчика? - PullRequest
1 голос
/ 18 июля 2011

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

Я надеялся, что смогу внести изменения в схему (например, изменить тип данных столбца), в то же время сохраняя хранимые процедуры репликации в актуальном состоянии для правильного преобразования любых реплицированных данных. Хотя подписчик может удерживать блокировки на обновляемых больших таблицах, он может просто поставить в очередь изменения от издателя, вместо того чтобы вызывать проблемы с блокировкой во все еще работающем приложении. Надеюсь, я объясню это достаточно хорошо ...

Вот что я попробовал:

BEGIN TRANSACTION

BEGIN TRY

UPDATE dbo.Big_Table SET some_string = REPLACE(some_string, ',', '')

ALTER TABLE dbo.Big_Table ALTER COLUMN some_string INT

DECLARE @sql VARCHAR(MAX)

SET @sql = 'create procedure [dbo].[sp_MSins_dboBig_Table]
    @c1 bigint,
    @c2 varchar(20),
    @c3 varchar(30)
as
begin
    declare @c2_new int

    set @c2_new = cast(replace(@c2, '','', '''') as int)

    insert into [dbo].[Big_Table] (
        [my_id],
        [some_string],
        [another_string]
    )
    values (
        @c1,
        @c2_new,
        @c3
    )
end    -- '

EXEC(@sql)

COMMIT TRANSACTION

END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
END CATCH

Этот конкретный сценарий изменит столбец VARCHAR, содержащий числовые данные, на INT, в то же время удалив все запятые, которые могут быть включены в число, например "1,325".

Проблема в том, что это вызывает блокировку и у издателя. Я видел ссылки на паузу репликации , но ни у одного из них нет конкретных шагов, которым нужно следовать (у меня нет большого опыта репликации). Обычно это «отключить некоторые задания».

Я также видел страницу о переключении режимов обновления , но я думаю , которая относится только к подписчикам с возможностью обновления.

Любые предложения о том, как справиться с этой ситуацией?

1 Ответ

0 голосов
/ 19 июля 2011

Как настроить репликацию, если схема издателя и подписчика не совпадает? Это действительно "интересная" установка. В общем, путаница с процедурами по умолчанию вызовет головную боль. Поскольку они поддерживаются системой, ваша новая версия может быть перезаписана в любой момент (хотя на практике этого не произойдет). Если у вас нет обновляющегося подписчика, подписчик должен рассматриваться как доступный только для чтения, чтобы не нарушить репликацию. Возможно, я чего-то упускаю.

...