insert pending committed tran, scn=

环境说明

数据库版本11203以及11204;

数据库是rac环境,两个schema在同一个库(测试环境为节省资源做的架构),schema1创建有dblink可以访问schema2。

背景情况

应用中事务有二阶段提交,一个事务时近端事务,远端事务通过DBLINK进行,测试环境为节省资源,将两个环境合并成一个rac环境,分成不同的两个schema进行。然后发现alert日志出现下面的问题:

DISTRIB TRAN RMBTODB.d0a16ad1.29.15.19865

  is local tran 29.15.19865(hex=1d.0f.4d99)

  insert pending committed tran, scn=34028172249 (hex=7.ec3cb3d9)

Tue Nov 03 11:18:30 2015

DISTRIB TRAN RMBTODB.d0a16ad1.29.15.19865

  is local tran 29.15.19865(hex=1d.0f.4d99))

  delete pending committed tran, scn=34028172249 (hex=7.ec3cb3d9)

【7.ec3cb3d9表明时同一个事务】

通过抓取进程debug,发现事务没有成功提交:

CHANGE #1 TYP:0 CLS:29 AFN:3 DBA:0x00c000e0 OBJ:4294967295 SCN:0x0006.ba018691 SEQ:1 OP:5.8 ENC:0 RBL:0
CHANGE #1 TYP:0 CLS:17 AFN:3 DBA:0x00c00080 OBJ:4294967295 SCN:0x0006.ba0195e4 SEQ:1 OP:5.8 ENC:0 RBL:0


造成的问题

因为 redo里面 标记事务涉及的数据块为OP:5.8 [指事务dead],导致通过redo抓取数据不能应用到目标端

解决办法

因为应用是指定节点连接的,而我们的DBLINK配置的TNSNAME指定是是随机节点,导致事务管理器不能找到同一个节点,而出现问题,通过修改DBLINK的设置,当近端事务在第一个节点时,dblink指向也需要时第一个节点:

例如节点一dblink使用的tnsname配置:【节点而修改VIP1为VIP2,SID1为SID2】

dblink_hst =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL =TCP)(HOST = VIP1)(PORT = 1522))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = DBNAME)

      (INSTANCE_NAME = SID1)

    )

  )


修改后观察alert日志,不再出现分布式事务delete的信息,oradebug,也看不到 OP:5.8的信息了

附加:  OP后面数字的含义。


1   Transaction Control
 
2   Transaction read
 
3   Transaction update
 
4   Block cleanout
        4.1 Block cleanout record
        4.2 Physical cleanout
        4.3 Single array change
        4.4 Multiple array changes
        4.5 Format block
        4.6 ktbcc redo -  Commit Time Block Cleanout Change (?RAC, ?recursive, ?SYS objects)
 
5   Transaction undo management
        5.1 Update undo block
        5.2 Get undo header
        5.3 Rollout a transaction begin
        5.4 On a rollback or commit
        5.5 Create rollback segmenr
        5.6 On a rollback of an insert
        5.7 In the ktubl for 'dbms_transaction.local_transaction_id'
            (begin transaction) - also arrives for incoming distributed
            tx, no data change but TT slot acquired. Also for recursive
            transaction (e.g. truncate). txn start scn:  0xffff.ffffffff
        5.8 Mark transaction as dead
        5.9 Rollback extension of rollback seg
        5.10    Rollback segment header change for extension of rollback seg
        5.11    Mark undo as applied during rollback
        5.19    Transaction audit record - first
        5.20    Transaction audit record - subsequent
        5.23    ktudbr redo: disable block level recovery (reports XID)
        5.24    ktfbhundo - File Space Header Undo
 
6   Control file
 
