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, 等) 你想将结果推送到日志中。
是否像在 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, 等) 你想将结果推送到日志中。