Хорошо ли использовать транзакцию для связи со связанным сервером? - PullRequest
1 голос
/ 13 мая 2011

У меня одинаковая структура локальных и удаленных баз данных, и я подключаюсь к удаленной базе данных, используя связанный сервер.моя локальная база данных - SQL2000, а удаленная - SQL2008. Моя локальная таблица:

tbl_name
Id       Name         flag
1      Raymond         1
2      Sara            1
3      Souzan          2

Моя удаленная таблица

tbl_name
Id       Name

Теперь я хочу вставить каждую запись со значением falg field значение = 1 вудаленной таблицы, а затем удалить вставленные записи в локальной базе данных.

    create proc TransferInsertedRecords
    as
    begin
        create temp @table
        (
          id int,
          name nvarchar(10)
        )
        insert into @temp 
            select id,name from tbl_name
                   where flag=1
        Insert into RemoteServer.dbo.Worker.tbl_Names.name
        values select name from @temp

        delete from t1
                from tbl_name t1
                     inner join @temp t2
                           on t1.id=t2.id and flag=1
end

У меня есть задание, которое запускает эту процедуру каждые 5 минут.Как я могу быть уверен, что каждая вставленная запись в удаленной базе данных будет удалена в локальной базе данных?Я имею в виду потерю связи.Предположим, что некоторые данные вставлены в удаленную базу данных, но перед тем, как вставить остальные данные и удалить их в локальной базе данных, соединение теряется.

Должен ли я использовать DISTRIBUTED TRANSACTION, если да, куда я должен поместить операторы COMMIT TRANSACTION or ROLLBACk.

1 Ответ

1 голос
/ 13 мая 2011

Да, используйте РАСПРЕДЕЛЕННУЮ СДЕЛКУ, это единственный способ гарантировать, что ваши изменения будут работать.

РАСПРЕДЕЛЕННАЯ СДЕЛКА должна быть в состоянии обрабатывать сбой соединения, в этом случае вы обнаружите ошибку и откат.

...