【问题标题】:How to search for Oracle DB entries that have changed from a certain point in time?如何搜索从某个时间点发生变化的 Oracle DB 条目?
【发布时间】:2020-09-07 11:16:25
【问题描述】:

我正在尝试搜索在某个时间点后为用户更改的安全权限。例如,我想为用户查找 01.03.2020 之后发生的更改。

有没有办法查看当前的安全权限,然后与 01.03.2020 之前的安全权限进行比较?数据库表包含所有更改,以及安全权限的每次更改的版本号。但是,我不能只将当前版本与以前的版本进行比较,我需要查看某个时期,即 01.03.2020 之后。该表包含以下列:

user_id
security_privilege_id
version_number
last_user_update_id
last_update

下面是我要搜索的示例。对于这个 user_id,我想将最新的安全权限(版本 16)与 01.03.2020 之前的安全权限进行比较。因此,在这种情况下,它会将版本 16 与版本 14 进行比较。它需要识别所有版本之间安全权限发生变化的情况。

【问题讨论】:

  • 一些样本数据会有很大帮助。
  • 我添加了更多信息。希望现在更清楚了。

标签: sql oracle comparison version


【解决方案1】:

这回答了对原始问题的合理解释。

不,这是不可能的。您的表仅包含最新数据以及 update 时间戳。

为了回答您的问题,您需要详细了解数据在特定时间点的样子。三种常见的实现方法是:

  • 类型 2 表。这是一个包含有效版本和结束日期的表格,显示给定时间点的值。
  • 审计表。这是一个表格,显示了更新数据的前后图片。
  • 快照表,用于隐藏表在特定时间点的样子。

您的表格似乎没有此信息,因此无法用于回答问题。您的数据库中的其他表可能确实有这些信息,但您的问题没有提及它们。

【讨论】:

  • 可能我不清楚。该表包含所有历史条目。这些被保存为不同的版本!因此,我想将每个用户的最新安全权限与某个日期之前的先前条目进行比较,例如01.03.2020.
  • 重复@William Robertson - “一些样本数据会有所帮助”。更新您的问题,添加 DDL 以重新创建您的表,并添加一些 INSERT 语句来创建代表性数据。这将允许人们在提交之前测试答案。帮助我们为您提供帮助。
  • INSERT INTO security_privileges ( user_id ,security_privilege_id ,version_number ,last_user_update_id ,last_update ) VALUES ( 9867 ,2145 ,3 ,9954 ,'01.09.2020' )
  • @天行者。 . .不,我认为您的表没有,至少不像 SQL 中通常使用的“更新”。您的问题和表结构意味着行是更新,而不是新值是插入。插入时间戳的常用术语是“createdAt”或类似的东西。
  • 好的,我无法真正查看 INSERT 语句,因为该表是系统中的核心表。我想事情就是这样。当管理员用户在 GUI 中更改其他用户的安全权限时,系统会生成所有这些条目。不知道为什么讨论这个方向的时候?我的问题是关于查询该表。它保留所有历史记录,即每个用户之前的所有安全权限以及更改时间。
猜你喜欢
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
相关资源
最近更新 更多