Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Oracle. Каким образом строятся планы запроса через dblink?  [new]
agalkin
Member

Откуда:
Сообщений: 312
У меня возник вопрос по subj
Итак, версия БД
SELECT * FROM v$version

BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE	11.2.0.1.0	Production
TNS for HPUX: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

1. Запрос №1 и его план: здесь keyword REMOTE на 0 шаге
SQL> explain plan for
  2  SELECT *
  3    FROM WSH_DELIVERY_DETAILS@OEBS     WDD,
  4         WSH_NEW_DELIVERIES@OEBS       WND,
  5         WSH_DELIVERY_ASSIGNMENTS@OEBS WDA,
  6         WSH_DELIVERY_LEGS@OEBS        WDL,
  7         WSH_TRIP_STOPS@OEBS           WTS
  8   WHERE WDD.SOURCE_CODE = 'OE'
  9     AND WDA.DELIVERY_DETAIL_ID = WDD.DELIVERY_DETAIL_ID
 10     AND WND.DELIVERY_ID = WDA.DELIVERY_ID
 11     AND WDL.DELIVERY_ID = WND.DELIVERY_ID
 12     AND WDL.PICK_UP_STOP_ID = WTS.STOP_ID;

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------
Plan hash value: 2919600274                                                                                         
--------------------------------------------------------------------------------------------------------------------
| Id  | Operation              | Name                     | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Inst   |
|   0 | SELECT STATEMENT REMOTE|                          |  1273K|  1073M|       |   205K  (1)| 00:41:06 |        |
|*  1 |  HASH JOIN             |                          |  1273K|  1073M|   587M|   205K  (1)| 00:41:06 |        |
|*  2 |   HASH JOIN            |                          |  1273K|   573M|    73M|   118K  (1)| 00:23:39 |        |
|*  3 |    TABLE ACCESS FULL   | WSH_DELIVERY_ASSIGNMENTS |  1320K|    57M|       |  3035   (1)| 00:00:37 | EBS    |
|*  4 |    HASH JOIN           |                          |  1261K|   512M|   240M| 85400   (1)| 00:17:05 |        |
|*  5 |     HASH JOIN          |                          |  1261K|   226M|   104M| 41071   (1)| 00:08:13 |        |
|   6 |      TABLE ACCESS FULL | WSH_DELIVERY_LEGS        |  1261K|    90M|       |  5044   (2)| 00:01:01 | EBS    |
|   7 |      TABLE ACCESS FULL | WSH_TRIP_STOPS           |  2529K|   272M|       | 15874   (1)| 00:03:11 | EBS    |
|   8 |     TABLE ACCESS FULL  | WSH_NEW_DELIVERIES       |  1307K|   296M|       | 16935   (1)| 00:03:24 | EBS    |
|*  9 |   TABLE ACCESS FULL    | WSH_DELIVERY_DETAILS     |  1455K|   571M|       | 28920   (1)| 00:05:48 | EBS    |

Predicate Information (identified by operation id):
   1 - access("A3"."DELIVERY_DETAIL_ID"="A5"."DELIVERY_DETAIL_ID")
   2 - access("A4"."DELIVERY_ID"="A3"."DELIVERY_ID")
   3 - filter("A3"."DELIVERY_ID" IS NOT NULL)
   4 - access("A2"."DELIVERY_ID"="A4"."DELIVERY_ID")
   5 - access("A2"."PICK_UP_STOP_ID"="A1"."STOP_ID")
   9 - filter("A5"."SOURCE_CODE"='OE')

Note
   - fully remote statement

