|
|
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Проблема такова: На MS SQL развернута база 1С 8.2. Старая учетная система живет на Oracle, по ораклу спец в конфронтации, соотвественно за помощью к нему не обратиться. Да и нужно-то всего пара таблиц. НО Таблица здоровенная (ну, по моим понятиям). Миллионов 100 записей там точно есть. Поэтому попытка создать Recordset проваливается Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Если в запросе указать доп. условие ROWNUM <= 4000000 то все живет и работает. 4кк установлено опытным путем, при пяти миллионах уже падает с мотивацией "Сервер разорвал соединение". Соответственно понятно что его не устраивает либо количество строк в результирующей таблице, либо размер ее же в памяти. Из 15 полей мне нужно 13, поэтому перечислять поля смысла не вижу. Можно конечно запомнить ID последней строки в запросе и в следующем переборе плясать от него, но меня учили что "запрос в цикле выполнять нехорошо" и все естество этому противится. Если какие либо приемлемые варианты решения моей проблемы? В ответах прошу учесть что мое знание Оракла ограничено "запускаем Toad и смотрим нужные таблички и поля". Всем заранее спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 11:57 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
по идее - обход через курсор, но как это будет в реалии выглядеть в ado - хз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 12:01 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
еще вариант - порезать данные порциями во временные таблицы и читать оттуда - если конечно права есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 12:02 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
KembregМожно конечно запомнить ID последней строки в запросе и в следующем переборе плясать от него, но меня учили что "запрос в цикле выполнять нехорошо" и все естество этому противится.Вот именно так и надо сделать, вас учили неправильно. Нужно хорошо подумать, перед написанием запроса в цикле, но иногда писать такие запросы очень хорошо. См. FAQ Постраничная выборка данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 12:40 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Я бы попробовал поиграть со вторым парамтром в CreateDynaset. Например так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 13:33 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Я когда-то воспользовался статьей: http://www.oracle.com/global/ru/oramag/mayjune2007/w_dev_asktom56.html. Очень помогло. В вашем случае рекомендую обратить внимание на часть статьи с заголовком Разбивка на страницы с использованием столбца ROWNUM . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 13:56 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Зачем извращения со страницами? Автору нужны ВСЕ строки, а не какой-то кусочек для отображения в интерфейсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 14:44 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Нет реги, не путайте Автора, читайте всю статью :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 14:50 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Я бы еще с таймаутом запроса поиграл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 14:51 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Kembreg, а что мешает написать так? select count(s.BONDS) from (select * from BONDS as "c" where FULLBONDNUM like 'FB%') s ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 14:58 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Нет региЗачем извращения со страницами? Автору нужны ВСЕ строки, а не какой-то кусочек для отображения в интерфейсе. А если вам нужно скопировать ВЕСЬ ЦЕЛИКОМ файл размером 100 Гб, вы его сначала весь прочитаете в оперативную память размером 2 Гб, а только потом запишете на жесткий диск??? Интересно, как вы это сделаете... Или все-таки будете копировать по кусочкам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 15:15 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Какие интересные у вас представления о работе СУБД Oracle с курсорами. Значит по-вашему результат любого запроса всегда целиком хранится в ОЗУ сервера? То есть даже отсортировать таблицу, которая не помещается в ОЗУ невозможно? А может и клиенту нельзя результат запроса построчно отдавать, а только сразу ВСЕ ЦЕЛИКОМ 100 Гб? Клиент и так получает данные построчно. Какие еще страницы? Зачем? Нам нужны все строки и мы получаем их по одной, точка. Все что нужно сделать это отключить ненужные фичи рекордсета типа кэширования на клиенте и возможности апдейтов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 15:34 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
KuzEvKembreg, а что мешает написать так? select count(s.BONDS) from (select * from BONDS as "c" where FULLBONDNUM like 'FB%') s Мешают слабые знания Оракла вообще и SQL в частности, я завуалированно в первом сообщении дал понять :) Ну то есть у меня в голове таблица примерных соответствий 'SQL vs Язык запросов 1С' есть, а вот полноты картины пока увы. Я впитывать знания люблю, но в условиях жесткого дедлайна обычно выясняется что "впитывать" нужно было вчера, а щас нужно делать. Всех внимательно читаю, ночью натравлю на базу, завтра думаю вопрос закроется 8 это ORADYN_NOCACHE (&H8&), я правильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 17:18 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Нет реги, Я ставил эксперимент с MS SQL Server, один и тот же простой запрос, получал всего 100 000 строк данных, в одном случае с использованием клиентского курсора, в другом случае - серверного. Серверный курсор оказался в 20 раз медленнее. Причем пропорция практически не меняется в зависимости от кэширования данных сервером (1-й или последующие запуски запроса), ни в зависимости от количества данных, 10 000 строк - тоже в 20 раз. Вывод - серверные курсоры для MS SQL Server вызывают значительное падение производительности, их использование допустимо только в самом крайнем случае. Мне такие случаи не встречались. Возможно в Oracle все по-другому, но я бы это как минимум проверил, или вообще не стал бы рисковать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 17:18 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
Kembreg8 это ORADYN_NOCACHE (&H8&), я правильно понял? Да. Пожалуй лучше даже использовать комбинацию ORADYN_NOCACHE и ORADYN_READONLY т. е. 12 (или C в шестнадцатеричной системе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 17:48 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
А что мешает Вам с использованием мастра импорта/экспорт данных перелить таблицу скажем из Oracle в MS SQL? (Выберите базу данных/Tasks/Import data). MS SQL за Вас решит проблему с перекачиванием данных с разбивкой по блокам и транзакциями. А в дальнейшем, хотелось бы знать, зачем под 1С иметь таблицу размером 100 млн. срок. 1С точно не справиться с такой нагрузкой. Я правильно понял, что Вы данные в структуру таблиц 1С закачиваете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2010, 04:09 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
valex13А что мешает Вам с использованием мастра импорта/экспорт данных перелить таблицу скажем из Oracle в MS SQL? (Выберите базу данных/Tasks/Import data). MS SQL за Вас решит проблему с перекачиванием данных с разбивкой по блокам и транзакциями. А в дальнейшем, хотелось бы знать, зачем под 1С иметь таблицу размером 100 млн. срок. 1С точно не справиться с такой нагрузкой. Я правильно понял, что Вы данные в структуру таблиц 1С закачиваете? да справиться со 100 млн. просто в зависимости от задач производимых над таблицей возможно прийдётся использовать прямой доступ ну и из-за архитектуры это будет не сильно просто и дороговато в поддержке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2010, 10:48 |
|
||
|
Проблема с импортом из Oracle
|
|||
|---|---|---|---|
|
#18+
valex13 А в дальнейшем, хотелось бы знать, зачем под 1С иметь таблицу размером 100 млн. срок. 1С точно не справиться с такой нагрузкой. Я правильно понял, что Вы данные в структуру таблиц 1С закачиваете? Ну есть задача от руководства - "Уходим от самописной конфы который писал гений-самоучка" и которую никто кроме этого гения поддерживать не в состоянии на что-то более приземленное. От 100 млн записей осталось 10, что пока вполне приемлемо. Сложных кубов по этой табличке (она одна такая) никто разворачивать не будет, используется она не очень интенсивно, но быть должна именно такой, велосипед изобретать не буду.. Задачу решил таким образом... Внимательно прочитав все что мне тут посоветовали увидел ошибку в запросе (у меня Rownum применялся ДО сортировки) и видоизменил его следующим образом Код: plaintext После этого дважды жамкнул на кнопку "выполнить" и получил свои 7кк записей. Тривиально, но действенно, все отписавшимся спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2010, 21:14 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=36520455&tid=1522568]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 461ms |

| 0 / 0 |
