Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Merge accross a DB Link

Re: Merge accross a DB Link

From: Daniel Morgan <damorgan_at_x.washington.edu>
Date: Mon, 15 Mar 2004 20:02:30 -0800
Message-ID: <1079409723.658672@yasure>


Steve J wrote:

> I'm trying to run a merge process where the source is a view which
> resides on Oracle 8.1.7.3. The target database and the database where
> I'm initiating the query is 9.2.0.2.
>
> The source table has about 11 million rows in it and I would like to
> refresh our table daily/weekly with a merge script.
>
> There are a couple of hundred columns in the table but here's the
> merge script condensed:
>
> ALTER SESSION ENABLE PARALLEL DML;
>
> MERGE INTO S_EVT_ACT TAR
> USING ( SELECT /*+ parallel(a,4) */
> A.ACCNT_OBJCTV_ID
> , A.ACCNT_SRC_ID
> , A.ACD_CALL_DURATION
> , A.ACD_DISC_FLG
> , A.ACD_INBOUND_FLG
> , A.ROW_ID
> FROM S_EVT_ACT_at_NGDPRD01.NGD.COM A
> WHERE LAST_UPD BETWEEN NEW_TIME(TRUNC(SYSDATE - &1), 'EST', 'GMT') AND
> NEW_TIME(TRUNC(SYSDATE), 'EST', 'GMT')) SRC
> ON ( TAR.ROW_ID = SRC.ROW_ID )
> WHEN MATCHED THEN
> UPDATE SET
> TAR.ACCNT_OBJCTV_ID = SRC.ACCNT_OBJCTV_ID
> , TAR.ACCNT_SRC_ID = SRC.ACCNT_SRC_ID
> , TAR.ACD_CALL_DURATION = SRC.ACD_CALL_DURATION
> , TAR.ACD_DISC_FLG = SRC.ACD_DISC_FLG
> WHEN NOT MATCHED THEN
> INSERT
> ( TAR.ACCNT_OBJCTV_ID
> , TAR.ACCNT_SRC_ID
> , TAR.ACD_CALL_DURATION
> , TAR.ACD_DISC_FLG
> , TAR.ACD_INBOUND_FLG
> , TAR.ROW_ID
> )
> VALUES
> ( SRC.ACCNT_OBJCTV_ID
> , SRC.ACCNT_SRC_ID
> , SRC.ACD_CALL_DURATION
> , SRC.ACD_DISC_FLG
> , SRC.ACD_INBOUND_FLG
> , SRC.ROW_ID
> )
> /
>
> The Last_Upd column is indexed but the plan I get is:
>
> QUERY_PLAN
> -----------------------------------------
> MERGE STATEMENT Cost = 1007676088024
> 2.1 MERGE S_EVT_ACT
> 3.1 VIEW
> 4.1 FILTER
> 5.1 HASH JOIN OUTER
> 6.1 FILTER
> 7.1 REMOTE
> 6.2 TABLE ACCESS FULL S_EVT_ACT
>
> The source tables are Siebel tables and cannot be analyzed.
>
> I understand that the merge process works by outer joining to the
> target table but thought it would start by doing an index range scan
> using the Last_Update index.
>
> When I run an explain plan on just the SELECT statement it uses the
> index like I thought it would.
>
> Are there any issues using merge between 8.1.7 & 9.2 tables, should I
> switch to doing insert and update statements or is there something
> else I can take a look at to speed this up?
>
> Any help would be appreciated.
>
> Thanks...

Merge did not exist in 8i.

-- 
Daniel Morgan
http://www.outreach.washington.edu/ext/certificates/oad/oad_crs.asp
http://www.outreach.washington.edu/ext/certificates/aoa/aoa_crs.asp
damorgan_at_x.washington.edu
(replace 'x' with a 'u' to reply)
Received on Mon Mar 15 2004 - 22:02:30 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US