2. Запрос №2 и его план: здесь keyword REMOTE на каждой таблице
SQL> explain plan for
  2  SELECT * FROM
  3  (
  4  SELECT WDD.SOURCE_LINE_ID,
  5         TRUNC(WTS.ACTUAL_DEPARTURE_DATE) AS ACTUAL_DEPARTURE_DATE,
  6         ROW_NUMBER() OVER(PARTITION BY WDD.SOURCE_LINE_ID ORDER BY WTS.ACTUAL_DEPARTURE_DATE) AS RNUM
  7    FROM WSH_DELIVERY_DETAILS@OEBS     WDD,
  8         WSH_NEW_DELIVERIES@OEBS       WND,
  9         WSH_DELIVERY_ASSIGNMENTS@OEBS WDA,
 10         WSH_DELIVERY_LEGS@OEBS        WDL,
 11         WSH_TRIP_STOPS@OEBS           WTS
 12   WHERE WDD.SOURCE_CODE = 'OE'
 13     AND WDA.DELIVERY_DETAIL_ID = WDD.DELIVERY_DETAIL_ID
 14     AND WND.DELIVERY_ID = WDA.DELIVERY_ID
 15     AND WDL.DELIVERY_ID = WND.DELIVERY_ID
 16     AND WDL.PICK_UP_STOP_ID = WTS.STOP_ID
 17  ) WHERE RNUM = 1;

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT                                                                                                            
-----------------------------------------------------------------------------------------------------------------------------
Plan hash value: 4011801697
-----------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                | Name                     | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Inst   |IN-OUT|
|   0 | SELECT STATEMENT         |                          |  1404K|    42M|       |   106K  (3)| 00:21:18 |        |      |
|*  1 |  VIEW                    |                          |  1404K|    42M|       |   106K  (3)| 00:21:18 |        |      |
|*  2 |   WINDOW SORT PUSHED RANK|                          |  1404K|   174M|   189M|   106K  (3)| 00:21:18 |        |      |
|*  3 |    HASH JOIN             |                          |  1404K|   174M|    76M| 64996   (4)| 00:13:00 |        |      |
|   4 |     REMOTE               | WSH_DELIVERY_DETAILS     |  1455K|    59M|       | 20619   (3)| 00:04:08 | OEBS   | R->S |
|*  5 |     HASH JOIN            |                          |  1405K|   116M|    52M| 33749   (5)| 00:06:45 |        |      |
|   6 |      REMOTE              | WSH_DELIVERY_ASSIGNMENTS |  1457K|    36M|       |  1274   (2)| 00:00:16 | OEBS   | R->S |
|   7 |      REMOTE              |                          |  1261K|    31M|       |  1651   (2)| 00:00:20 | OEBS   | R->S |
                         
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("RNUM"=1)
   2 - filter(ROW_NUMBER() OVER ( PARTITION BY "WDD"."SOURCE_LINE_ID" ORDER BY "WTS"."ACTUAL_DEPARTURE_DATE")<=1)
   3 - access("WDA"."DELIVERY_DETAIL_ID"="WDD"."DELIVERY_DETAIL_ID")
   5 - access("WND"."DELIVERY_ID"="WDA"."DELIVERY_ID")

Remote SQL Information (identified by operation id):
----------------------------------------------------
   4 - SELECT "DELIVERY_DETAIL_ID","SOURCE_CODE","SOURCE_LINE_ID" FROM "WSH_DELIVERY_DETAILS" "WDD" WHERE "SOURCE_CODE"='OE' (accessing 'OEBS')
   6 - SELECT "DELIVERY_ID","DELIVERY_DETAIL_ID" FROM "WSH_DELIVERY_ASSIGNMENTS" "WDA" (accessing 'OEBS')
   7 - SELECT "A1"."DELIVERY_ID","A1"."PICK_UP_STOP_ID","A2"."DELIVERY_ID","A2"."DELIVERY_ID","A3"."ACTUAL_DEPARTURE_DATE",
       "A3"."ACTUAL_DEPARTURE_DATE","A3"."STOP_ID" FROM "WSH_DELIVERY_LEGS" "A1","WSH_NEW_DELIVERIES" "A2","WSH_TRIP_STOPS" "A3"
       WHERE "A1"."PICK_UP_STOP_ID"="A3"."STOP_ID" AND "A1"."DELIVERY_ID"="A2"."DELIVERY_ID" (accessing 'OEBS') 

