|
dbms_hs_passthrough.get_value съедает память
|
|||
---|---|---|---|
#18+
Добрый день. Считываю таблицу из 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.
Подскажите, как прочитать таблицу, ведь заранее неизвестно, на какие куски её можно порезать чтоб прочитать частями. 10.2.0.1, enterprise, win32 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 14:11 |
|
dbms_hs_passthrough.get_value съедает память
|
|||
---|---|---|---|
#18+
причем Код: plsql 1.
память не очищает. Очищается память лишь после Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 16:27 |
|
dbms_hs_passthrough.get_value съедает память
|
|||
---|---|---|---|
#18+
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.
Подскажите, как прочитать таблицу, ведь заранее неизвестно, на какие куски её можно порезать чтоб прочитать частями. 10.2.0.1, enterprise, win32 сервер у вас отсталый. ну а насчет процедур на базе за гетерогенным линком - подумайте над тем, чтобы уйти от построчно-поатрибутной обработки. например, из порции данных (~20000 строк) создаете за линком вью (или темптаблицу) при этом типы преобразуете, чтобы можно было из оракла забрать их запросом.. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 17:04 |
|
dbms_hs_passthrough.get_value съедает память
|
|||
---|---|---|---|
#18+
orawish, В более свежих версиях ограничения на 30 символов уже нет? В текущей ситуации. Правильно ли я понимаю, что получив возможность подключения к другим базам, нужно ещё и требовать права на создание объектов (вью или таблиц) ? И создав порцию данных (в 20000 строк), как потом определить то место в исходной таблице, с которого начинать следующий кусок в 20000 строк? (ведь наполнение данными в источнике не известно - есть ли PK, какова равномерность по каждому столбцу и т.п.). Другими словами - есть различные ОДБС источники, с которых можно брать данные (мсскл, терадата и т.п.). Может создать связку из пакета dbms_hs_passthrough и C++ dll - один видит структуру а второй переливает данные? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2012, 16:00 |
|
dbms_hs_passthrough.get_value съедает память
|
|||
---|---|---|---|
#18+
Или в PIPE запихивать (из dll сделать пайп сервер). Насколько это будет тормозить и нагрузит SGA? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2012, 16:05 |
|
dbms_hs_passthrough.get_value съедает память
|
|||
---|---|---|---|
#18+
vavaorawish, В более свежих версиях ограничения на 30 символов уже нет? В текущей ситуации. Правильно ли я понимаю, что получив возможность подключения к другим базам, нужно ещё и требовать права на создание объектов (вью или таблиц) ? И создав порцию данных (в 20000 строк), как потом определить то место в исходной таблице, с которого начинать следующий кусок в 20000 строк? (ведь наполнение данными в источнике не известно - есть ли PK, какова равномерность по каждому столбцу и т.п.). Другими словами - есть различные ОДБС источники, с которых можно брать данные (мсскл, терадата и т.п.). Может создать связку из пакета dbms_hs_passthrough и C++ dll - один видит структуру а второй переливает данные? ограничения на длину имен объектов в оракле пока незыблемы - 30 (только не символов, а байт , что бывает гораздо короче). как делить набор данных на порции - вопрос сугубо творческий. изучайте правила жизни ваших данных и думайте. права, разумеется, нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2012, 17:00 |
|
dbms_hs_passthrough.get_value съедает память
|
|||
---|---|---|---|
#18+
orawish, Благодарю за помощь и участие. К сожалению, забираемые данные - не мои и их распределение заранее не известно. Кроме того, моя база может столкнуться с ОДБС источником, который не поддерживает view (например - ексель или статический аксес). Получается, что сохранить гибкость и прозрачность доступа к чужим таблицам не получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2012, 11:58 |
|
dbms_hs_passthrough.get_value съедает память
|
|||
---|---|---|---|
#18+
Ну, можно сказать что вопрос по-прежнему актуален :) Ни у кого идей не появилось? Сейчас снова уткнулся в эту проблему из-за такой стандартной задачи: Нужно ежедневно загружать из Терадаты и MSSQL табличку размером 5-10 млн. записей. Структура будет одинаковая. Сейчас обхожусь прямым линком (select t.* from VIEW@MyLink t), но очень неудобно без параметризации - приходится модифицировать view на источнике. А как вы решаете такую задачу? Чтоб ещё и производительность не страдала. Пока на ум приходит только вариант extproc с обратным подключением. Сервер - виндавс. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2018, 11:22 |
|
|
start [/forum/topic.php?fid=52&fpage=82&tid=1882714]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 151ms |
0 / 0 |