Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запрос к таблицам из разных БД / 11 сообщений из 11, страница 1 из 1
11.06.2019, 13:07
    #39825336
reaque
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
В бд1 есть таблица1
В бд2 есть таблица2

запрос из первой БД работает быстро
авторselect * from таблица1 where id in (select id from таблица2@бд2)

аналогичный запрос из второй БД работает бесконечно медленно
авторselect * from таблица1@бд1 where id in (select id from таблица2)

при этом на второй БД подзапрос выполняется мгновенно
авторselect id from таблица2

если на второй БД вместо подзапроса указать конкретные значения (результат подзапроса) - запрос выполнится мгновенно.
авторselect * from таблица1@бд1 where id in (1,2,3)

куда копать?
...
Рейтинг: 0 / 0
11.06.2019, 13:16
    #39825348
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
reaque,

driving_site?
...
Рейтинг: 0 / 0
11.06.2019, 13:44
    #39825369
reaque
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
Спасибо, проблему решило
авторselect /*+ DRIVING_SITE(таблица1) */ * from таблица1@бд1 where id in (select id from таблица2)

Если раньше этот запрос работал быстро и без хинта, что могло повлиять, если структура объектов в запросе не менялась?
...
Рейтинг: 0 / 0
13.06.2019, 09:32
    #39825980
reaque
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
Если результат запроса необходимо сохранить в какую таблицу через insert into, то запрос вновь бесконечно долго выполняется.

Похожая проблема обсуждалась тут: https://www.sql.ru/forum/146331/driving-site-insert
Но решения нет.
...
Рейтинг: 0 / 0
13.06.2019, 09:42
    #39825986
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
reaqueЕсли результат запроса необходимо сохранить в какую таблицу через insert into, то запрос вновь бесконечно долго выполняется
данных много для вставки?
...
Рейтинг: 0 / 0
13.06.2019, 11:03
    #39826021
reaque
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
Запрос выдает 0 строк, так задумано, т.е. вставлять по идее нечего.
Тут на форуме прочитал, что когда идет DML операция (в данном случае INSERT), то хинт в подзапросе не работает.

Еще уточнение: таблица1 это не таблица, а представление.
Если сделать create table MyTable1 as select * from "указанное представление", а в запросе прописать вместо представления созданную таблицу - запрос работает быстро. Созданная таблица на несколько миллионов строк, без индексов.
...
Рейтинг: 0 / 0
13.06.2019, 11:38
    #39826039
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
reaqueЗапрос выдает 0 строк, так задумано, т.е. вставлять по идее нечего.
Тут на форуме прочитал, что когда идет DML операция (в данном случае INSERT), то хинт в подзапросе не работает.

Еще уточнение: таблица1 это не таблица, а представление.
Если сделать create table MyTable1 as select * from "указанное представление", а в запросе прописать вместо представления созданную таблицу - запрос работает быстро. Созданная таблица на несколько миллионов строк, без индексов.
Попробуйте, напишите например функцию, которая будет возвращать коллекцию элементов, если элементов > 0, то сделать вставку из коллекции. Пусть запрос делается "там" внутри функции, а вставка, если есть что вставлять, "здесь"
...
Рейтинг: 0 / 0
13.06.2019, 12:50
    #39826092
reaque
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
Еще уточнение:
если вместо представления указать текст запроса представления - все работает быстро.
...
Рейтинг: 0 / 0
13.06.2019, 13:03
    #39826114
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
reaque,

https://www.freelists.org/post/oracle-l/plan-shows-insert-into-remote-table-using-all-remote-selects,1
Jonatahn LewisYou can't.

The query that supplies data to the insert has to be executed by the database
where the DML is taking place - which means the remote (to you) database. The
plan you see is the plan from the perspective of the remote (to you) database,
which is why it reports the table which you think of as local as being remote
(to the executing session).

If you want a plan which does ALL the work at the local (to you) database you
need to create a local (to you) view for the query (possibly with a no_merge
hint) and the do "insert into remote_table select * from local_view". You
might, however, manage to get away with creating a set of hints on the query
that force a nested loop join all the way through every table, then the plan
would be (just like operation 22 in the current plan) just "REMOTE", with the
join query being reported as the remote SQL.

Alternatively you could create a pipelined function that returns the data you
want and "insert ... select from pipelined function"
https://jonathanlewis.wordpress.com/2010/10/07/distributed-pipelines/


Regards
Jonathan Lewis
...
Рейтинг: 0 / 0
14.06.2019, 14:15
    #39826607
reaque
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
Решение: создали представление на локальной базе, в тексте запроса которого идет обращение к таблицам удаленной БД. Пока работает.
...
Рейтинг: 0 / 0
14.06.2019, 14:56
    #39826629
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблицам из разных БД
reaqueесли вместо представления указать текст запроса представления - все работает быстро.
reaqueРешение: создали представление на локальной базе,
ну... что сказать...
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запрос к таблицам из разных БД / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]