У меня есть несколько идентичных баз данных (распределенных на нескольких серверах), и мне нужно собрать их в одну точку для анализа данных и т. Д.
Идея состоит в том, чтобы взять Table1
, Table2
, ..., TableN
из каждой базы данных, объединяем их и помещаем результат в одну большую базу данных.
Чтобы иметь возможность писать запросы и знать, из какой базы данных поступила каждая строка, мы добавимодин столбец DatabaseID
целевой таблицы, описывающий, откуда появилась строка.Редактирование исходных таблиц не вариант, оно принадлежит некоторому проприетарному программному обеспечению.
У нас есть ~ 40 серверов, ~ 170 баз данных и нам нужно скопировать ~ 40 таблиц.
Теперь, какдолжны ли мы реализовать это, учитывая, что оно должно быть:
- Простота в настройке
- Простота в обслуживании
- Предпочтительно легко настроить, если схема базы данных изменяется
- Надежный, регистрация / тревога, если что-то не получается
- Не слишком сложно добавить дополнительные таблицы для копирования
Мы изучили SSIS, но казалось, что нам придется добавить каждыйтаблица в качестве источника / преобразования / назначения.Я предполагаю, что это также будет довольно привязано к схеме базы данных.Правильно?
Другой вариант - использовать репликацию SQL Server, но я не вижу, как добавить столбец DatabaseID
в каждую таблицу.Кажется, что возможно только копировать данные, но не изменять их.Может быть, мы могли бы скопировать все данные в отдельные базы данных, а затем запустить локальное задание на целевом сервере для объединения таблиц?Также кажется, что нам нужно много работы, чтобы добавить еще несколько таблиц для копирования, поскольку нам пришлось бы перераспределять новые публикации для каждой базы данных (ручная работа?).
Последний вариант (?) - этонаписать пользовательское приложение для наших нужд.Большие временные вложения, но они, по крайней мере, сделали бы именно то, что нам хотелось бы.
Чтобы еще хуже ... мы используем Microsoft SQL Server 2000. Мы обновимся до SQL Server 2008 R2 в течение 6месяцев, но мы бы хотели, чтобы проект стал пригодным для использования раньше.
Дайте мне знать, что вы, ребята, думаете!
ОБНОВЛЕНИЕ 20110721
Мы закончилис программой на F #, открывающей соединение с SQL Server, где нам нужны объединенные базы данных.Оттуда мы запрашиваем 40 связанных SQL-серверов, чтобы получить все строки (но не все столбцы) из некоторых таблиц и добавить дополнительную строку в каждую таблицу, чтобы сообщить, из какого DatabaseID получена эта строка.Конфигурация серверов для выборки, из каких таблиц и из каких столбцов является комбинация конфигурации текстового файла и жестко заданных значений (хе: D).Это не супер-быстрый (пока последовательная выборка), но он абсолютно управляем, и последующая обработка данных занимает гораздо больше времени.
Будущие улучшения могут быть:
- улучшить ошибкуобработка, если это оказывается проблемой (если сервер не подключен и т. д.).
- реализует параллельную выборку, чтобы сократить общее время до завершения выборки.
- выяснитьесли достаточно выбрать только некоторые строки, например, только то, что было добавлено / обновлено.
В целом все оказалось довольно просто, никаких зависимостей от других продуктов, и он хорошо работает впрактика.