oracle通过dblink查表卡住,关于通过dblink查询导致查询数据异常问题请教

两个SQL的执行计划确实存在较大的变化,如下为包含本地表的执行计划

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 3777546417

------------------------------------------------------------------------------------------------------------

| Id  | Operation            | Name                | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|

------------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT     |                     |     1 |    64 |     5  (20)| 00:00:01 |        |      |

|*  1 |  COUNT STOPKEY       |                     |       |       |            |          |        |      |

|   2 |   REMOTE             |                     |    59 |  1829 |    60   (0)| 00:00:01 | DBLIN~ | R->S |

|*  3 |  COUNT STOPKEY       |                     |       |       |            |          |        |      |

|   4 |   REMOTE             |                     |    59 |  1829 |    60   (0)| 00:00:01 | DBLIN~ | R->S |

|*  5 |  COUNT STOPKEY       |                     |       |       |            |          |        |      |

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

|   6 |   REMOTE             |                     |    59 |  1829 |    60   (0)| 00:00:01 | DBLIN~ | R->S |

|   7 |  HASH UNIQUE         |                     |     1 |    64 |     5  (20)| 00:00:01 |        |      |

|   8 |   NESTED LOOPS       |                     |     1 |    64 |     4   (0)| 00:00:01 |        |      |

|   9 |    NESTED LOOPS      |                     |     1 |    38 |     2   (0)| 00:00:01 |        |      |

|* 10 |     INDEX UNIQUE SCAN| PK_DPCPOLICYINFO    |     1 |    17 |     0   (0)| 00:00:01 |        |      |

|  11 |     REMOTE           | LCCONTPLAN          |     1 |    21 |     2   (0)| 00:00:01 | DBLIN~ | R->S |

|  12 |    REMOTE            | LCCONTPLANDUTYPARAM |     1 |    26 |     2   (0)| 00:00:01 | DBLIN~ | R->S |

------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

1 - filter(ROWNUM=1)

3 - filter(ROWNUM=1)

5 - filter(ROWNUM=1)

10 - access("C2"."POLICYNO"='2011000000292099')

Remote SQL Information (identified by operation id):

----------------------------------------------------

2 - SELECT "A1"."GRPCONTNO","A1"."CONTNO","A1"."CONTPLANCODE","A2"."PREM","A2"."CONTNO","A2"."DUT

YCODE" FROM "LCINSURED" "A1","LCDUTY" "A2" WHERE "A1"."CONTNO"="A2"."CONTNO" AND

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

"A1"."GRPCONTNO"=:1 AND "A1"."CONTPLANCODE"=:2 (accessing 'DBLINKDP' )

4 - SELECT "A1"."GRPCONTNO","A1"."CONTNO","A1"."CONTPLANCODE","A2"."AMNT","A2"."CONTNO","A2"."DUT

YCODE" FROM "LCINSURED" "A1","LCDUTY" "A2" WHERE "A1"."CONTNO"="A2"."CONTNO" AND

"A1"."GRPCONTNO"=:1 AND "A1"."CONTPLANCODE"=:2 (accessing 'DBLINKDP' )

6 - SELECT "A1"."GRPCONTNO","A1"."CONTNO","A1"."CONTPLANCODE","A2"."AMNT","A2"."CONTNO","A2"."DUT

YCODE" FROM "LCINSURED" "A1","LCDUTY" "A2" WHERE "A1"."CONTNO"="A2"."CONTNO" AND

"A1"."GRPCONTNO"=:1 AND "A1"."CONTPLANCODE"=:2 (accessing 'DBLINKDP' )

11 - SELECT "GRPCONTNO","CONTPLANCODE","PLANTYPE" FROM "LCCONTPLAN" "C0" WHERE

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

"GRPCONTNO"='2011000000292099' AND "PLANTYPE"='0' (accessing 'DBLINKDP' )

12 - SELECT "GRPCONTNO","CONTPLANCODE","DUTYCODE" FROM "LCCONTPLANDUTYPARAM" "SYS_ALIAS_9" WHERE

"GRPCONTNO"='2011000000292099' AND "CONTPLANCODE"=:1 (accessing 'DBLINKDP' )

如下为不包含本地表的执行计划

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 3116312589

------------------------------------------------------------------------------------------------------------------

| Id  | Operation                      | Name                   | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |

------------------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT REMOTE        |                        |     1 |    49 |     6  (17)| 00:00:01 |        |

