审计数据迁移到 Oracle

Posted

技术标签:

【中文标题】审计数据迁移到 Oracle【英文标题】:Audit data migration into Oracle 【发布时间】:2020-08-06 06:40:28 【问题描述】:

我的任务是将数据从另一个数据库迁移到 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            |

假设用户在 2020 年 4 月 24 日继续使用键 b 编辑行,然后我想获取这些结果以进行 UI 显示(目前我正在使用 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            |

【问题讨论】:

所以你需要一个 oracle 查询? 是的,那将是理想的。我正在使用 python sqlalchemy 访问新的 oracle db,但是带有 sql 查询的解决方案对于开始来说会很棒 【参考方案1】:

你可以使用下面的选择查询

  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;

【讨论】:

关键是我的审计表不存在,我想开始设置它,其中包含以前 excel 的先前审计和从现在开始的审计。我可以为此创建一个明确的审计表,但这就像最后的手段,因为我想要 Oracle 的本地解决方案(如果有的话)。 Oracle Flashback(我找到的一个解决方案)处理自创建数据表以来的更改,但不是旧数据库中的前一个更改(在我的示例中为 excel) 可以使用sql loader之类的工具将之前的excel数据加载到oracle db中,然后运行这个查询 除了 names 列之外,我看不出您要导入的现有表与建议的新表之间有任何区别。那么为什么不直接导入旧表并继续使用它呢?至于期望 Oracle 有一个“本机”解决方案,这些表显然是特定于您的应用程序的,因此您不能期望 oracle 知道它们是如何使用的,或者任何给定的“旧”表可能与某些提议的“相关”。新表。

以上是关于审计数据迁移到 Oracle的主要内容,如果未能解决你的问题,请参考以下文章

oracle-审计导数

用于审计跟踪的 Elasticsearch

Oracle 审计表AUD$迁移表空间及创建清理job

怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL

操作教程|如何快速将数据迁移到JumpServer开源堡垒机?

如何将ORACLE的数据迁移到MYSQL