3. Запрос №3 и его план: плана нет, а есть только keyword REMOTE
SQL> explain plan for
  2  SELECT * FROM
  3  (
  4  SELECT BHA.HEADER_ID,
  5         ROW_NUMBER() OVER (PARTITION BY BHA.HEADER_ID ORDER BY BHA.HEADER_ID) AS RNUM
  6    FROM OE_BLANKET_HEADERS_ALL@OEBS   BHA,
  7         OE_TRANSACTION_TYPES_ALL@OEBS TT,
  8         RA_SALESREPS_ALL@OEBS         SR,
  9         RA_TERMS_TL@OEBS              RT,
 10         FND_LOOKUP_VALUES@OEBS        LVF,
 11         FND_LOOKUP_VALUES@OEBS        LVS,
 12         FND_LOOKUP_VALUES@OEBS        LVT
 13   WHERE BHA.PAYMENT_TERM_ID = RT.TERM_ID(+)
 14     AND BHA.ORDER_TYPE_ID = TT.TRANSACTION_TYPE_ID(+)
 15     AND SR.SALESREP_ID(+) = BHA.SALESREP_ID
 16     AND SR.ORG_ID(+) = BHA.ORG_ID
 17     AND RT.LANGUAGE(+) = 'RU'
 18     AND LVF.LOOKUP_CODE(+) = BHA.ATTRIBUTE6
 19     AND LVF.LOOKUP_TYPE(+) = 'FOB'
 20     AND LVF.VIEW_APPLICATION_ID(+) = 222
 21     AND LVF.SECURITY_GROUP_ID(+) = 0
 22     AND LVF.LANGUAGE(+) = 'RU'
 23     AND LVS.LOOKUP_CODE(+) = BHA.SHIPPING_METHOD_CODE
 24     AND LVS.LOOKUP_TYPE(+) = 'SHIP_METHOD'
 25     AND LVS.VIEW_APPLICATION_ID(+) = 3
 26     AND LVS.SECURITY_GROUP_ID(+) = 0
 27     AND LVS.LANGUAGE(+) = 'RU'
 28     AND LVT.LOOKUP_CODE(+) = BHA.FREIGHT_TERMS_CODE
 29     AND LVT.LOOKUP_TYPE(+) = 'FREIGHT_TERMS'
 30     AND LVT.VIEW_APPLICATION_ID(+) = 660
 31     AND LVT.SECURITY_GROUP_ID(+) = 0
 32     AND LVT.LANGUAGE(+) = 'RU'
 33  ) WHERE RNUM = 1;

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------
Plan hash value: 2014232345
--------------------------------------------------------------
| Id  | Operation        | Name | Cost (%CPU)| Inst   |IN-OUT|
|   0 | SELECT STATEMENT |      |     0   (0)|        |      |
|   1 |  REMOTE          |      |            | OEBS   | R->S |
--------------------------------------------------------------

Remote SQL Information (identified by operation id):
----------------------------------------------------
   1 - EXPLAIN PLAN INTO PLAN_TABLE@! FOR SELECT "A1"."HEADER_ID","A1"."RNUM" FROM  (SELECT "A7"."HEADER_ID"
       "HEADER_ID",ROW_NUMBER() OVER ( PARTITION BY "A7"."HEADER_ID" ORDER BY "A7"."HEADER_ID") "RNUM" FROM "OE_BLANKET_HEADERS_ALL"
       "A7","RA_SALESREPS_ALL" "A6","RA_TERMS_TL" "A5","FND_LOOKUP_VALUES" "A4","FND_LOOKUP_VALUES" "A3","FND_LOOKUP_VALUES" "A2" WHERE
       "A7"."PAYMENT_TERM_ID"="A5"."TERM_ID"(+) AND "A6"."SALESREP_ID"(+)="A7"."SALESREP_ID" AND "A6"."ORG_ID"(+)="A7"."ORG_ID" AND "A5"."LANGUAGE"(+)='RU' AND
       "A4"."LOOKUP_CODE"(+)="A7"."ATTRIBUTE6" AND "A4"."LOOKUP_TYPE"(+)='FOB' AND "A4"."VIEW_APPLICATION_ID"(+)=222 AND "A4"."SECURITY_GROUP_ID"(+)=0
       AND "A4"."LANGUAGE"(+)='RU' AND "A3"."LOOKUP_CODE"(+)="A7"."SHIPPING_METHOD_CODE" AND "A3"."LOOKUP_TYPE"(+)='SHIP_METHOD' AND 
       "A3"."VIEW_APPLICATION_ID"(+)=3 AND "A3"."SECURITY_GROUP_ID"(+)=0 AND "A3"."LANGUAGE"(+)='RU' AND "A2"."LOOKUP_CODE"(+)="A7"."FREIGHT_TERMS_CODE"
       AND "A2"."LOOKUP_TYPE"(+)='FREIGHT_TERMS' AND "A2"."VIEW_APPLICATION_ID"(+)=660 AND "A2"."SECURITY_GROUP_ID"(+)=0 AND "A2"."LANGUAGE"(+)='RU') "A1"
       WHERE "A1"."RNUM"=1 (accessing 'OEBS')


