Bo's Oracle Station

查看: 1574|回复: 0

闪回事务

[复制链接]

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2021-2-2 20:50:41 | 显示全部楼层 |阅读模式
Less17_Flashback_TB3.png
事务A   <- 事务B  <-  事务C
nocascade (默认)  什么都不做   
cascade   X事务C  X事务B  X事务A
nonconflict_only   拆解事务B 事务C, 仅仅挖掉没有后续影响的行
  
nocascade_force  X事务A  (唯一惧怕的是约束

--------------------------------------------------------------------------------------------
外键:     父表  事务A 插入       子表  基于父表做了插入     如果把事务A拿掉........???????
唯一/主键:
事务A删除一行,后续被人插入了相同,如果把事务A拿掉........??????

  1. select  * from v$database;

  2. alter database add supplemental log data;

  3. alter database add supplemental log data ( primary key ) columns;
复制代码
  1. select  * from v$database;

  2. alter database add supplemental log data;

  3. alter database add supplemental log data ( primary key ) columns;

  4. alter database add supplemental log data ( foreign key ) columns;
复制代码



实验用的脚本:
  1. undefine s1
  2. create table &&s1( id number ) ;
  3. ! sleep 5
  4. insert into &&s1 values (1) ;
  5. insert into &&s1 values (2) ;
  6. insert into &&s1 values (3) ;
  7. commit;
  8. update &&s1 set id=11 where id=1;
  9. update &&s1 set id=22 where id=2;
  10. update &&s1 set id=33 where id=3;
  11. commit;
  12. update &&s1 set id=222 where id=22;
  13. update &&s1 set id=333 where id=33;
  14. commit;
  15. update &&s1 set id=22 where id=222;
  16. commit;
复制代码
原表:
11
22
333
-----------------------nocascade --------------------------

ORA-55504: Transaction conflicts in NOCASCADE mode
ORA-06512: at "SYS.DBMS_FLASHBACK", line 37
ORA-06512: at "SYS.DBMS_FLASHBACK", line 70
ORA-06512: at line 2

-----------------------nonconflict_only--------------------------
  1. begin
  2.   dbms_flashback.transaction_backout(NUMTXNS=>1,
  3.                                               XIDS=> XID_ARRAY('9C002000030A0000'),
  4.                                               OPTIONS=>dbms_flashback.nonconflict_only);
  5. end;
  6. /

  7. select  * from dba_flashback_txn_state;
复制代码

9B00200068030000    9C002000030A0000        NONCONFLICT_ONLY    SYS



<?xml version="1.0" encoding="ISO-8859-1"?>
<COMP_XID_REPORT XID="9B00200068030000" NAME="_SYS_COMP_TXN_1458624_TIM_1612273446">
    <目标事务TRANSACTION XID="9C002000030A0000">
    <CHARACTERISTICS>
    </CHARACTERISTICS>
    <UNDO_SQL>
        <USQL exec="no">
         update "HR"."T_CASCADE" set "ID" = '3' where "ID" = '33' and ROWID = 'AAAWvpAADAAAACjAAC'
        </USQL>
        <USQL exec="no">
         update "HR"."T_CASCADE" set "ID" = '2' where "ID" = '22' and ROWID = 'AAAWvpAADAAAACjAAB'
        </USQL>
        <USQL exec="yes">
         update "HR"."T_CASCADE" set "ID" = '1' where "ID" = '11' and ROWID = 'AAAWvpAADAAAACjAAA'
        </USQL>
    </UNDO_SQL>
    <DEPENDENT_XIDS>
        <TRANSACTION XID="9C001500050A0000">
        <CHARACTERISTICS>
        </CHARACTERISTICS>
        <UNDO_SQL>
            <USQL exec="no">
             update "HR"."T_CASCADE" set "ID" = '33' where "ID" = '333' and ROWID = 'AAAWvpAADAAAACjAAC'
            </USQL>
            <USQL exec="no">
             update "HR"."T_CASCADE" set "ID" = '22' where "ID" = '222' and ROWID = 'AAAWvpAADAAAACjAAB'
            </USQL>
        </UNDO_SQL>
        <DEPENDENT_XIDS>
            <TRANSACTION XID="9C001700010A0000">
            <CHARACTERISTICS>
            </CHARACTERISTICS>
            <UNDO_SQL>
                <USQL exec="no">
                 update "HR"."T_CASCADE" set "ID" = '222' where "ID" = '22' and ROWID = 'AAAWvpAADAAAACjAAB'
                </USQL>
            </UNDO_SQL>
            <DEPENDENT_XIDS>
            </DEPENDENT_XIDS>
            </TRANSACTION>
        </DEPENDENT_XIDS>
        </TRANSACTION>
    </DEPENDENT_XIDS>
    </TRANSACTION>
<EXECUTED_UNDO_SQL>
<EXEC_USQL>update "HR"."T_CASCADE" set "ID" = '1' where "ID" = '11' and ROWID = 'AAAWvpAADAAAACjAAA'
</EXEC_USQL>
</EXECUTED_UNDO_SQL>
</COMP_XID_REPORT>

1
22
333

--------------------------------------cascade-----------------------------
  1. begin
  2.   dbms_flashback.transaction_backout(NUMTXNS=>1,
  3.                                               XIDS=> XID_ARRAY('9C0019006E0A0000'),
  4.                                               OPTIONS=>dbms_flashback.cascade);
  5. end;
  6. /
复制代码
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <COMP_XID_REPORT XID="9B001300EF030000" NAME="_SYS_COMP_TXN_612809_TIM_1612274796">
  3.         <<font color="Red">目标事务</font>TRANSACTION XID="9C0019006E0A0000">
  4.         <CHARACTERISTICS>
  5.         </CHARACTERISTICS>
  6.         <UNDO_SQL>
  7.                 <USQL exec="yes">
  8.                  update "HR"."T_CASCADE2" set "ID" = '3' where "ID" = '33' and ROWID = 'AAAWv4AADAAAACvAAC'
  9.                 </USQL>
  10.                 <USQL exec="yes">
  11.                  update "HR"."T_CASCADE2" set "ID" = '2' where "ID" = '22' and ROWID = 'AAAWv4AADAAAACvAAB'
  12.                 </USQL>
  13.                 <USQL exec="yes">
  14.                  update "HR"."T_CASCADE2" set "ID" = '1' where "ID" = '11' and ROWID = 'AAAWv4AADAAAACvAAA'
  15.                 </USQL>
  16.         </UNDO_SQL>
  17.         <DEPENDENT_XIDS>
  18.                 <TRANSACTION XID="9B001600AF030000">
  19.                 <CHARACTERISTICS>
  20.                 </CHARACTERISTICS>
  21.                 <UNDO_SQL>
  22.                         <USQL exec="yes">
  23.                          update "HR"."T_CASCADE2" set "ID" = '33' where "ID" = '333' and ROWID = 'AAAWv4AADAAAACvAAC'
  24.                         </USQL>
  25.                         <USQL exec="yes">
  26.                          update "HR"."T_CASCADE2" set "ID" = '22' where "ID" = '222' and ROWID = 'AAAWv4AADAAAACvAAB'
  27.                         </USQL>
  28.                 </UNDO_SQL>
  29.                 <DEPENDENT_XIDS>
  30.                         <TRANSACTION XID="9D001A0009000000">
  31.                         <CHARACTERISTICS>
  32.                         </CHARACTERISTICS>
  33.                         <UNDO_SQL>
  34.                                 <USQL exec="yes">
  35.                                  update "HR"."T_CASCADE2" set "ID" = '222' where "ID" = '22' and ROWID = 'AAAWv4AADAAAACvAAB'
  36.                                 </USQL>
  37.                         </UNDO_SQL>
  38.                         <DEPENDENT_XIDS>
  39.                         </DEPENDENT_XIDS>
  40.                         </TRANSACTION>
  41.                 </DEPENDENT_XIDS>
  42.                 </TRANSACTION>
  43.         </DEPENDENT_XIDS>
  44.         </TRANSACTION>
  45. <EXECUTED_UNDO_SQL>
  46. <EXEC_USQL>update "HR"."T_CASCADE2" set "ID" = '222' <span style="background-color: Yellow;">where "ID" = '22' </span>and ROWID = 'AAAWv4AADAAAACvAAB'
  47. </EXEC_USQL>
  48. <EXEC_USQL>update "HR"."T_CASCADE2" set "ID" = '33' <span style="background-color: Yellow;">where "ID" = '333' </span>and ROWID = 'AAAWv4AADAAAACvAAC'
  49. </EXEC_USQL>
  50. <EXEC_USQL>update "HR"."T_CASCADE2" set "ID" = '22' <span style="background-color: Yellow;">where "ID" = '222' </span>and ROWID = 'AAAWv4AADAAAACvAAB'
  51. </EXEC_USQL>
  52. <EXEC_USQL>update "HR"."T_CASCADE2" set "ID" = '3' <span style="background-color: Yellow;">where "ID" = '33'</span> and ROWID = 'AAAWv4AADAAAACvAAC'
  53. </EXEC_USQL>
  54. <EXEC_USQL>update "HR"."T_CASCADE2" set "ID" = '2' <span style="background-color: Yellow;">where "ID" = '22'</span> and ROWID = 'AAAWv4AADAAAACvAAB'
  55. </EXEC_USQL>
  56. <EXEC_USQL>update "HR"."T_CASCADE2" set "ID" = '1' <span style="background-color: Yellow;">where "ID" = '11'</span> and ROWID = 'AAAWv4AADAAAACvAAA'
  57. </EXEC_USQL>
  58. </EXECUTED_UNDO_SQL>
  59. </COMP_XID_REPORT>
复制代码
1
2
3
------------------nocascade_force------------------------

  1. begin
  2.    dbms_flashback.transaction_backout (NUMTXNS=>1,   
  3.         XIDS=> XID_ARRAY('040011000D070000'),
  4.         OPTIONS=>dbms_flashback.nocascade_force);
  5. end;
  6. /
复制代码
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <COMP_XID_REPORT XID="01000F0006070000">
  3.         <TRANSACTION XID="040011000D070000">
  4.         <CHARACTERISTICS>
  5.         </CHARACTERISTICS>
  6.         <UNDO_SQL>
  7.                 <USQL exec="<font color="Red">yes</font>">
  8.                  update "HR"."T_CASCADE3" set "ID" = '3' where "ID" = '33' and ROWID = 'AAAWyFAADAAAAC3AAC'
  9.                 </USQL>
  10.                 <USQL exec="<font color="Red">yes</font>">
  11.                  update "HR"."T_CASCADE3" set "ID" = '2' where "ID" = '22' and ROWID = 'AAAWyFAADAAAAC3AAB'
  12.                 </USQL>
  13.                 <USQL exec="<font color="Red">yes</font>">
  14.                  update "HR"."T_CASCADE3" set "ID" = '1' where "ID" = '11' and ROWID = 'AAAWyFAADAAAAC3AAA'
  15.                 </USQL>
  16.         </UNDO_SQL>
  17.         <DEPENDENT_XIDS>
  18.                 <TRANSACTION XID="0600030049070000">
  19.                 <CHARACTERISTICS>
  20.                 </CHARACTERISTICS>
  21.                 <UNDO_SQL>no
  22.                         <USQL exec="<font color="SeaGreen">no</font>">
  23.                          update "HR"."T_CASCADE3" set "ID" = '33' where "ID" = '333' and ROWID = 'AAAWyFAADAAAAC3AAC'
  24.                         </USQL>
  25.                         <USQL exec="<font color="SeaGreen">no</font>">
  26.                          update "HR"."T_CASCADE3" set "ID" = '22' where "ID" = '222' and ROWID = 'AAAWyFAADAAAAC3AAB'
  27.                         </USQL>
  28.                 </UNDO_SQL>
  29.                 <DEPENDENT_XIDS>
  30.                         <TRANSACTION XID="01000F0003070000">
  31.                         <CHARACTERISTICS>
  32.                         </CHARACTERISTICS>
  33.                         <UNDO_SQL>
  34.                                 <USQL exec="<font color="SeaGreen">no</font>">
  35.                                  update "HR"."T_CASCADE3" set "ID" = '222' where "ID" = '22' and ROWID = 'AAAWyFAADAAAAC3AAB'
  36.                                 </USQL>
  37.                         </UNDO_SQL>
  38.                         <DEPENDENT_XIDS>
  39.                         </DEPENDENT_XIDS>
  40.                         </TRANSACTION>
  41.                 </DEPENDENT_XIDS>
  42.                 </TRANSACTION>
  43.         </DEPENDENT_XIDS>
  44.         </TRANSACTION>
  45. <EXECUTED_UNDO_SQL>
  46. <EXEC_USQL>update "HR"."T_CASCADE3" set "ID" = '3' <span style="background-color: Yellow;">where "ID" = '33' </span>and ROWID = 'AAAWyFAADAAAAC3AAC'
  47. </EXEC_USQL>
  48. <EXEC_USQL>update "HR"."T_CASCADE3" set "ID" = '2' <span style="background-color: Yellow;">where "ID" = '22' </span>and ROWID = 'AAAWyFAADAAAAC3AAB'
  49. </EXEC_USQL>
  50. <EXEC_USQL>update "HR"."T_CASCADE3" set "ID" = '1' <span style="background-color: Yellow;">where "ID" = '11' </span>and ROWID = 'AAAWyFAADAAAAC3AAA'
  51. </EXEC_USQL>
  52. </EXECUTED_UNDO_SQL>
  53. </COMP_XID_REPORT>
复制代码

1
2
333

-------------------------------------------两个事务的案例
1
222
333

2021-02-04 20-52-00屏幕截图.png

  1. begin
  2.    dbms_flashback.transaction_backout (NUMTXNS=>2,   
  3.         XIDS=> XID_ARRAY('0300130063070000','060003004F070000'),
  4.         OPTIONS=>dbms_flashback.nocascade_force);
  5. end;
  6. /
复制代码
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <COMP_XID_REPORT XID="0400050012070000" NAME="_SYS_COMP_TXN_1682353_TIM_1612442861">
  3.         <TRANSACTION XID="060003004F070000">
  4.         <CHARACTERISTICS>
  5.         </CHARACTERISTICS>
  6.         <UNDO_SQL>
  7.                 <USQL exec="yes">
  8.                  update "HR"."T_CASCADE4" set "ID" = '3' where "ID" = '33' and ROWID = 'AAAWyGAADAAAAC/AAC'
  9.                 </USQL>
  10.                 <USQL exec="yes">
  11.                  update "HR"."T_CASCADE4" set "ID" = '2' where "ID" = '22' and ROWID = 'AAAWyGAADAAAAC/AAB'
  12.                 </USQL>
  13.                 <USQL exec="yes">
  14.                  update "HR"."T_CASCADE4" set "ID" = '1' where "ID" = '11' and ROWID = 'AAAWyGAADAAAAC/AAA'
  15.                 </USQL>
  16.         </UNDO_SQL>
  17.         <DEPENDENT_XIDS>
  18.                 <TRANSACTION XID="050002000D070000">
  19.                 <CHARACTERISTICS>
  20.                 </CHARACTERISTICS>
  21.                 <UNDO_SQL>
  22.                         <USQL exec="no">
  23.                          update "HR"."T_CASCADE4" set "ID" = '33' where "ID" = '333' and ROWID = 'AAAWyGAADAAAAC/AAC'
  24.                         </USQL>
  25.                         <USQL exec="no">
  26.                          update "HR"."T_CASCADE4" set "ID" = '22' where "ID" = '222' and ROWID = 'AAAWyGAADAAAAC/AAB'
  27.                         </USQL>
  28.                 </UNDO_SQL>
  29.                 <DEPENDENT_XIDS>
  30.                         <TRANSACTION XID="0300130063070000">
  31.                         <CHARACTERISTICS>
  32.                         </CHARACTERISTICS>
  33.                         <UNDO_SQL>
  34.                                 <USQL exec="yes">
  35.                                  update "HR"."T_CASCADE4" set "ID" = '222' where "ID" = '22' and ROWID = 'AAAWyGAADAAAAC/AAB'
  36.                                 </USQL>
  37.                         </UNDO_SQL>
  38.                         <DEPENDENT_XIDS>
  39.                         </DEPENDENT_XIDS>
  40.                         </TRANSACTION>
  41.                 </DEPENDENT_XIDS>
  42.                 </TRANSACTION>
  43.         </DEPENDENT_XIDS>
  44.         </TRANSACTION>
  45. <EXECUTED_UNDO_SQL>
  46. <EXEC_USQL>update "HR"."T_CASCADE4" set "ID" = '222' where "ID" = '22' and ROWID = 'AAAWyGAADAAAAC/AAB'
  47. </EXEC_USQL>
  48. <EXEC_USQL>update "HR"."T_CASCADE4" set "ID" = '3' where "ID" = '33' and ROWID = 'AAAWyGAADAAAAC/AAC'
  49. </EXEC_USQL>
  50. <EXEC_USQL>update "HR"."T_CASCADE4" set "ID" = '2' where "ID" = '22' and ROWID = 'AAAWyGAADAAAAC/AAB'
  51. </EXEC_USQL>
  52. <EXEC_USQL>update "HR"."T_CASCADE4" set "ID" = '1' where "ID" = '11' and ROWID = 'AAAWyGAADAAAAC/AAA'
  53. </EXEC_USQL>
  54. </EXECUTED_UNDO_SQL>
  55. </COMP_XID_REPORT>
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-4-27 15:03 , Processed in 0.040713 second(s), 27 queries .

快速回复 返回顶部 返回列表