Лучший способ распределить транзакции по нескольким базам данных: не делать.
Некоторые люди укажут вам на XA, но XA (или Two Phase Commit) - ложь (или маркетолог).
Представьте себе: после того, как на первом этапе менеджер XA сообщил, что он может отправить окончательную фиксацию, сетевое соединение с одной из баз данных перестает работать. Что теперь? Тайм-аут? Это оставит другую базу данных поврежденной. Откат? Две проблемы: вы не можете откатить коммит и как узнать, что случилось со второй базой данных? Может быть, сетевое соединение не удалось после того, как он успешно зафиксировал данные, и было потеряно только сообщение об успехе?
Лучший способ - скопировать данные в одном месте. Используйте схему, которая позволяет прервать копию и продолжить ее в любое время (например, игнорировать данные, которые у вас уже есть, или заказать выбор по идентификатору и запрашивать только записи> MAX (ID) вашей копии). Защитите это с помощью транзакции. Это не проблема, поскольку вы только читаете данные из источника, поэтому, когда транзакция завершается неудачей по любой причине, вы можете игнорировать исходную базу данных. Таким образом, это простая старая транзакция с одним источником.
После того, как вы скопировали данные, обработайте их локально.