ITPub博客

首页 > 数据库 > Oracle > 达梦、Oracle数据库,日志挖掘对比

达梦、Oracle数据库,日志挖掘对比

原创 Oracle 作者:chenoracle 时间:2026-09-18 16:14:55 0 删除 编辑

一:日志挖掘对比

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是有记录的。

二:详细测试过程如下

下面是达梦日志挖掘的详细过程:

1.准备日志挖掘的参数:

目前 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.

2.创建日志挖掘的包:

使用包内的过程和函数之前,如果还未创建过系统包,请先调用系统过程创建系统包。

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;

3.生成测试数据

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

4.添加一个或多个需要分析的归档日志文件

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

5.启动归档日志文件分析

可以分析全部:

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.

6.终止归档日志文件分析

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE、OCMU 用户组成员、Oracle 11g OCM、微信公众号"IT小Chen"

注册时间:2014-08-05

  • 博文量
    853
  • 访问量
    2720831