我正在使用一个Oracle数据库,同时通过Oracle SQL Developer和R与它进行交互。该数据库在多个人之间共享,但是由于某些公司规则,我们所有人都使用同一用户与其进行交互。 / p>
在我们的一张表中,我们发现一种奇怪的行为,就是不断插入一行而没有我们知道的任何顺序。
说,在表1上,有时会创建一行名称> =“ Test”的行,创建的行超过8K次,我们无法弄清为什么会这样。
我想做的是创建某种自动(触发)功能,当在Table1上插入Name =“ Test”的行时,保存执行该操作的查询和日期/时间。
答案 0 :(得分:3)
在搜索期间是否有存档日志。您必须使用实用程序LogMiner。示例1。
EXECUTE DBMS_LOGMNR.add_logfile(LOGFILENAME => '/oracle/app/oracle/product/11.2/admin/edcu/arc_redo_log/1_39306_769799469.dbf', OPTIONS => DBMS_LOGMNR.NEW);
EXECUTE DBMS_LOGMNR.add_logfile(LOGFILENAME => '/oracle/app/oracle/product/11.2/admin/edcu/arc_redo_log/1_39307_769799469.dbf', OPTIONS => DBMS_LOGMNR.addfile);
EXECUTE DBMS_LOGMNR.add_logfile(LOGFILENAME => '/oracle/app/oracle/product/11.2/admin/edcu/arc_redo_log/1_39308_769799469.dbf', OPTIONS => DBMS_LOGMNR.addfile);
EXECUTE DBMS_LOGMNR.add_logfile(LOGFILENAME => '/oracle/app/oracle/product/11.2/admin/edcu/arc_redo_log/1_39309_769799469.dbf', OPTIONS => DBMS_LOGMNR.addfile);
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
SELECT
to_char(timestamp,'DD-MM-YYYY HH24:MI:SS'),
operation,username,
os_username,
machine_name,
session_info,
sql_redo
FROM v$logmnr_contents
where
seg_owner='MANAGER' and seg_name='TEST2'
14-12-2017 09:40:20 DDL MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN create table test2 (p1 number);
14-12-2017 09:40:47 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1") values (HEXTORAW('c117'));
14-12-2017 09:40:53 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1") values (HEXTORAW('c119'));
14-12-2017 09:40:57 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1") values (HEXTORAW('c137'));
14-12-2017 09:41:01 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1") values (HEXTORAW('c20219'));
14-12-2017 09:41:45 DDL MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN alter table test2 add (p2 varchar2(200));
14-12-2017 09:42:12 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1","COL 2") values (HEXTORAW('c20219'),HEXTORAW('746573743220746573743120'));
14-12-2017 09:42:24 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1","COL 2") values (HEXTORAW('c2021a'),HEXTORAW('746573743420746573743420'));
14-12-2017 09:46:24 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1","COL 2") values (HEXTORAW('c2021a'),HEXTORAW('746573743420746573743420'));
14-12-2017 09:46:25 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1","COL 2") values (HEXTORAW('c2021a'),HEXTORAW('746573743420746573743420'));
14-12-2017 09:46:26 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1","COL 2") values (HEXTORAW('c2021a'),HEXTORAW('746573743420746573743420'));
14-12-2017 09:46:27 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1","COL 2") values (HEXTORAW('c2021a'),HEXTORAW('746573743420746573743420'));
14-12-2017 09:46:28 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("COL 1","COL 2") values (HEXTORAW('c2021a'),HEXTORAW('746573743420746573743420'));
14-12-2017 09:54:37 DDL MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN comment on table test2 is 'test';
14-12-2017 10:16:36 DDL MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN alter table test2 add (p3 varchar2(100));
14-12-2017 10:17:07 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("P1","P2","P3") values ('125','test6','test4 ');
14-12-2017 10:17:08 INSERT MANAGER DeminDV KRW\IVC-PTK-DEMIN login_username=MANAGER client_info= OS_username=DeminDV Machine_name=KRW\IVC-PTK-DEMIN insert into "MANAGER"."TEST2"("P1","P2","P3") values ('125','test6','test4 ');
'
示例2。使用闪回功能
update manager.test2 set p2='test10' where p1=125;
commit;
SELECT versions_xid XID, versions_startscn START_SCN,
versions_endscn END_SCN, versions_operation OPERATION,
p1, p2, p3 FROM manager.test2
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE;
XID START_SCN END_SCN OPERATION P1 P2 P3
---------------------- ------------------------ ---------------------- --------------- ---------- -------- ------
08000E000DD70900 1374388524564 U 125 test10 test4
08000E000DD70900 1374388524564 U 125 test10 test4
08000E000DD70900 1374388524564 U 125 test10
08000E000DD70900 1374388524564 U 125 test10
1374388524564 125 test4 test4
1374388524564 125 test4 test4
1374388524564 125 test6 test4
1374388524564 125 test6 test4
SELECT xid, start_scn , commit_scn COMMIT,operation OP, logon_user ,undo_sql FROM flashback_transaction_query
WHERE xid = HEXTORAW('08000E000DD70900');
XID START_SCN COMMIT OP LOGON_USER UNDO_SQL
-------------------------------- -------------------------------- -------------------------------------- --------------------------------- ------------------------------------
08000E000DD70900 1374388524537 1374388524564 UPDATE MANAGER update "MANAGER"."TEST2" set "P2" = 'test6' where ROWID = 'AAA2wgAAbAAAAEsAAM';
08000E000DD70900 1374388524537 1374388524564 UPDATE MANAGER update "MANAGER"."TEST2" set "P2" = 'test6' where ROWID = 'AAA2wgAAbAAAAEsAAL';
08000E000DD70900 1374388524537 1374388524564 UPDATE MANAGER update "MANAGER"."TEST2" set "P2" = 'test4 test4 ' where ROWID = 'AAA2wgAAbAAAAEsAAK';
08000E000DD70900 1374388524537 1374388524564 UPDATE MANAGER update "MANAGER"."TEST2" set "P2" = 'test4 test4 ' where ROWID = 'AAA2wgAAbAAAAEsAAJ';
08000E000DD70900 1374388524537 1374388524564 UPDATE MANAGER update "MANAGER"."TEST2" set "P2" = 'test4 test4 ' where ROWID = 'AAA2wgAAbAAAAEsAAI';
08000E000DD70900 1374388524537 1374388524564 UPDATE MANAGER update "MANAGER"."TEST2" set "P2" = 'test4 test4 ' where ROWID = 'AAA2wgAAbAAAAEsAAH';
08000E000DD70900 1374388524537 1374388524564 UPDATE MANAGER update "MANAGER"."TEST2" set "P2" = 'test4 test4 ' where ROWID = 'AAA2wgAAbAAAAEsAAG';
08000E000DD70900 1374388524537 1374388524564 UPDATE MANAGER update "MANAGER"."TEST2" set "P2" = 'test4 test4 ' where ROWID = 'AAA2wgAAbAAAAEsAAF';
08000E000DD70900 1374388524537 1374388524564 BEGIN MANAGER
答案 1 :(得分:3)
您可以使用oracle的 audit 功能。
-- to start auditing on table
AUDIT INSERT, UPDATE, DELETE ON <Schemaname>.<tablename> BY ACCESS WHENEVER SUCCESSFUL;
-- after auditing is started, execute below query to get the audit data
-- Modify the where condition according to your need
SELECT
OS_USER,
USERHOST,
DB_USER,
TO_CHAR(EXTENDED_TIMESTAMP, 'DD-MON-RRRR HHAM:MI:SS'),
OBJECT_SCHEMA,
OBJECT_NAME,
STATEMENT_TYPE,
SQL_TEXT,
SQL_BIND
FROM
DBA_COMMON_AUDIT_TRAIL
WHERE OBJECT_SCHEMA = <Schemaname>
AND OBJECT_NAME = <tablename>
ORDER BY
4 DESC;
可以使用以下参数在数据库级别设置审核选项:
AUDIT_TRAIL = {NONE或FALSE |操作系统| DB或TRUE | DB_EXTENDED | XML | XML_EXTENDED}
以下列表提供了每个值的说明:
希望,这对您有用。
干杯!