需要记录在oracle中输入的数据

Need logs for the data entered in oracle

我已将数据输入到 oracle 数据库table 之一

Table 名字是 TABLE1,它有 3 列,即 (ROLL_NO, NAME, AGE)

CREATE TABLE TABLE1
(
   ROLL_NO NUMBER NOT NULL,
   NAME VARCHAR2(10),
   AGE NUMBER
);

INSERT INTO TABLE1 VALUES(1, 'BOB', 20);
INSERT INTO TABLE1 VALUES(2, 'TOM', 21);
INSERT INTO TABLE1 VALUES(3, 'SAM', 22);

我只想要在 oracle 中输入的数据日志。我怎样才能得到输入这些数据的日志

您可以创建一个额外的 table 以保留那些 DML 日志,例如

CREATE TABLE log_table1
(
   id          NUMBER,
   dml_type    VARCHAR2(1),
   roll_no     NUMBER,
   name        VARCHAR2(10),
   age         NUMBER,
   client_info VARCHAR2(64), 
   osuser      VARCHAR2(128), 
   module      VARCHAR2(64),
   machine     VARCHAR2(64),
   time        DATE 
);
/

和一个数据库触发器来填充 table 以及为每个记录生成标识值的序列,例如

CREATE SEQUENCE seq_table1;
/

然后

CREATE OR REPLACE TRIGGER trg_log_table1
AFTER INSERT OR UPDATE OR DELETE ON table1
FOR EACH ROW
DECLARE
  v_dml_type     VARCHAR2(1):='I';
  v_client_info  v$session.client_info%TYPE;
  v_osuser       v$session.osuser%TYPE;
  v_module       v$session.module%TYPE;
  v_machine      v$session.machine%TYPE;
BEGIN
    SELECT client_info, osuser, module, machine
      INTO v_client_info, v_osuser, v_module, v_machine
      FROM v$session
     WHERE sid = sys_context('USERENV','SID');

  IF inserting OR updating THEN
    IF updating THEN v_dml_type := 'U'; END IF;
    INSERT INTO log_table1
    VALUES(seq_table1.nextval,v_dml_type,:new.roll_no,:new.name,:new.age,v_client_info, v_osuser, v_module, v_machine,SYSDATE);
  ELSIF deleting THEN
    v_dml_type := 'D';
    INSERT INTO log_table1
    VALUES(seq_table1.nextval,v_dml_type,:old.roll_no,:old.name,:old.age,v_client_info, v_osuser, v_module, v_machine,SYSDATE);
  END IF;
END;
/

如果某些行的 client_infomodule 得到 null 值,可能需要调用这些过程

dbms_application_info.set_module(i_module,i_action);
dbms_application_info.set_client_info(i_client);

从您访问数据库以填充这些列的应用程序。