2016-08-02 5 views
0

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

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

Как SSIS справляется с этим, чтобы гарантировать согласованные данные?

ответ

1

Не уверен, что ваша база данных, для сервера sql после того, как исходная таблица будет обновлена ​​/ вставлена, любая операция чтения будет заблокирована по умолчанию, поэтому копия не произойдет, пока ваша транзакция не будет завершена. С другой стороны, как только копия начинается, ваша транзакция не может обновить/вставить в исходную таблицу, потому что она читается. SO SIS будет собирать новые строки, если транзакция произойдет до того, как будет выполняться ssis (ssis будет ждать завершения транзакции), или транзакция будет заблокирована с помощью ssis, поэтому таблицы будут синхронизироваться.

+0

Это верно, если обе операции являются атомарными. Есть ли основания полагать, что копирование нескольких таблиц в пакете SSIS является атомной операцией? – BWhite

+0

Я сомневаюсь, что это всего лишь два отдельных оператора sql, выданных ssis для извлечения данных. Я бы предложил сделать это в sql (в одном заявлении или в транзакции и т. Д.), База данных имеет лучший контроль над этим. – thotwielder

0

SSIS обращается к этому с помощью распределенных транзакций, обрабатываемых MSDTC. More info on MSDTC and Distributed Transactions from MS. Вы можете указать параметр transactionupport = required в DataFlow или некоторый контейнер последовательности в потоке задач SSIS, который начнет распределенную транзакцию. В вашем случае - SSIS с MSDTC начнет транзакцию на исходном сайте, предположительно, с уровнем изоляции Serializable, и указанные операции копирования будут заблокированы до завершения транзакции.
Этот подход не является идеальным - источник должен поддерживать распределенные транзакции и MSDTC, некоторые требования к сетевой инфраструктуре должны быть выполнены, кроме того, MSDTC не очень эффективен.