10  Index
        10.1    SQL load index block
        10.2    Insert Leaf Row
        10.3    Purge Leaf Row
        10.4    Delete Leaf Row
        10.5    Restore Leaf during rollback
        10.6    (kdxlok) Lock block (pre-split?)
        10.7    (kdxulo) unlock block during undo
        10.8    (kdxlne) initialize leaf block being split
        10.9    (kdxair) apply XAT do to ITL 1  -- related to leaf block split
        10.10   Set leaf block next pointer
        10.11   (kdxlpr) (UNDO) set kdxleprv (previous pointer)
        10.12   Initialize root block after split
        10.13   index redo (kdxlem): (REDO) make leaf block empty,
        10.14   Restore block before image
        10.15   (kdxbin) Insert branch block row
        10.16   Purge branch row
        10.17   Initialize new branch block
        10.18   Update key data in row -- index redo (kdxlup): update keydata
        10.19   Clear split flag
        10.20   Set split flag
        10.21   Undo branch operation
        10.22   Undo leaf operation
        10.23   restore block to tree
        10.24   Shrink ITL
        10.25   format root block
        10.26   format root block (undo)
        10.27   format root block (redo)
        10.28   Migrating block (undo)
        10.29   Migrating block (redo)
        10.30   Update nonkey value
        10.31   index root block redo (kdxdlr):  create/load index
        10.34   make branch block empty
        10.35   index redo (kdxlcnu): update nonkey
        10.37   undo index change (kdxIndexlogicalNonkeyUpdate) -- bitmap index
        10.38   index change (kdxIndexlogicalNonkeyUpdate) -- bitmap index
        10.39   index redo (kdxbur) :  branch block update range
        10.40   index redo (kdxbdu) :  branch block DBA update,
 
11  Table
        11.1  undo row operation
        11.2  insert row  piece
        11.3  delete row piece
        11.4  lock row piece
        11.5  update row piece
        11.6  overwrite row piece
        11.7  manipulate first column
        11.8  change forwarding address - migration
        11.9  change cluster key index
        11.10 Set Cluster key pointers
        11.11 Insert multiple rows
        11.12 Delete multiple rows
        11.13 toggle block header flags
        11.17 Update multiple rows
        11.19 Array update ?
        11.20 SHK (mark as shrunk?)
        11.24 HCC update rowid map ?
 
12  Cluster
 
13  Segment management
        13.1    ktsfm redo: -- allocate space ??
        13.5    KTSFRBFMT (block format) redo
        13.6    (block link modify) (? index )  (options: lock clear, lock set)
        13.7    KTSFRGRP (fgb/shdr modify freelist) redo: (options unlink block, move HWM)
        13.13   ktsbbu undo - undo operation on bitmap block
        13.14   ktsbbu undo - undo operation on bitmap block
        13.17   ktsphfredo - Format Pagetable Segment Header
        13.18   ktspffredo - Format Level1 Bitmap Block
        13.19   ktspsfredo - Format Level2 Bitmap Block
        13.21   ktspbfredo - Format Pagetable Datablock
        13.22   State change on level 1 bitmap block
        13.23   Undo on level 1 bitmap block
        13.24   Bitmap block (BMB) state change (level 2 ?)
        13.25   Undo on level 2 bitmap block
        13.26   ?? Level 3 bitmap block state change ??
        13.27   ?? Level 3 bitmap block undo ??
        13.28   Update LHWM and HHWM on segment header
        13.29   Undo on segment header
        13.31   Segment shrink redo for L1 bitmap block
        13.32   Segment shrink redo for segment header block
 
14  Extent management
        14.1    ktecush redo: clear extent control lock
        14.2    ktelk redo - lock extent (map)
        14.3    Extent de-allocate
        14.4    kteop redo - redo operation on extent map
        14.5    kteopu undo - undo operation on extent map
        14.8    kteoputrn - undo operation for flush for truncate
 
15  Tablespace
 
16  Row cache
 
17  Recovery management
        17.1    End backup mode marker
        17.3    Crash Recovery at scn:  0x0000.02429111
        17.28   STANDBY METADATA CACHE INVALIDATION
 
18  Block image (hot backups)
        18.1    Block image
        18.3    Reuse redo entry
                   (Range reuse: tsn=1 base=8388753 nblks=8)
                or (Object reuse: tsn=2 objd=76515)
 
19  Direct loader
        19.1    Direct load block record
        19.2    Nologging invalidate block range
            Direct Loader invalidate block range redo entry
 
20  Compatibility segment
 
21  LOB segment
        21.1    kdlop (Long Feild) redo:  [sic]
                (insert basicfile clob)
 
22  Locally managed tablespace
        22.2    ktfbhredo - File Space Header Redo:
        22.3    ktfbhundo - File Space Header Undo:
        22.5    ktfbbredo - File BitMap Block Redo:
        22.16   File Property Map Block (FPM)
 
23  Block writes
        23.1    Block written record
        23.2    Block read record (BRR) -- reference in Doc ID: 12423475.8
 
24  DDL statements
        24.1    DDL
        24.2    Direct load block end mark
        24.4    ?? Media recovery marker
        24.10   ??
        24.11   ??
 

猜你喜欢

转载自blog.csdn.net/jycjyc/article/details/107569624
SCN