[20241128]如何知道事务是包含dblink的情况(11g).txt --//工作需要,我需要知道某个事务里面是否涉及dblink,当简单的sql语句包含dblink时,会同步scn,导致产生小量日志。 --//我需要知道某个事务是否涉及dblink,昨天的测试在21c,今天在11g测试看看。 1.环境: SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production create public database link loopback connect to scott identified by "book" using '127.0.0.1/book0'; --//没有其他主机,使用loopback地址。 2.测试: --//session 1: SCOTT@book> create table deptx as select * from dept; Table created. SCOTT@book> select * from deptx@loopback where deptno=20; DEPTNO DNAME LOC ---------- -------------- ------------- 20 RESEARCH DALLAS --//session 2: SYS@book> @ trans SYS@book> @pr ============================== SID : 77 SERIAL# : 579 TRANS_USERNAME : SCOTT PROGRAM : SQLPLUS@GXQYYDG4 (TNS V1-V3) TADDR : 00000000833DE7F0 SES_ADDR : 0000000085D2F2B8 USED_UBLK : 1 USED_UREC : 1 0xFLAG : 421603 STATUS : ACTIVE STATUS2 : ACTIVE START_DATE : 2024-11-29 09:05:23 XIDUSN : 12 XIDSLOT : 19 XIDSQN : 42 XID : 0C0013002A000000 PRV_XID : 0000000000000000 PTX_XID : 0000000000000000 PL/SQL procedure successfully completed. --//0xFLAG = 421603,感觉从这个标识确定是否包含dblink。 --//session 1: SCOTT@book> commit; Commit complete. SCOTT@book> update deptx set LOC=lower(loc) where deptno=20; 1 row updated. --//session 2: SYS@book> @ trans SYS@book> @pr ============================== SID : 77 SERIAL# : 579 TRANS_USERNAME : SCOTT PROGRAM : SQLPLUS@GXQYYDG4 (TNS V1-V3) TADDR : 00000000833DE7F0 SES_ADDR : 0000000085D2F2B8 USED_UBLK : 1 USED_UREC : 1 0xFLAG : E03 STATUS : ACTIVE STATUS2 : ACTIVE START_DATE : 2024-11-29 09:07:11 XIDUSN : 8 XIDSLOT : 27 XIDSQN : 5476 XID : 08001B0064150000 PRV_XID : 0000000000000000 PTX_XID : 0000000000000000 PL/SQL procedure successfully completed. --//0xFLAG = E03, 是否前面的42可以作为dblink事务标识。 --//session 1,继续: SCOTT@book> select * from deptx@loopback where deptno=20; DEPTNO DNAME LOC ---------- -------------- ------------- 20 RESEARCH dallas --//session 2: SYS@book> @pr ============================== SID : 77 SERIAL# : 579 TRANS_USERNAME : SCOTT PROGRAM : SQLPLUS@GXQYYDG4 (TNS V1-V3) TADDR : 00000000833DE7F0 SES_ADDR : 0000000085D2F2B8 USED_UBLK : 1 USED_UREC : 1 0xFLAG : 420E03 STATUS : ACTIVE STATUS2 : ACTIVE START_DATE : 2024-11-29 09:07:11 XIDUSN : 8 XIDSLOT : 27 XIDSQN : 5476 XID : 08001B0064150000 PRV_XID : 0000000000000000 PTX_XID : 0000000000000000 PL/SQL procedure successfully completed. --//视乎前面42表示dblink事务。 --//简单测试一下,感觉情况就是这样,0xFLAG的前面42标识就是dblink相关事务。 --//不过我在生产系统看到的是0x40开头. 3.继续测试看看: --//找一台测试机器,建立到它的dblink连接。 CREATE PUBLIC DATABASE LINK TEST033 CONNECT TO SCOTT IDENTIFIED BY "btbtms" USING '192.168.100.33:1521/test'; --//发现1个小问题,口令要使用双引号,以前没注意. --//session 1: SCOTT@book> update dept@test033 set LOC=lower(loc) where deptno=20; 1 row updated. --//session 2: SYS@book> @ trans SYS@book> @ pr ============================== SID : 117 SERIAL# : 145 TRANS_USERNAME : SCOTT PROGRAM : SQLPLUS@GXQYYDG4 (TNS V1-V3) TADDR : 0000000081872780 SES_ADDR : 0000000085D84B38 USED_UBLK : 1 USED_UREC : 1 0xFLAG : 401603 STATUS : ACTIVE STATUS2 : ACTIVE START_DATE : 2024-11-29 10:11:23 XIDUSN : 19 XIDSLOT : 23 XIDSQN : 48 XID : 1300170030000000 PRV_XID : 0000000000000000 PTX_XID : 0000000000000000 PL/SQL procedure successfully completed. --//这样看到确实是0x40开头. --//在另外的服务器观察: SYS@test> @ trans SYS@test> @ tpt/pr Pivoting output using Tom Kyte's printtab.... ============================== SID : 137 SERIAL# : 52177 USERNAME : SCOTT TADDR : 00000000BC84CAD8 SES_ADDR : 00000000BF3FE5E0 USED_UBLK : 1 USED_UREC : 1 0xFLAG : 401E03 STATUS : ACTIVE START_DATE : 20241129 10:11:22 XIDUSN : 9 XIDSLOT : 4 XIDSQN : 1920 XID : 0900040080070000 PRV_XID : 0000000000000000 PTX_XID : 0000000000000000 PL/SQL procedure successfully completed. --//看到的是0x401E03. --//是否可以猜测,本机看到的是0x401603,而dblink那边看到的是0x401E03. --//session 1: SCOTT@book> commit; Commit complete. --//session 2: SYS@book> @ pr PL/SQL procedure successfully completed. --//在另外的服务器观察: SYS@test> @ tpt/pr Pivoting output using Tom Kyte's printtab.... PL/SQL procedure successfully completed. 4.继续: --//我仔细看了flag,如果是dblink前面一定是0x40.而如果发起的dml修改的涉及dblink,后面4位是1603.如果有本地业务后4位变成1E03. --//session 1: SCOTT@book> update dept@test033 set LOC=upper(loc) where deptno=20; 1 row updated. --//session 2: SYS@book> @ pr ============================== SID : 55 SERIAL# : 2931 TRANS_USERNAME : SCOTT PROGRAM : SQLPLUS@GXQYYDG4 (TNS V1-V3) TADDR : 00000000818961A0 SES_ADDR : 0000000085D0A838 USED_UBLK : 1 USED_UREC : 1 0xFLAG : 401603 STATUS : ACTIVE STATUS2 : ACTIVE START_DATE : 2024-11-29 10:34:27 XIDUSN : 9 XIDSLOT : 30 XIDSQN : 7386 XID : 09001E00DA1C0000 PRV_XID : 0000000000000000 PTX_XID : 0000000000000000 PL/SQL procedure successfully completed. SYS@book> @ ftq 09001E00DA1C0000 XID START_SCN START_TIMESTAMP COMMIT_SCN COMMIT_TIMESTAMP LOGON_USER UNDO_CHANGE# OPERATION TABLE_NAME TABLE_OWNE ROW_ID UNDO_SQL ---------------- ------------- ------------------- ------------- ------------------- ---------- ------------ ---------- -------------------- ---------- ------------------- -------- 09001E00DA1C0000 13317115962 2024-11-29 10:34:26 SCOTT 1 BEGIN --//dnlink: SYS@test> @ tpt/pr Pivoting output using Tom Kyte's printtab.... ============================== SID : 137 SERIAL# : 52184 USERNAME : SCOTT TADDR : 00000000BC84CAD8 SES_ADDR : 00000000BF3FE5E0 USED_UBLK : 1 USED_UREC : 1 0xFLAG : 401E03 STATUS : ACTIVE START_DATE : 20241129 10:34:26 XIDUSN : 10 XIDSLOT : 6 XIDSQN : 29005 XID : 0A0006004D710000 PRV_XID : 0000000000000000 PTX_XID : 0000000000000000 PL/SQL procedure successfully completed. --//早期的tpt脚本竟然使用Tom Kyte's printtab。 SYS@test> @ ftq 0A0006004D710000 XID START_SCN START_TIMESTAMP COMMIT_SCN COMMIT_TIMESTAMP LOGON_USER UNDO_CHANGE# OPERATION TABLE_NAME TABLE_OWNE ROW_ID UNDO_SQL ---------------- ------------- ----------------- ------------- ----------------- ---------- ------------ ---------- -------------------- ---------- ------------------- ------------------------------------------------------------------------------------------ 0A0006004D710000 13317115962 20241129 10:34:26 SCOTT 1 UPDATE DEPT SCOTT AAAMlqAAEAAAAAQAAB update "SCOTT"."DEPT" set "LOC" = 'dallas' where ROWID = 'AAAMlqAAEAAAAAQAAB'; 0A0006004D710000 13317115962 20241129 10:34:26 SCOTT 2 BEGIN --//session 1: SCOTT@book> update dept set LOC=upper(loc) where deptno=20; 1 row updated. --//session 2: SYS@book> @ trans SYS@book> @ pr ============================== SID : 55 SERIAL# : 2931 TRANS_USERNAME : SCOTT PROGRAM : SQLPLUS@GXQYYDG4 (TNS V1-V3) TADDR : 00000000818961A0 SES_ADDR : 0000000085D0A838 USED_UBLK : 2 USED_UREC : 2 0xFLAG : 401E03 STATUS : ACTIVE STATUS2 : ACTIVE START_DATE : 2024-11-29 10:34:27 XIDUSN : 9 XIDSLOT : 30 XIDSQN : 7386 XID : 09001E00DA1C0000 PRV_XID : 0000000000000000 PTX_XID : 0000000000000000 PL/SQL procedure successfully completed. --//如果有事务在本机,看到的后4位变成1E03. --//提交后,dblink事务也一起提交. --//session 1: SCOTT@book> update dept set LOC=upper(loc) where deptno=20; 1 row updated. --//session 2: SYS@book> @ pr ============================== SID : 55 SERIAL# : 2931 TRANS_USERNAME : SCOTT PROGRAM : SQLPLUS@GXQYYDG4 (TNS V1-V3) TADDR : 00000000818961A0 SES_ADDR : 0000000085D0A838 USED_UBLK : 1 USED_UREC : 1 0xFLAG : E03 STATUS : ACTIVE STATUS2 : ACTIVE START_DATE : 2024-11-29 10:43:09 XIDUSN : 13 XIDSLOT : 5 XIDSQN : 49 XID : 0D00050031000000 PRV_XID : 0000000000000000 PTX_XID : 0000000000000000 PL/SQL procedure successfully completed. --//测试有点乱。 5.附上ftq.sql脚本: $ cat ftq.sql column UNDO_SQL format a90 column LOGON_USER format a10 column OPERATION format a10 column TABLE_NAME format a20 column TABLE_owner format a10 column START_SCN format 999999999999 column COMMIT_SCN format 999999999999 --//alter database add supplemental log data; select * from flashback_transaction_query where xid=hextoraw('&&1');
[20241128]如何知道事务是包含dblink的情况(11g).txt
来源:这里教程网
时间:2026-03-03 20:56:55
作者:
编辑推荐:
- [20241128]如何知道事务是包含dblink的情况(11g).txt03-03
- HashMap链式寻址法实现原理03-03
- delete 删除2600万数据03-03
- Oracle数据恢复—底层解析数据文件恢复Oracle数据库数据的案例03-03
- 23c 会话只读测试03-03
- ora-08104的处理记录03-03
- 11g升级19c apex无效03-03
- 数据库管理-第266期 MOS改版,该如何登录(20241126)03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- delete 删除2600万数据
delete 删除2600万数据
26-03-03 - Oracle数据恢复—底层解析数据文件恢复Oracle数据库数据的案例
Oracle数据恢复—底层解析数据文件恢复Oracle数据库数据的案例
26-03-03 - 数据库管理-第266期 MOS改版,该如何登录(20241126)
数据库管理-第266期 MOS改版,该如何登录(20241126)
26-03-03 - 全 网 第 一 份JSON二元性“写操作”的实践
全 网 第 一 份JSON二元性“写操作”的实践
26-03-03 - 第15期Oracle调用DBMS_JOB.SUBMIT报错:ORA-27486:权限不足
- Oracle数据库 Truncate慢分析
Oracle数据库 Truncate慢分析
26-03-03 - 长沙家具宝藏店法拉利沙发,奢华优雅的家居典范
长沙家具宝藏店法拉利沙发,奢华优雅的家居典范
26-03-03 - oracle数据恢复—Oracle数据库文件大小变为0kb怎么恢复数据?
oracle数据恢复—Oracle数据库文件大小变为0kb怎么恢复数据?
26-03-03 - 一万字,浅谈Oracle数据库truncate原理,无备份,如何恢复!
一万字,浅谈Oracle数据库truncate原理,无备份,如何恢复!
26-03-03 - 湖南家具铂金钻奢石餐桌,简约与优雅的完美融合
湖南家具铂金钻奢石餐桌,简约与优雅的完美融合
26-03-03
