В нашей базе данных есть много (старых) связанных данных, разбросанных по многим таблицам, которые необходимо архивировать в отдельную базу данных, а затем удалять из исходной базы данных (вероятно, ежедневно). Что архивируется (и удаляется), определяется бизнес-правилами. Нам не нужны новые данные в этом архиве (он часто меняется и к нему обращаются). Некоторые из заархивированных данных, возможно, потребуется вернуть обратно, если это необходимо, и, возможно, о них будет сообщено.
Мне нужно придумать эффективное и простое в обслуживании решение в SSIS. Я могу придумать как минимум три способа сделать это:
- напишите большой оператор выбора с большим количеством левых соединений, чтобы получить все данные, которые мне нужны, затем просмотрите эти данные либо в памяти, либо сохраните их в промежуточной таблице.
- работайте по таблице за таблицей, выбирая задания, а затем соответствующие данные из других таблиц
- аналогичен первому методу, за исключением того, что просто выгружает данные в денормализованную таблицу (похоже на ленивый метод?)
Я рассматривал промежуточные таблицы, хотя в этом случае я не вижу преимущества - я могу скопировать данные непосредственно в архивную таблицу с отметкой времени (отметка времени = процесс запущен), а затем, когда закончите, пойти и удалить идентификаторы, которые были отмечены отметкой времени в время, когда процесс начался. Как только я определил идентификатор задания, я знаю и остальные данные, которые также необходимо заархивировать.
Я ищу оптимальный подход, у кого-нибудь есть другой подход? Как другие люди достигли бы этого?