Вопросы:
1. В 1-ом случае, как я понимаю, запрос выполняется удаленно, и нам отображается удаленный план запроса?
2. Что происходит во втором случае? Часть таблиц вообще из плана пропало...
3. В третьем случае запрос выполняется удаленно, но план не отображается? Почему?
15 апр 13, 14:00    [14181640]     Ответить | Цитировать Сообщить модератору
 Re: Oracle. Каким образом строятся планы запроса через dblink?  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Запрос может выполняться на одной из 2-х сторон, в некоторых случаях этим можно рулить хинтом driving_site. Операции, которые выполняются на противоположной стороне, показываются в плане как REMOTE. В 1-м случае запрос и все операции плана выполняется на удаленной стороне. Во 2-м запрос выполняется локально, некоторые операции - удаленно. В 3-м случае запрос выполняется локально, практически все операции - удаленно.
15 апр 13, 14:28    [14181829]     Ответить | Цитировать Сообщить модератору
 Re: Oracle. Каким образом строятся планы запроса через dblink?  [new]
agalkin
Member

Откуда:
Сообщений: 312
wurdu
в некоторых случаях этим можно рулить хинтом driving_site.
Вроде бы этот хинт имеет смысл, когда связываются "локальные" таблицы с "удаленными". В данном случае все таблицы - REMOTE.
wurdu
В 1-м случае запрос и все операции плана выполняется на удаленной стороне... В 3-м случае запрос выполняется локально, практически все операции - удаленно.
Под выполнением запроса подразумевается выполнение операций соединения данных? Если да, то где это видно в 3-ем случае?
wurdu
Во 2-м запрос выполняется локально, некоторые операции - удаленно.
Ну т.е. там где видим REMOTE, значит данные из этой таблицы забираются на локальный сервер, а там уже соединяются?

Вообще, где настраивается такое поведение? Почему не все запросы обрабатываются на удаленном сервере, а локально возвращается только результат?
15 апр 13, 14:57    [14182029]     Ответить | Цитировать Сообщить модератору
 Re: Oracle. Каким образом строятся планы запроса через dblink?  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
agalkin
Вроде бы этот хинт имеет смысл, когда связываются "локальные" таблицы с "удаленными". В данном случае все таблицы - REMOTE.
не только.
SQL> select * from(select rownum rn from dual@testdb a);

Execution Plan
----------------------------------------------------------
Plan hash value: 1788691278

--------------------------------------------------------------
| Id  | Operation        | Name | Cost (%CPU)| Inst   |IN-OUT|
--------------------------------------------------------------
|   0 | SELECT STATEMENT |      |     0   (0)|        |      |
|   1 |  REMOTE          |      |            |  BISDB | R->S |
--------------------------------------------------------------

Remote SQL Information (identified by operation id):
----------------------------------------------------

   1 - EXPLAIN PLAN SET STATEMENT_ID='PLUS60319716' INTO PLAN_TABLE@!
       FOR SELECT "A1"."RN" FROM  (SELECT ROWNUM "RN" FROM "DUAL" "A2") "A1"
       (accessing 'BISDB' )

SQL> select * from(select /*+ driving_site(a) */ rownum rn from dual@testdb a);

