logminer挖掘日志查询update操作的客户端信息。
如果没有启用过附加日志,无法记录。
只有 alter database add supplemental log data;启用过才能记录。
15:06:08 SQL> exec dbms_logmnr.add_logfile(LogFileName=>'+DATA/JYC/ONLINELOG/group_1.264.1216240527', Options=>dbms_logmnr.new);
PL/SQL procedure successfully completed.
15:07:19 SQL> exec sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed.
15:07:28 SQL> select count(*) from v$logmnr_contents where TABLE_NAME = 'JYC';
COUNT(*)
----------
5
15:07:44 SQL> create table log_jyc as select OS_USERNAME,MACHINE_NAME,timestamp,commit_timestamp,seg_owner,seg_name,seg_type_name,table_space,row_id,session_info,username,operation,sql_redo,sql_undo from v$logmnr_contents where TABLE_NAME = 'JYC';
Table created.
15:08:21 SQL> EXEC SYS.DBMS_LOGMNR.END_LOGMNR;
PL/SQL procedure successfully completed.
15:09:58 SQL> select SQL_UNDO from log_jyc;
SQL_UNDO
----------------------------------------------------------------------------------------------------------------------------------------------------------------
delete from "SYS"."JYC" where "ID" = '1' and ROWID = 'AAAUEEAABAAAbNBAAA';
Unsupported
Unsupported
Unsupported
15:10:05 SQL> select SQL_redo,SQL_UNDO from log_jyc;
rows will be truncated
SQL_REDO
----------------------------------------------------------------------------------------------------------------------------------------------------------------
create table jyc (id int);
insert into "SYS"."JYC"("ID") values ('1');
Unsupported
Unsupported
Unsupported
15:10:31 SQL> select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui from v$database;
SUPPLEME SUP SUP
-------- --- ---
NO NO NO
15:11:42 SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.9.0.0.0
[oracle@rac1:/home/oracle]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 17 15:26:30 2025
Version 19.9.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.9.0.0.0
SQL>alter database add supplemental log data;--这个启用才能记录update和客户端信息
Database altered.
SQL> select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui from v$database;
SUPPLEME SUP SUP
-------- --- ---
YESNO NO
SQL> set time on
15:28:33 SQL> update jyc set id=6;
1 row updated.
15:28:52 SQL> commit;
Commit complete.
15:28:54 SQL> select * from v$Log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE#
---------------- ------------- ------------------- ------------
NEXT_TIME CON_ID
------------------- ----------
1 1 65 209715200 512 1 NO
CURRENT 12120834 2025-12-17 06:00:57 9.2954E+18
0
2 1 64 209715200 512 1 NO
INACTIVE 11880480 2025-12-16 01:00:33 12120834
2025-12-17 06:00:57 0
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE#
---------------- ------------- ------------------- ------------
NEXT_TIME CON_ID
------------------- ----------
3 2 51 209715200 512 1 NO
INACTIVE 12042656 2025-12-16 22:01:27 12189549
2025-12-17 14:49:18 0
4 2 52 209715200 512 1 NO
CURRENT 12189549 2025-12-17 14:49:18 9.2954E+18
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE#
---------------- ------------- ------------------- ------------
NEXT_TIME CON_ID
------------------- ----------
0
15:29:12 SQL> set line 180
15:29:15 SQL> set wrap off
15:29:17 SQL> r
1* select * from v$Log
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME CON_ID
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ ------------------- ----------
1 1 65 209715200 512 1 NO CURRENT 12120834 2025-12-17 06:00:57 9.2954E+18 0
2 1 64 209715200 512 1 NO INACTIVE 11880480 2025-12-16 01:00:33 12120834 2025-12-17 06:00:57 0
3 2 51 209715200 512 1 NO INACTIVE 12042656 2025-12-16 22:01:27 12189549 2025-12-17 14:49:18 0
4 2 52 209715200 512 1 NO CURRENT 12189549 2025-12-17 14:49:18 9.2954E+18 0
15:29:17 SQL> select * from v$Logfile;
rows will be truncated
rows will be truncated
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ---------------------------------------------------------------------------------------------------------------------------------------------------------
2 ONLINE +DATA/JYC/ONLINELOG/group_2.265.1216240527
1 ONLINE +DATA/JYC/ONLINELOG/group_1.264.1216240527
3 ONLINE +DATA/JYC/ONLINELOG/group_3.272.1216241361
4 ONLINE +DATA/JYC/ONLINELOG/group_4.273.1216241365
15:29:37 SQL> exec dbms_logmnr.add_logfile(LogFileName=>'+DATA/JYC/ONLINELOG/group_1.264.1216240527', Options=>dbms_logmnr.new);
PL/SQL procedure successfully completed.
15:29:48 SQL> exec sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed.
15:29:58 SQL> select count(*) from v$logmnr_contents where TABLE_NAME = 'JYC';
COUNT(*)
----------
6
15:30:09 SQL> drop table log_jyc;
Table dropped.
15:30:30 SQL> create table log_jyc as select OS_USERNAME,MACHINE_NAME,timestamp,commit_timestamp,seg_owner,seg_name,seg_type_name,table_space,row_id,session_info,username,operation,sql_redo,sql_undo from v$logmnr_contents where TABLE_NAME = 'JYC';
Table created.
15:30:40 SQL> EXEC SYS.DBMS_LOGMNR.END_LOGMNR;
PL/SQL procedure successfully completed.
15:30:52 SQL> select MACHINE_NAME,operation,sql_redo,sql_undo from log_jyc;
rows will be truncated
rows will be truncated
rows will be truncated
MACHINE_NAME
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
UNKNOWN
UNKNOWN
UNKNOWN
UNKNOWN
UNKNOWN
rac1
6 rows selected.
15:31:28 SQL> col MACHINE_NAME for a10
15:31:34 SQL> r
1* select MACHINE_NAME,operation,sql_redo,sql_undo from log_jyc
rows will be truncated
MACHINE_NA OPERATION SQL_REDO
---------- -------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------
UNKNOWN DDL create table jyc (id int);
UNKNOWN INSERT insert into "SYS"."JYC"("ID") values ('1');
UNKNOWN UNSUPPORTED Unsupported
UNKNOWN UNSUPPORTED Unsupported
UNKNOWN UNSUPPORTED Unsupported
rac1 UPDATE update "SYS"."JYC" set "ID" = '6' where "ID" = '2' and ROWID = 'AAAUEEAABAAAbNBAAA';
6 rows selected.
15:31:35 SQL> select timestamp,MACHINE_NAME,operation,sql_redo,sql_undo from log_jyc;
rows will be truncated
TIMESTAMP MACHINE_NA OPERATION SQL_REDO
------------------- ---------- -------------------------------- --------------------------------------------------------------------------------------------------------------------
2025-12-17 14:31:01 UNKNOWN DDL create table jyc (id int);
2025-12-17 14:31:09 UNKNOWN INSERT insert into "SYS"."JYC"("ID") values ('1');
2025-12-17 14:31:24 UNKNOWN UNSUPPORTED Unsupported
2025-12-17 14:47:27 UNKNOWN UNSUPPORTED Unsupported
2025-12-17 14:53:30 UNKNOWN UNSUPPORTED Unsupported
2025-12-17 15:28:54 rac1 UPDATE update "SYS"."JYC" set "ID" = '6' where "ID" = '2' and ROWID = 'AAAUEEAABAAAbNBAAA';
6 rows selected.
15:32:04 SQL> select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui from v$database;
SUPPLEME SUP SUP
-------- --- ---
YES NO NO
15:32:39 SQL> select timestamp,MACHINE_NAME,session_info,sql_redo,sql_undo from log_jyc;
rows will be truncated
rows will be truncated
TIMESTAMP MACHINE_NA SESSION_INFO
------------------- ---------- -----------------------------------------------------------------------------------------------------------------------------------------------------
2025-12-17 14:31:01 UNKNOWN UNKNOWN
2025-12-17 14:31:09 UNKNOWN UNKNOWN
2025-12-17 14:31:24 UNKNOWN UNKNOWN
2025-12-17 14:47:27 UNKNOWN UNKNOWN
2025-12-17 14:53:30 UNKNOWN UNKNOWN
2025-12-17 15:28:54 rac1 login_username=SYS client_info= OS_username=oracle Machine_name=rac1 OS_terminal=pts/0 OS_process_id=129646 OS_program_name=sqlplus@rac1 (TNS V1-V3)
6 rows selected.
15:33:10 SQL> alter database drop supplemental log data (primary key, unique index) columns;
Database altered.
15:34:40 SQL> select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui from v$database;
SUPPLEME SUP SUP
-------- --- ---
YES NO NO
15:34:44 SQL> alter database drop supplemental log data;
Database altered.
15:35:05 SQL> select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui from v$database;
SUPPLEME SUP SUP
-------- --- ---
NO NO NO
15:35:13 SQL> select force_logging from v$database;
FORCE_LOGGING
---------------------------------------
NO
15:35:55 SQL> alter database force logging;--这个数据库日志没用
Database altered.
15:36:25 SQL> select force_logging from v$database;
FORCE_LOGGING
---------------------------------------
YES
15:36:29 SQL> select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui from v$database;
SUPPLEME SUP SUP
-------- --- ---
NO NO NO
15:36:32 SQL> drop table log_jyc;
Table dropped.
15:36:53 SQL> update jyc set id=8;
1 row updated.
15:37:07 SQL> commit;
Commit complete.
15:37:10 SQL> select * from jyc;
ID
----------
8
15:37:14 SQL> exec dbms_logmnr.add_logfile(LogFileName=>'+DATA/JYC/ONLINELOG/group_1.264.1216240527', Options=>dbms_logmnr.new);
PL/SQL procedure successfully completed.
15:37:26 SQL> exec sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed.
15:37:32 SQL>
15:37:33 SQL> select count(*) from v$logmnr_contents where TABLE_NAME = 'JYC';
COUNT(*)
----------
7
15:37:42 SQL> 15:37:42 SQL> create table log_jyc as select OS_USERNAME,MACHINE_NAME,timestamp,commit_timestamp,seg_owner,seg_name,seg_type_name,table_space,row_id,session_info,username,operation,sql_redo,sql_undo from v$logmnr_contents where TABLE_NAME = 'JYC';
Table created.
15:37:56 SQL> select timestamp,MACHINE_NAME,session_info,sql_redo from log_jyc;
rows will be truncated
TIMESTAMP MACHINE_NA SESSION_INFO
------------------- ---------- -----------------------------------------------------------------------------------------------------------------------------------------------------
2025-12-17 14:31:01 UNKNOWN UNKNOWN
2025-12-17 14:31:09 UNKNOWN UNKNOWN
2025-12-17 14:31:24 UNKNOWN UNKNOWN
2025-12-17 14:47:27 UNKNOWN UNKNOWN
2025-12-17 14:53:30 UNKNOWN UNKNOWN
2025-12-17 15:28:54 rac1 login_username=SYS client_info= OS_username=oracle Machine_name=rac1 OS_terminal=pts/0 OS_process_id=129646 OS_program_name=sqlplus@rac1 (TNS V1-V3)
2025-12-17 15:37:08 UNKNOWN UNKNOWN
7 rows selected.
15:38:18 SQL> EXEC SYS.DBMS_LOGMNR.END_LOGMNR;
PL/SQL procedure successfully completed.
15:38:34 SQL> select timestamp,MACHINE_NAME,sql_redo from log_jyc;
TIMESTAMP MACHINE_NA SQL_REDO
------------------- ---------- -----------------------------------------------------------------------------------------------------------------------------------------------------
2025-12-17 14:31:01 UNKNOWN create table jyc (id int);
2025-12-17 14:31:09 UNKNOWN insert into "SYS"."JYC"("ID") values ('1');
2025-12-17 14:31:24 UNKNOWN Unsupported
2025-12-17 14:47:27 UNKNOWN Unsupported
2025-12-17 14:53:30 UNKNOWN Unsupported
2025-12-17 15:28:54 rac1 update "SYS"."JYC" set "ID" = '6' where "ID" = '2' and ROWID = 'AAAUEEAABAAAbNBAAA';
2025-12-17 15:37:08 UNKNOWN Unsupported
7 rows selected.
15:38:50 SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.9.0.0.0
[oracle@rac1:/home/oracle]$
相关参考:
https://blog.csdn.net/jycjyc/article/details/144058395