Обновление таблиц базы данных Oracle после создания первоначальной копии

#sql #database #oracle #oracle11g

#sql #База данных #Oracle #oracle11g

Вопрос:

У меня есть база данных для производства и разработки (конечно, в разных системах). Много месяцев назад я скопировал производственную базу данных в систему разработки. В то время я использовал exp / imp. С тех пор в производственной базе данных произошло довольно много изменений, которые я хотел бы скопировать в базу данных разработки. Я бы предпочел не уничтожать базу данных разработки и начинать все сначала из-за данных, которые мне пришлось добавить в базу данных разработки.

Моей первоначальной мыслью было использовать MERGE INTO для копирования новых записей. Но это, по-видимому, требует, чтобы я сделал это для таблиц и перечислил все поля всех таблиц. Здесь речь идет о сотнях таблиц и тысячах полей. Не очень приятное решение.

Есть ли более простой способ?

Комментарии:

1. Всякий раз, когда я чувствую себя перегруженным количеством таблиц или столбцов, я всегда прибегаю к генерации этих запросов из вида, подобного all_tab_columns . Потратьте день на написание запроса, который сгенерирует MERGE для вас эти сотни запросов, а затем вы сможете повторно использовать их для обновления так часто, как пожелаете.

Ответ №1:

Почему бы не использовать параметр TABLE_EXISTS impdp для добавления новых данных в существующие таблицы? Повторяющиеся ключи будут отключены с ошибкой, но остальные данные все равно должны быть импортированы. Результаты будут немного запутанными. Перед запуском УСЕКИТЕ все таблицы в тесте, куда вы можете просто перенести всю рабочую таблицу. Отключите FK. Повторно включите после импорта. — — Другой вариант — создать ссылку на базу данных и сгенерировать ВСТАВКУ / ВЫБОР во все таблицы, где данных нет в существующей тестовой таблице. Вероятно, вы также захотите отключить FK перед запуском и снова включить, когда закончите.