Execution Plan
----------------------------------------------------------
Plan hash value: 1143117158

-------------------------------------------------------------------------------
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT REMOTE|      |     1 |    13 |     2   (0)| 00:00:01 |
|   1 |  VIEW                  |      |     1 |    13 |     2   (0)| 00:00:01 |
|   2 |   COUNT                |      |       |       |            |          |
|   3 |    FAST DUAL           |      |     1 |       |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------

Note
-----
   - fully remote statement


agalkin
Под выполнением запроса подразумевается выполнение операций соединения данных? Если да, то где это видно в 3-ем случае?
Подразумеваются rowsource functions. За remote может скрываться как одна операция типа table access full, так и соединения. Для управления процессом надо использовать /*+ driving_site */, но он не всегда применим. Например, DML всегда выполняются на стороне вызова DML. Если /*+ driving_site */ не подходит, можно на удаленной стороне создавать view, чтобы те же соединения не выполнялись локально.
16 апр 13, 09:16    [14185171]     Ответить | Цитировать Сообщить модератору
 Re: Oracle. Каким образом строятся планы запроса через dblink?  [new]
agalkin
Member

Откуда:
Сообщений: 312
wurdu
Подразумеваются rowsource functions.
Спасибо. Правда не очень понятно, в чем отличие
SELECT STATEMENT REMOTE
от
SELECT STATEMENT
  REMOTE
В 1-ом случае - полностью remote запрос и возвращается result set. Во 2-ом - весь запрос выполняется удаленно, а на локальной стороне - SELECT STATEMENT. Но каков смысл этого SELECT STATEMENT, если с remote уже пришел полный result set? Может быть это все-таки одно и то же в данном случае?
wurdu
Для управления процессом надо использовать /*+ driving_site */, но он не всегда применим.
Я экспериментировал с ним до того, как завел топик, но результатов не добился.
wurdu
Если /*+ driving_site */ не подходит, можно на удаленной стороне создавать view, чтобы те же соединения не выполнялись локально.
Да, видимо это единственный железобетонно работающий способ.
16 апр 13, 18:58    [14189095]     Ответить | Цитировать Сообщить модератору
 Re: Oracle. Каким образом строятся планы запроса через dblink?  [new]
nick28
Member

Откуда:
Сообщений: 26
wurdu
agalkin
Под выполнением запроса подразумевается выполнение операций соединения данных? Если да, то где это видно в 3-ем случае?
Подразумеваются rowsource functions. За remote может скрываться как одна операция типа table access full, так и соединения. Для управления процессом надо использовать /*+ driving_site */, но он не всегда применим. Например, DML всегда выполняются на стороне вызова DML. Если /*+ driving_site */ не подходит, можно на удаленной стороне создавать view, чтобы те же соединения не выполнялись локально.


Заметил интересный способ заставлять выполнять объединения на удаленном хосте при помощи добавления and rownum < 10000000 (любое число больше ожидаемого размера выгрузки).


-------------------------------------------------------------------------------------------------------
| Id  | Operation        | Name               | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
-------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |                    |     1 |       |     2   (0)| 00:00:01 |        |      |
|   1 |  VIEW            |                    |     1 |    34 |  5583  (12)| 00:01:11 |        |      |
|   2 |   SORT AGGREGATE |                    |     1 |   276 |            |          |        |      |
|*  3 |    HASH JOIN     |                    |    28 |  7728 |  5583  (12)| 00:01:11 |        |      |
|   4 |     REMOTE       |                    |  1142K|   170M|  2673  (13)| 00:00:34 | NETACT | R->S |
|   5 |     REMOTE       | UTP_COMMON_OBJECTS |  1142K|    74M|  2658  (12)| 00:00:34 | NETACT | R->S |
|   6 |  FAST DUAL       |                    |     1 |       |     2   (0)| 00:00:01 |        |      |
-------------------------------------------------------------------------------------------------------
 
 
-----------------------------------------------------------------------------------------
| Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
-----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |      |     1 |       |     2   (0)| 00:00:01 |        |      |
|   1 |  VIEW            |      |     1 |    34 |  5583  (12)| 00:01:11 |        |      |
|   2 |   SORT AGGREGATE |      |     1 |   133 |            |          |        |      |
|   3 |    VIEW          |      |    28 |  3724 |  5583  (12)| 00:01:11 |        |      |
|   4 |     REMOTE       |      |       |       |            |          | NETACT | R->S |
|   5 |  FAST DUAL       |      |     1 |       |     2   (0)| 00:00:01 |        |      |
-----------------------------------------------------------------------------------------

