找出两行是否来自 Oracle 中的同一事务

Fra*_*fka 5 oracle flashback transaction

我正在使用 Oracle 11.1 并想确定一个表中的两行是否由同一事务插入。

是否有一个简单的 sql 语句将行映射到事务 ID?该表是仅插入表。

我有哪些选择?一些 baisc 解决方案可以,我真的不想要一些额外的工具来分析日志文件。

谢谢

Jac*_*las 8

您可以使用ORA_ROWSCN伪列获取一行的 SCN

除非你为表设置了行级依赖跟踪,否则这将报告该行所在块的最后一次更改的 SCN,这可能没有多大用处。您可以打开行级依赖跟踪create table唯一的一次,所以你可能需要删除并重新创建表。

请注意,行级跟踪会将每行的大小增加 6 个字节。

  • 具有行依赖性:

    create table foo rowdependencies as
    select level as id from dual connect by level<=10000;
    
    select count(distinct ora_rowscn) from foo;
    
    COUNT(DISTINCTORA_ROWSCN) 
    ------------------------- 
    1                         
    
    begin
      for r in (select id from foo) loop
        update foo set id = id where id=r.id;
        commit;
      end loop;
    end;
    /
    
    select count(distinct ora_rowscn) from foo;
    
    COUNT(DISTINCTORA_ROWSCN) 
    ------------------------- 
    10000                     
    
    Run Code Online (Sandbox Code Playgroud)
  • 没有 rowdependencies(norowdependencies 是默认值):

    create table bar as
    select level as id from dual connect by level<=10000;
    
    select count(distinct ora_rowscn) from bar;
    
    COUNT(DISTINCTORA_ROWSCN) 
    ------------------------- 
    1                         
    
    begin
      for r in (select id from bar) loop
        update bar set id = id where id=r.id;
        commit;
      end loop;
    end;
    /
    
    select count(distinct ora_rowscn) from bar;
    
    COUNT(DISTINCTORA_ROWSCN) 
    ------------------------- 
    16                        
    
    Run Code Online (Sandbox Code Playgroud)