【DM版本】:DM Database Server x64 V8
【操作系统】:
【CPU】:
【问题描述】:
表结构如下:
CREATE TABLE "T_TS_LTZ"
(
"ID" NUMBER(38,0) NOT NULL,
"C1" TIMESTAMP(6) WITH LOCAL TIME ZONE,
NOT CLUSTER PRIMARY KEY("ID"));
数据库时区为 +08:00
执行ALTER SESSION SET TIME_ZONE = '00:00'设置0时区并写入一条数据
insert into t_ts_ltz values(1, '2020-01-01 00:00:00');
V$LOGMNR_CONTENTS 查出的 redo sql 为
INSERT INTO "T_TS_LTZ"("ID", "C1") VALUES(1, TIMESTAMP'2020-01-01 00:00:00');
服务端实际存储时数据是(1, '2020-01-01 08:00:00'),redo sql中的值与真实值不一致。
另外,在查询 V$LOGMNR_CONTENTS 之前,设置ALTER SESSION SET TIME_ZONE = '+08:00',返回的redo sql仍然是
INSERT INTO "T_TS_LTZ"("ID", "C1") VALUES(1, TIMESTAMP'2020-01-01 00:00:00');
经过多轮测试发现,V$LOGMNR_CONTENT 返回的 TIMESTAMP WITH LOCAL TIME ZONE 类型的字段的值是 dml 执行时会话时区的时间。
比如,执行ALTER SESSION SET TIME_ZONE = '+08:00'设置时区并写入一条数据
insert into t_ts_ltz values(2, '2020-01-01 00:00:00');
V$LOGMNR_CONTENTS 查出的 redo sql 为
INSERT INTO "T_TS_LTZ"("ID", "C1") VALUES(2, TIMESTAMP'2020-01-01 08:00:00');
请问,怎么获取 V$LOGMNR_CONTENT 返回的 TIMESTAMP WITH LOCAL TIME ZONE 类型的字段的时区值?或者能否通过参数将返回值的时区转为指定时区?
