Аудит переноса данных в Oracle - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть задача перенести данные из другой базы данных в базу данных Oracle.

А данные из предыдущей базы данных содержат информацию аудита, т.е. отслеживание создания / обновления записей с помощью update_time и update_user. Для простоты предположим, что предыдущая база данных, о которой я говорю, - это файл Excel следующего формата:

Key | Value | Update_Time | Update_User |
----|-------|-------------|-------------|
a   | 1     | 23/04/2020  | user1       |
b   | 2     | 21/04/2020  | user2       |
a   | 3     | 20/04/2020  | user1       |
a   | 4     | 19/04/2020  | user5       |
a   | 5     | 18/04/2020  | user2       |    

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

Key | Value | Last_Update_Time | Last_Update_User |
----|-------|------------------|------------------|
a   | 1     | 23/04/2020       | user1            |
b   | 2     | 21/04/2020       | user2            |

Допустим, пользователь продолжит редактировать строку с ключом b 24/04 / 2020, затем я хочу получить эти результаты для отображения пользовательского интерфейса (в настоящее время я использую python sqlalchemy для доступа к БД, но решение с запросом sql должно подойти для начала)

Key | Value | Update_Time | Update_User |
----|-------|-------------|-------------|
b   | 7     | 24/04/2020  | user2       | ---> this is an update on the new oracle table above
a   | 1     | 23/04/2020  | user1       | ---> those rows below I want to somehow load into the oracle without explicitly create a new table for it
b   | 2     | 21/04/2020  | user2       |
a   | 3     | 20/04/2020  | user1       |
a   | 4     | 19/04/2020  | user5       |
a   | 5     | 18/04/2020  | user2       |    

После изменения основная таблица данных в Oracle должна выглядеть ниже

Key | Value | Last_Update_Time | Last_Update_User |
----|-------|------------------|------------------|
a   | 1     | 23/04/2020       | user1            |
b   | 7     | 24/04/2020       | user2            |

1 Ответ

0 голосов
/ 23 апреля 2020

ВЫ можете использовать приведенный ниже запрос на выборку

  SELECT AD.* FROM Audit_table AD, 
  (SELECT Key,Max(Update_time) Updated_Time,Last_updated_USer
  From Audit_table
  group by Key,Last_updated_USer)rec
  where AD.Key=rec.Key
  AND AD.Updated_Time=rec.Updated_Time
  AND AD.Last_updated_USer=rec.Last_updated_USer;
...