|*  1 |  COUNT STOPKEY                 |                        |       |       |            |          |        |

|*  2 |   TABLE ACCESS BY INDEX ROWID  | LCDUTY                 |     1 |    30 |     3   (0)| 00:00:01 | TEST11 |

|   3 |    NESTED LOOPS                |                        |    59 |  4012 |   464   (1)| 00:00:06 |        |

|*  4 |     TABLE ACCESS BY INDEX ROWID| LCINSURED              |    59 |  2242 |   302   (1)| 00:00:04 | TEST11 |

|*  5 |      INDEX RANGE SCAN          | IDX_GRPCONTNO1         |  1584 |       |     9   (0)| 00:00:01 | TEST11 |

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

|*  6 |     INDEX RANGE SCAN           | LCDUTY_IDX01           |     3 |       |     2   (0)| 00:00:01 | TEST11 |

|*  7 |  COUNT STOPKEY                 |                        |       |       |            |          |        |

|*  8 |   TABLE ACCESS BY INDEX ROWID  | LCDUTY                 |     1 |    30 |     3   (0)| 00:00:01 | TEST11 |

|   9 |    NESTED LOOPS                |                        |    59 |  4012 |   464   (1)| 00:00:06 |        |

|* 10 |     TABLE ACCESS BY INDEX ROWID| LCINSURED              |    59 |  2242 |   302   (1)| 00:00:04 | TEST11 |

|* 11 |      INDEX RANGE SCAN          | IDX_GRPCONTNO1         |  1584 |       |     9   (0)| 00:00:01 | TEST11 |

|* 12 |     INDEX RANGE SCAN           | LCDUTY_IDX01           |     3 |       |     2   (0)| 00:00:01 | TEST11 |

|* 13 |  COUNT STOPKEY                 |                        |       |       |            |          |        |

|* 14 |   TABLE ACCESS BY INDEX ROWID  | LCDUTY                 |     1 |    30 |     3   (0)| 00:00:01 | TEST11 |

|  15 |    NESTED LOOPS                |                        |    59 |  4012 |   464   (1)| 00:00:06 |        |

|* 16 |     TABLE ACCESS BY INDEX ROWID| LCINSURED              |    59 |  2242 |   302   (1)| 00:00:04 | TEST11 |

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

|* 17 |      INDEX RANGE SCAN          | IDX_GRPCONTNO1         |  1584 |       |     9   (0)| 00:00:01 | TEST11 |

|* 18 |     INDEX RANGE SCAN           | LCDUTY_IDX01           |     3 |       |     2   (0)| 00:00:01 | TEST11 |

|  19 |  HASH UNIQUE                   |                        |     1 |    49 |     6  (17)| 00:00:01 |        |

|  20 |   NESTED LOOPS                 |                        |     1 |    49 |     5   (0)| 00:00:01 |        |

|* 21 |    INDEX RANGE SCAN            | PK_LCCONTPLAN          |     1 |    22 |     3   (0)| 00:00:01 | TEST11 |

|* 22 |    INDEX RANGE SCAN            | PK_LCCONTPLANDUTYPARAM |     6 |   162 |     2   (0)| 00:00:01 | TEST11 |

------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

1 - filter(ROWNUM=1)

2 - filter("A7"."DUTYCODE"=:B1)

4 - filter("A8"."CONTPLANCODE"=:B1)

5 - access("A8"."GRPCONTNO"=:B1)

6 - access("A8"."CONTNO"="A7"."CONTNO")

7 - filter(ROWNUM=1)

8 - filter("A5"."DUTYCODE"=:B1)

10 - filter("A6"."CONTPLANCODE"=:B1)

11 - access("A6"."GRPCONTNO"=:B1)

12 - access("A6"."CONTNO"="A5"."CONTNO")

13 - filter(ROWNUM=1)

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------------------------------------------------------------------

14 - filter("A3"."DUTYCODE"=:B1)

16 - filter("A4"."CONTPLANCODE"=:B1)

17 - access("A4"."GRPCONTNO"=:B1)

18 - access("A4"."CONTNO"="A3"."CONTNO")

21 - access("A2"."GRPCONTNO"='2011000000292099' AND "A2"."PLANTYPE"='0')

filter("A2"."PLANTYPE"='0')

22 - access("A1"."GRPCONTNO"='2011000000292099' AND "A1"."CONTPLANCODE"="A2"."CONTPLANCODE")

filter("A1"."CONTPLANCODE"="A2"."CONTPLANCODE")