Проблема пакетного обновления JDBC

, чтобы поместить \n в двойные кавычки, попробуйте


$LOG = str_replace('\n', "\n", $LOG);
8
задан Kannan Ekanath 29 May 2009 в 09:13
поделиться

5 ответов

Я искал какое-то решение в строке «С базой данных Oracle драйвер, кажется, останавливается при первом ОТКАЗЕ, то есть когда 1000 строк объединены, а сотая не удалась, я хочу, чтобы это продолжалось до 1000-й ряд ". В основном я хотел знать, можно ли это сделать с помощью драйвера Oracle JDBC.

Однако было предложено множество ответов (большинство / все из которых я уже рассмотрел) 1) Отключение ограничений / загрузка данных / удаление ошибочных строк / повторение много раз 2) Сделайте все проверки перед загрузкой данных 3) Уменьшите размер пакета до 50–100.

К сожалению, моя проверка не может быть выполнена перед загрузкой, и установка размера пакета равным 50 или 100 означает, что мне нужно больше времени на выполнение 5 миллионов строк, которые у меня есть (фактически, общее время увеличено до несколько часов вместо 40 минут при размере партии 1000). Я прибегал к сохранению размера пакета в 1000 ПРИНИМАЯ проблему как есть , помещаю код в цикл «while» и выполняю работу, пока мы не заполним все строки.

Как я уже сказал, поскольку нет ПУТИ С ORACLE BATCH JDBC для продолжения после первого сбоя, ответом на этот вопрос будет «НЕВОЗМОЖНО», просто примите ограничения и задокументируйте тот факт, что это инструмент занимает около 40 минут :)

1
ответ дан 5 December 2019 в 19:02
поделиться

You can use a PL/SQL stored procedure using the SAVE EXCEPTIONS clause which will allow you to issue a bulk update and then return those rows which could not be updated. Here is a couple of example links:

http://rwijk.blogspot.com/2007/11/save-exceptions.html

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:8912264456901

3
ответ дан 5 December 2019 в 19:02
поделиться

Вы должны вставить в рабочую таблицу, которая не имеет ограничений, затем удалить или исправить то, что было бы нарушением, и ВСТАВИТЬ ВЫБЕРИТЕ остаток в реальную таблицу одним оператором SQL.

2
ответ дан 5 December 2019 в 19:02
поделиться

Вы можете попробовать следующее: Начните с пакетов по 50 или 100. (Выберите размер, чтобы у них была хорошая вероятность для успешной обработки). Те, которые терпят неудачу, обрабатываются один за другим.

Другая возможность: отключить ограничения, загрузить данные, удалить те строки, которые нарушают ограничения.

1
ответ дан 5 December 2019 в 19:02
поделиться

Я должен сначала проверить, есть ли нарушение ограничения, затем вставить эту запись, если ограничения не нарушены.

1
ответ дан 5 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: