为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8 DSC
【操作系统】:centos 7
【CPU】:
【问题描述】*:达梦DSC在兼容Oracle rac方面是否支持对表中的每行数据都设置一个伪列ORA_ROWSCN,反映了表中每行数据最后一次被修改时的系统更改号scn。如果支持,如何查询到每行数据对应的scn号。
以下是关于oracle rac设置伪列和查询每行数据对应的scn号的例子:
create table test1(tid integer primary key, tname varchar2(20)) rowdependencies;
select ora_rowscn from system.test1 where tid = XXX;
DM在数据页里只记录了页的最后修改LSN,而没有记录到数据行上。页的LSN对存储于同一页内的多条记录意味着是相同的,估计用不上。
目前看也只能关联到归档日志去查询才行了。
你可以测试一下下面这些步骤看看
--创建测试表并初始化测试数据
DROP TABLE IF EXISTS T_ROWTST;
CREATE TABLE T_ROWTST
(
A INT,
B VARCHAR2(100)
);
INSERT INTO T_ROWTST VALUES(1,'A');
COMMIT;
INSERT INTO T_ROWTST VALUES(2,'B');
COMMIT;
INSERT INTO T_ROWTST VALUES(8,'E');
COMMIT;
UPDATE T_ROWTST SET A = 3 WHERE A = 1;
COMMIT;
--从SYSOBJECTS表中查询测试用表的ID值
SELECT ID FROM SYSOBJECTS WHERE NAME = 'T_ROWTST';
--查询结果:156175
--查询归档日志文件列表
SELECT PATH,STATUS FROM V$ARCH_FILE ORDER BY CREATE_TIME DESC;
--因为是临时测试,所以就只用最后一个日志应该就够用了,调用dbms包加载归档日志并开始分析
dbms_logmnr.add_logfile('E:\\dmdbms_0403\\archive\\ARCHIVE_LOCAL1_0x494BD78A_EP0_2025-01-03_11-04-09.log');
dbms_logmnr.start_logmnr
--用下面查询得到每条记录对应的CSCN值
SELECT L.CSCN
,A.*
,L.SQL_REDO
FROM V$LOGMNR_CONTENTS L
,T_ROWTST A
WHERE L.DATA_OBJ# = 156175
--AND L.XID = A.TRXID --如果放开这个条件,则取最后事务关联的归档日志内容,不放开则按ROWID取该记录历史修改信息
AND L.ROW_ID = A.ROWID
ORDER BY 1;
--测试完成后,记得结束归档分析
dbms_logmnr.end_logmnr();
测试结果
dm目前不支持,但每行会记录对应的事务id(伪列:trxid),然后通过解析归档日志,可以确认行与lsn的对应关系。