Oracle DB 中的变更日志列是什么?

What is changelog column in Oracle DB?

是否像在 DS LDAP 中那样在 Oracle DB 中维护任何变更日志列?

如果不是,我们如何维护执行此任务的列?当创建新记录或更新现有记录时,需要能够检测到数据库上的更改。如果有任何链接可以解释如何做到这一点,请分享。我无法为此获得任何有用的链接。

不,除非你有:

  • 在 table 上启用了审计。

    AUDIT insert, update, delete ON table_name BY ACCESS
    
  • 手动创建了一种记录方法(通常使用单独的记录 table 和 user-defined 触发器来捕获更改)。


手动记录更改的示例,如果您有 table:

CREATE TABLE table_name (
  id    NUMBER
        GENERATED ALWAYS AS IDENTITY
        PRIMARY KEY,
  value VARCHAR2(20)
);

然后你可以创建一个日志记录table:

CREATE TABLE table_name__log (
  old_id NUMBER,
  new_id NUMBER,
  value  VARCHAR2(20),
  usr    VARCHAR2(30),
  datetime DATE
);

以及推动更改的触发器:

CREATE TRIGGER table_name__log__trg
  AFTER INSERT OR UPDATE OR DELETE ON table_name
  FOR EACH ROW
BEGIN
  INSERT INTO table_name__log (old_id, new_id, value, usr, datetime)
  VALUES(:OLD.id, :NEW.id, :NEW.value, USER, SYSDATE);
END;
/

那么如果你这样做:

INSERT INTO table_name (value) VALUES ('abc');

UPDATE table_name
SET value = 'def'
WHERE id = 1;

DELETE FROM table_name WHERE id = 1;

那么日志 table 将包含:

OLD_ID NEW_ID VALUE USR DATETIME
null 1 abc FIDDLE_BFRZBVBGKHCOAEIXUMRW 2022-05-20 14:43:30
1 1 def FIDDLE_BFRZBVBGKHCOAEIXUMRW 2022-05-20 14:43:30
1 null null FIDDLE_BFRZBVBGKHCOAEIXUMRW 2022-05-20 14:43:30

db<>fiddle here


如果你想要一个包含更改的列,那么你只需要更改日志记录的结​​构 table 并将触发器调整为任何格式(文本,XML,JSON, 等) 你想将结果推送到日志中。