для запроса 

with
h_corrections as
( select ux.co_dn,
          case when substr(ux.co_name,1,4) = substr(uw.co_name,1,4) 
                    and substr(ux.co_name,7,6) = substr(uw.co_name,7,6)
                    and adg.adjg_adjg_bcch between 512 and 885 
                    and adjg_rt_hopg_id != 10
               then 10
               when adg.adjg_adjg_bcch between 512 and 885 
                    and adjg_rt_hopg_id != 31
               then 31       
               when adg.adjg_adjg_bcch not between 512 and 885 
                    and adjg_rt_hopg_id != 32
               then 32
          end new_hopg_id
  from c_rnc_adjg@netact adg
  join utp_common_objects@netact ux on ( ux.co_gid = adg.obj_gid and ux.co_state = 0 )
  join utp_common_objects@netact uw on ( ux.co_parent_gid = uw.co_gid and uw.co_state = 0 )   
  where adg.conf_id = 1
    and   case when substr(ux.co_name,1,4) = substr(uw.co_name,1,4) 
                    and substr(ux.co_name,7,6) = substr(uw.co_name,7,6)
                    and adg.adjg_adjg_bcch between 512 and 885 
                    and adjg_rt_hopg_id != 10
               then 1
               when adg.adjg_adjg_bcch between 512 and 885 
                    and adjg_rt_hopg_id != 31
               then 1       
               when adg.adjg_adjg_bcch not between 512 and 885 
                    and adjg_rt_hopg_id != 32
               then 1
          end = 1
    ---and rownum < 100000000
          
),

h_ag as
( select XMLAgg( XMLElement("managedObject", XMLAttributes('G' as "class", CO_DN as "distName"),
                 XMLElement("p",             XMLAttributes('N' as "name"), new_hopg_id )))
 from h_corrections
)

select XMLElement("raml",           XMLAttributes('h.xsd' as "xmlns", '2' as "version"),
       XMLElement("cmData",         XMLAttributes('X' as "type", 'X' as "scope",'X' as "name"),
       XMLElement("header",
       XMLElement("log",            XMLAttributes(to_char(sysdate,'YYYY-mm-dd"T"hh24:ss:mi') as "dateTime"))
                 )
, ( select * from h_ag )
)).getclobval() raml from dual;
 
20 мар 14, 15:16    [15760298]     Ответить | Цитировать Сообщить модератору
 Re: Oracle. Каким образом строятся планы запроса через dblink?  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
nick28
Заметил интересный способ заставлять выполнять объединения на удаленном хосте при помощи добавления and rownum < 10000000 (любое число больше ожидаемого размера выгрузки).
целый год понадобился? да и проще было бы no_merge добавить...
20 мар 14, 15:34    [15760446]     Ответить | Цитировать Сообщить модератору
 Re: Oracle. Каким образом строятся планы запроса через dblink?  [new]
nick28
Member

Откуда:
Сообщений: 26
xtender
nick28
Заметил интересный способ заставлять выполнять объединения на удаленном хосте при помощи добавления and rownum < 10000000 (любое число больше ожидаемого размера выгрузки).
целый год понадобился? да и проще было бы no_merge добавить...

Если бы я напрямую его задал, подозреваю, никто бы помогать не стал.

Так вот, спасибо xtender, мне помогло, даже нашёл уточнение для случая, если no_merge не помогает: можно писать rownum > 0
https://www.sql.ru/forum/190443/proektirovanie-i-optimizaciya-predstavleniy

всяко удачнее чем rownum < 10000000
21 мар 14, 10:15    [15764186]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить