powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_hs_passthrough.get_value съедает память
9 сообщений из 9, страница 1 из 1
dbms_hs_passthrough.get_value съедает память
    #37827642
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Считываю таблицу из MSSQL используя dbms_hs_passthrough (из-за длинных полей в источнике).
Есть две проблемы:

1. commit приводит к закрытию курсора dbms_hs_passthrough (но тут помогла автономная транзакция).

2. Примерно через миллион итераций dbms_hs_passthrough.fetch_row заканчивается память (ORA-04030). Память отъедается пропорционально количеству просмотренных строк и количеству извлекаемых столбцов (фактически, пропорционально прочитанной площади). К проблеме приводит даже такая конструкция:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
  loop
    res:=dbms_hs_passthrough.fetch_row@mssql(cur);
    exit when res=0;
    dbms_hs_passthrough.get_value@mssql(cur,1,x_1);
    dbms_hs_passthrough.get_value@mssql(cur,2,x_2);
    dbms_hs_passthrough.get_value@mssql(cur,n,x_n);
  end loop;
  ...



Подскажите, как прочитать таблицу, ведь заранее неизвестно, на какие куски её можно порезать чтоб прочитать частями.

10.2.0.1, enterprise, win32
...
Рейтинг: 0 / 0
dbms_hs_passthrough.get_value съедает память
    #37827950
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
причем
Код: plsql
1.
dbms_hs_passthrough.close_cursor

память не очищает.
Очищается память лишь после
Код: plsql
1.
execute immediate 'alter session close database link mssql'
...
Рейтинг: 0 / 0
dbms_hs_passthrough.get_value съедает память
    #37828056
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavaДобрый день.
Считываю таблицу из MSSQL используя dbms_hs_passthrough (из-за длинных полей в источнике).
Есть две проблемы:

1. commit приводит к закрытию курсора dbms_hs_passthrough (но тут помогла автономная транзакция).

2. Примерно через миллион итераций dbms_hs_passthrough.fetch_row заканчивается память (ORA-04030). Память отъедается пропорционально количеству просмотренных строк и количеству извлекаемых столбцов (фактически, пропорционально прочитанной площади). К проблеме приводит даже такая конструкция:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
  loop
    res:=dbms_hs_passthrough.fetch_row@mssql(cur);
    exit when res=0;
    dbms_hs_passthrough.get_value@mssql(cur,1,x_1);
    dbms_hs_passthrough.get_value@mssql(cur,2,x_2);
    dbms_hs_passthrough.get_value@mssql(cur,n,x_n);
  end loop;
  ...



Подскажите, как прочитать таблицу, ведь заранее неизвестно, на какие куски её можно порезать чтоб прочитать частями.

10.2.0.1, enterprise, win32
сервер у вас отсталый. ну а насчет процедур на базе за гетерогенным линком - подумайте над тем, чтобы уйти от построчно-поатрибутной обработки. например, из порции данных (~20000 строк) создаете за линком вью (или темптаблицу) при этом типы преобразуете, чтобы можно было из оракла забрать их запросом..
...
Рейтинг: 0 / 0
dbms_hs_passthrough.get_value съедает память
    #37853495
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

В более свежих версиях ограничения на 30 символов уже нет?
В текущей ситуации. Правильно ли я понимаю, что получив возможность подключения к другим базам, нужно ещё и требовать права на создание объектов (вью или таблиц) ? И создав порцию данных (в 20000 строк), как потом определить то место в исходной таблице, с которого начинать следующий кусок в 20000 строк? (ведь наполнение данными в источнике не известно - есть ли PK, какова равномерность по каждому столбцу и т.п.). Другими словами - есть различные ОДБС источники, с которых можно брать данные (мсскл, терадата и т.п.). Может создать связку из пакета dbms_hs_passthrough и C++ dll - один видит структуру а второй переливает данные?
...
Рейтинг: 0 / 0
dbms_hs_passthrough.get_value съедает память
    #37853502
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или в PIPE запихивать (из dll сделать пайп сервер). Насколько это будет тормозить и нагрузит SGA?
...
Рейтинг: 0 / 0
dbms_hs_passthrough.get_value съедает память
    #37853620
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavaorawish,

В более свежих версиях ограничения на 30 символов уже нет?
В текущей ситуации. Правильно ли я понимаю, что получив возможность подключения к другим базам, нужно ещё и требовать права на создание объектов (вью или таблиц) ? И создав порцию данных (в 20000 строк), как потом определить то место в исходной таблице, с которого начинать следующий кусок в 20000 строк? (ведь наполнение данными в источнике не известно - есть ли PK, какова равномерность по каждому столбцу и т.п.). Другими словами - есть различные ОДБС источники, с которых можно брать данные (мсскл, терадата и т.п.). Может создать связку из пакета dbms_hs_passthrough и C++ dll - один видит структуру а второй переливает данные?
ограничения на длину имен объектов в оракле пока незыблемы - 30 (только не символов, а байт , что бывает гораздо короче).
как делить набор данных на порции - вопрос сугубо творческий. изучайте правила жизни ваших данных и думайте.
права, разумеется, нужны.
...
Рейтинг: 0 / 0
dbms_hs_passthrough.get_value съедает память
    #37854613
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

Благодарю за помощь и участие.
К сожалению, забираемые данные - не мои и их распределение заранее не известно. Кроме того, моя база может столкнуться с ОДБС источником, который не поддерживает view (например - ексель или статический аксес). Получается, что сохранить гибкость и прозрачность доступа к чужим таблицам не получится.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
dbms_hs_passthrough.get_value съедает память
    #39712306
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, можно сказать что вопрос по-прежнему актуален :) Ни у кого идей не появилось?
Сейчас снова уткнулся в эту проблему из-за такой стандартной задачи:

Нужно ежедневно загружать из Терадаты и MSSQL табличку размером 5-10 млн. записей. Структура будет одинаковая. Сейчас обхожусь прямым линком (select t.* from VIEW@MyLink t), но очень неудобно без параметризации - приходится модифицировать view на источнике.

А как вы решаете такую задачу? Чтоб ещё и производительность не страдала.
Пока на ум приходит только вариант extproc с обратным подключением.
Сервер - виндавс.
...
Рейтинг: 0 / 0
dbms_hs_passthrough.get_value съедает память
    #39784760
Фотография vava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отпишусь: перешел на 12.2 и проблема исчезла.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_hs_passthrough.get_value съедает память
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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