У меня есть две БД, где я использую ссылку БД для подключения к DB2 из Db1.
Я использую JDBC, C3Po jar, oracle 11g. Это пакетное задание выполняется каждый день.
При первом успешном запуске во время команды слияния вставляется около 400 тыс. Записей, во время второго запуска (это ежедневная работа) мы сталкиваемся с проблемами. Я думаю, что проблема из-за запроса слияния? объединение имеет условие, если существует обновление, вставьте в противном случае. скорее всего, он будет перезапускать 400k, которые в основном идентичны (на данный момент), так что это поиск и обновление / вставка вызывают эту проблему?
Вот так выглядит моя логика
method(){
1.select query where DBlink involved, contains Db1 and Db2 tables
2.iterate the result and using batch updates
save (using MERGE) the result from step 1 to a table which is not used in step 1 query.
we are dealing with over 100k records here.
3. stmt.executeBatch();//This is where the sql exception is occurring
closeResultSet(rs);
clearBatch(stmt);
closePreparedStatement(stmt);
closePreparedStatement(pstmt);//select statement
}
В моем коде нет закрытия DBlink. эта выше логика будет работать на 8 (больше или меньше) потоков параллельно с различными входами, каждый из которых имеет свое собственное соединение с БД.
вот мои мысли и сомнения
- я думаю, что каждый поток создаст DBlink
- мне нужно увеличить размер общего опроса, как показано по этой ссылке
здесь
- Если это из-за Dblink, почему я сталкиваюсь с исключением во время
executeBatch (), где нет использования Dblink?
- Я не думаю, что закрытие DBlink будет работать в моем случае. так как эти
работают параллельно, они будут в основном доходить до кода в то же
время, мне нужно изменить конфигурацию, чтобы иметь больше Dblinks?