具有UDT的表的Oracle V $ LOGMNR_CONTENTS-连接UPDATE和INTERNAL操作

如何解决具有UDT的表的Oracle V $ LOGMNR_CONTENTS-连接UPDATE和INTERNAL操作

我正在使用UDT(用户定义类型)更新oracle表,然后查询V$LOGMNR_CONTENTS视图。我看到更新的每一行都有2条记录-UPDATE和INTERNAL。我需要弄清楚如何链接它们,因为UPDATE操作在ROW_ID中有一个临时值,而正确的值仅出现在INTERNAL操作中,而且我不确定它们的SCN编号如何关联。我正在考虑的方法是使每个DATA_OBJ#的更新队列,并将它们链接到内部FIFO。我想念些更好的东西吗?

脚本:

CREATE TYPE srulon AS OBJECT (name VARCHAR2(30),phone VARCHAR2(20) );
create table root.udt_table (myrowid rowid,myudt srulon);
BEGIN rdsadmin.rdsadmin_util.switch_logfile;END;
insert into root.udt_table values (null,srulon('small','1234'));
commit;
BEGIN rdsadmin.rdsadmin_util.switch_logfile;END;
insert into root.udt_table values (null,'1234'));
update root.udt_table set myrowid=rowid,myudt = srulon('smaller',rowid);
commit;
BEGIN rdsadmin.rdsadmin_util.switch_logfile;END;

查询(在START_LOGMNR之后查询最后一个日志)

select scn,SEQUENCE#,operation,sql_REDO,ROW_ID from  V$LOGMNR_CONTENTS
where session# = 6366 and not operation like '%XML%'
order by scn,SEQUENCE#;

结果:

| SCN | SEQUENCE# | OPERATION | ROW\_ID | sql\_REDO |
| :--- | :--- | :--- | :--- | :--- |
| 240676056 | 1 | INTERNAL | AAB1avAAAAAAwT7AAA | NULL |
| 240676056 | 1 | UPDATE | AAAAAAAAAAAAAAAAAA | update "ROOT"."UDT\_TABLE" a set a."MYROWID" = 'AAB1avAAAAAAwT7AAA' where a."MYROWID" IS NULL; |
| 240676057 | 5 | INTERNAL | AAB1avAAAAAAwT7AAA | NULL |
| 240676058 | 1 | UPDATE | AAAAAAAAAAAAAAAAAA | update "ROOT"."UDT\_TABLE" a set a."MYROWID" = 'AAB1avAAAAAAwT7AAB' where a."MYROWID" IS NULL; |
| 240676059 | 5 | INTERNAL | AAB1avAAAAAAwT7AAB | NULL |
| 240676069 | 1 | COMMIT | AAAAAAAAAAAAAAAAAA | commit; |

解决方法

系统更改号(SCN)是用于跟踪数据库事务活动的主要控制功能。 SCN是一个戳记,用于定义特定时间点的数据库的提交版本。每个提交的事务都会分配一个唯一的SCN。 DB借助SCN编号保留所有数据库更改的记录。 SCN是数据库更改的运行编号

要获取当前的SCN使用

DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER()

因此UPDATE和INTERNAL操作之间没有其他连接,事实是UPDATE SCN低于INTERNAL SCN-但没有计算或逻辑连接

,

错误是order by scn,SEQUENCE#。 删除order by子句后,每个INTERNAL语句都将遵循其对应的UPDATE。 归功于srulon。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?