Когда две базы данных имеют столь радикально разные схемы вы должны смотреть на методы для миграции данных или репликации, а не синхронизации. SQL Server предоставляет две технологии для этого: SSIS и Replication, или вы можете написать свой собственный скрипт для этого.
Репликация принимает новые или измененные данные из исходной базы данных и копирует их в целевую базу данных. Он предоставляет механизмы для планирования, упаковки и распространения изменений и может обрабатывать как обновления в режиме реального времени, так и пакетного обновления. Для работы необходимо добавить достаточную информацию в обеих базах данных для отслеживания изменений и сопоставления строк. В вашем случае было бы трудно определить, какие «Продукты» были изменены, поскольку вам нужно было бы идентифицировать все соответствующие измененные строки в 4 или более разных таблицах. Это можно сделать, но это потребует определенных усилий. В любом случае вам придется создавать представления, соответствующие целевой схеме, поскольку репликация не позволяет преобразовывать исходные данные.
SSIS доставит данные из одного источника, преобразует их и нажимает на цель. Он не имеет встроенных механизмов отслеживания изменений, поэтому вам нужно будет добавлять поля в свои таблицы для отслеживания изменений. Это строго пакетный процесс, который может выполняться в соответствии с расписанием. Основное преимущество заключается в том, что вы можете выполнять самые разнообразные преобразования, в то время как репликация практически не имеет значения (кроме рисования данных из представления). Вы можете создавать потоки данных, которые изменяют только соответствующее поле Product, когда изменяется запись атрибута Product related Attribute, или просто воссоздают всю запись продукта и перезаписывают целевую запись.
Наконец, вы можете создать свои собственные триггеры или хранимые процедуры, которые будут выполняться при изменении данных и их копировании из одной базы данных в другую.
Я также должен указать, что вы, вероятно, переназначили свою базу данных. Во всех трех случаях у вас будет некоторое снижение производительности, когда вы присоединитесь ко всем таблицам для восстановления объекта, что приведет к большему количеству блокировок, что необходимо и неэффективное использование индексов. Вы легко жертвуете производительностью и масштабируемостью для удобства изменений.
Возможно, вам стоит взглянуть на функцию разреженной столбцы SQL Server 2008, чтобы поддерживать гибкие схемы, сохраняя при этом производительность и масштабируемость.
Должно ли это быть в режиме реального времени или в течение ночи? Процесс извлечения-преобразования-нагрузки? – Paolo
https://www.symmetricds.org/ является открытым исходным кодом, и я считаю, что должен это сделать – kervin