首页 > 数据库 > Oracle > 达梦、Oracle数据库,日志挖掘对比
https://blog.itpub.net/29785807/viewspace-2789038/
1.打开最小补充日志
alter database add supplemental log data;
2.日志挖掘
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'/arch/exam2_1_184_1075828699.arc',Options=>dbms_logmnr.new);
3.追加
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LogFileName=>'/arch/exam2_1_144_1075828699.arc',Options=>dbms_logmnr.addfile);
4.分析
exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
5.查看
select * from v$logmnr_contents;
6.结束:
exec dbms_logmnr.end_logmnr;
https://eco.dameng.com/document/dm/zh-cn/pm/dbms_logmnr-package
1.修改参数
alter system set 'RLOG_APPEND_LOGIC'=3 both;
2.创建日志挖掘的包
SP_CREATE_SYSTEM_PACKAGES(1,'DBMS_LOGMNR');
3.添加一个或多个需要分析的归档日志文件
dbms_logmnr.add_logfile('/dm8/arch/ARCHIVE_LOCAL1_0x4EA3AD98_EP0_2026-05-25_14-25-33.log');
4.添加一个或多个需要分析的归档日志文件
dbms_logmnr.add_logfile('/dm8/arch/ARCHIVE_LOCAL1_0x4EA3AD98_EP0_2026-05-25_14-25-33.log');
5.添加一个或多个需要分析的归档日志文件
dbms_logmnr.add_logfile('/dm8/arch/ARCHIVE_LOCAL1_0x4EA3AD98_EP0_2026-05-25_14-25-33.log');
6.结束:
dbms_logmnr.end_logmnr();
区别:
达梦数据库,不记录SQL_UNDO值,全是NULL,而Oracle是有记录的。
下面是达梦日志挖掘的详细过程:
目前 DBMS_LOGMNR 只支持对归档日志进行分析,配置归档后,还需要将 dm.ini 中的 RLOG_APPEND_LOGIC 选项置为 1、2、3 或 4。
建议设置为3。
SQL> show parameter RLOG_APPEND_LOGIC 行号 para_name para_value ---------- ----------------- ---------- 1 RLOG_APPEND_LOGIC 0 SQL> select PARA_NAME,PARA_VALUE,PARA_TYPE,DESCRIPTION from v$dm_ini where PARA_NAME='RLOG_APPEND_LOGIC'; 行号 PARA_NAME PARA_VALUE PARA_TYPE DESCRIPTION ---------- ----------------- ---------- --------- ---------------------------------- 1 RLOG_APPEND_LOGIC 3 SYS Type of logic records in redo logs 已用时间: 6.343(毫秒). 执行号:1406. SQL> alter system set 'RLOG_APPEND_LOGIC'=3 both; DMSQL 过程已成功完成 已用时间: 8.179(毫秒). 执行号:1404.
使用包内的过程和函数之前,如果还未创建过系统包,请先调用系统过程创建系统包。
SQL> SP_CREATE_SYSTEM_PACKAGES(1,'DBMS_LOGMNR'); DMSQL 过程已成功完成 已用时间: 60.665(毫秒). 执行号:1407.
查询有哪些归档日志
select name , first_time , next_time , first_change# , next_change# from v$archived_log; /dm8/arch/ARCHIVE_LOCAL1_0x4EA3AD98_EP0_2026-05-22_15-14-56.log 2026-05-22 15:14:56 2026-05-22 16:14:23 770996957 770997288 /dm8/arch/ARCHIVE_LOCAL1_0x4EA3AD98_EP0_2026-05-25_14-11-11.log 2026-05-25 14:11:11 2026-05-25 14:11:11 770997289 770997645
切换归档(有时不生效)
SQL> alter system switch logfile; 操作已执行 已用时间: 3.526(毫秒). 执行号:0. SQL> alter system archive log current; 操作已执行 已用时间: 7.232(毫秒). 执行号:0. select name , first_time , next_time , first_change# , next_change# from v$archived_log;
create table cjc.t0525(id int,name varchar(10),t datetime); insert into cjc.t0525 values(1,'x',sysdate()); insert into cjc.t0525 values(2,'y',sysdate()); commit; update cjc.t0525 set t=t+1 where id>0; commit; alter table cjc.t0525 add column age int default 25; delete from cjc.t0525 where id=2; commit; truncate table cjc.t0525; drop table cjc.t0525;
查看归档:
SQL> select name , first_time , next_time , first_change# , next_change# from v$archived_log; /dm8/arch/ARCHIVE_LOCAL1_0x4EA3AD98_EP0_2026-05-22_15-14-56.log 2026-05-22 15:14:56 2026-05-22 16:14:23 770996957 770997288 /dm8/arch/ARCHIVE_LOCAL1_0x4EA3AD98_EP0_2026-05-25_14-11-11.log 2026-05-25 14:11:11 2026-05-25 14:24:03 770997289 770997691 /dm8/arch/ARCHIVE_LOCAL1_0x4EA3AD98_EP0_2026-05-25_14-25-33.log 2026-05-25 14:25:33 2026-05-25 14:25:33 770997692 770997859
SQL> dbms_logmnr.add_logfile('/dm8/arch/ARCHIVE_LOCAL1_0x4EA3AD98_EP0_2026-05-25_14-25-33.log');
DMSQL 过程已成功完成
已用时间: 1.841(毫秒). 执行号:1423.
通过 ADD_LOGFILE 添加的归档日志文件,可以通过动态视图 V$LOGMNR_LOGS 进行查询,如下:
select low_scn, next_scn, low_time, high_time, log_id, filename from v$logmnr_logs;
查询结果如下:
行号 low_scn next_scn low_time high_time ---------- -------------------- -------------------- -------------------------- -------------------------- log_id filename ----------- --------------------------------------------------------------- 1 770997692 770997859 2026-05-25 14:25:33.000000 2026-05-25 14:29:17.000000 0 /dm8/arch/ARCHIVE_LOCAL1_0x4EA3AD98_EP0_2026-05-25_14-25-33.log
可以分析全部:
SQL> dbms_logmnr.start_logmnr(Options=>2128); DMSQL 过程已成功完成 已用时间: 334.988(毫秒). 执行号:1425.
也可以指定时间:
dbms_logmnr.start_logmnr(Options=>2128 , Starttime=>to_date('2014-03-0417:36:00','YYYY-MM-DD HH24:MI:SS') , Endtime=>to_date('2014-06-0417:36:02','YYYY-MM-DD HH24:MI:SS'));
查看归档日志文件的分析结果,可以通过动态视图 V$LOGMNR_CONTENTS 进行查询,如下:
SQL> select SQL_REDO,SQL_UNDO from V$LOGMNR_CONTENTS where table_name='T0525';
行号 SQL_REDO SQL_UNDO
---------- ---------------------------------------------------------- --------
1 create table cjc.t0525(id int,name varchar(10),t datetime) NULL
2 alter table cjc.t0525 add column age int default 25 NULL
3 drop table cjc.t0525 NULL
已用时间: 0.903(毫秒). 执行号:1429.
SQL> select SQL_REDO from V$LOGMNR_CONTENTS WHERE SQL_REDO IS NOT NULL;
行号 SQL_REDO
---------- -----------------------------------------------------------------------------------------------------
1 create table cjc.t0525(id int,name varchar(10),t datetime)
2 INSERT INTO "CJC"."OBJ# 1044"("COL 1", "COL 2", "COL 3") VALUES(1, 'x', TIMESTAMP'2026-05-25 14:26:09')
3 INSERT INTO "CJC"."OBJ# 1044"("COL 1", "COL 2", "COL 3") VALUES(2, 'y', TIMESTAMP'2026-05-25 14:26:21')
4 UPDATE "CJC"."OBJ# 1044" SET "COL 3" = TIMESTAMP'2026-05-26 14:26:09' WHERE ROWID = 'AAAAAAAAAAAAAAAAAB'
5 UPDATE "CJC"."OBJ# 1044" SET "COL 3" = TIMESTAMP'2026-05-26 14:26:21' WHERE ROWID = 'AAAAAAAAAAAAAAAAAC'
6 alter table cjc.t0525 add column age int default 25
7 DELETE FROM "CJC"."OBJ# 1044" WHERE ROWID = 'AAAAAAAAAAAAAAAAAC'
8 truncate table cjc.t0525
9 drop table cjc.t0525
9 rows got
已用时间: 1.109(毫秒). 执行号:1431.
SQL> dbms_logmnr.end_logmnr(); DMSQL 过程已成功完成 已用时间: 0.850(毫秒). 执行号:1432.
为什么 SQL_REDO 记录的t0525变成了 “OBJ# 1044” ,因为执行drop 后,数据字典里没有t0525对象了,再测试一次,不执行DROP操作:
生成测试数据
create table cjc.t0525(id int,name varchar(10),t datetime); insert into cjc.t0525 values(1,'x',sysdate()); insert into cjc.t0525 values(2,'y',sysdate()); commit; update cjc.t0525 set t=t+1 where id>0; commit; alter table cjc.t0525 add column age int default 25; delete from cjc.t0525 where id=2; commit; truncate table cjc.t0525;
可以正常显示 SQL_REDO
SQL> set pagesize 100
SQL> select SQL_REDO from V$LOGMNR_CONTENTS where table_name='T0525';
行号 SQL_REDO
---------- -----------------------------------------------------------------------------------------------------
1 create table cjc.t0525(id int,name varchar(10),t datetime)
2 INSERT INTO "CJC"."t0525"("id", "name", "t", "age") VALUES(1, 'x', TIMESTAMP'2026-05-25 14:52:27', NULL)
3 INSERT INTO "CJC"."t0525"("id", "name", "t", "age") VALUES(2, 'y', TIMESTAMP'2026-05-25 14:52:27', NULL)
4 UPDATE "CJC"."t0525" SET "t" = TIMESTAMP'2026-05-26 14:52:27' WHERE ROWID = 'AAAAAAAAAAAAAAAAAB'
5 UPDATE "CJC"."t0525" SET "t" = TIMESTAMP'2026-05-26 14:52:27' WHERE ROWID = 'AAAAAAAAAAAAAAAAAC'
6 alter table cjc.t0525 add column age int default 25
7 DELETE FROM "CJC"."t0525" WHERE ROWID = 'AAAAAAAAAAAAAAAAAC'
8 truncate table cjc.t0525
8 rows got
已用时间: 0.702(毫秒). 执行号:1466.
但是 SQL_UNDO始终没有数据
SQL> select SQL_UNDO from V$LOGMNR_CONTENTS where table_name='T0525'; 行号 SQL_UNDO ---------- -------- 1 NULL 2 NULL 3 NULL 4 NULL 5 NULL 6 NULL 7 NULL 7 rows got 已用时间: 0.828(毫秒). 执行号:1448.
欢迎关注我的公众号《 IT小Chen》
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29785807/viewspace-3182990/ ,如需转载,请注明出处,否则将追究法律责任。