У меня есть две очень большие таблицы предприятий в базе данных Oracle 10g. Одна таблица хранит историческую информацию другой таблицы. Проблема в том, что я добираюсь до такой степени, что записей слишком много, что мое обновление вставки занимает слишком много времени, и моя сессия убивается губернатором.Лучший способ обновить/вставить в таблицу на основе удаленной таблицы
Вот псевдокод моего процесса обновления:
sqlsel := 'SELECT col1, col2, col3, col4 sysdate
FROM [email protected]_location dpi
WHERE (col1, col2, col3) IN
(
SELECT col1, col2, col3
FROM [email protected]_location
MINUS
SELECT DISTINCT col1, col2, col3
FROM table1 mpc
WHERE facility = '''||load_facility||'''
)';
EXECUTE IMMEDIATE sqlsel BULK COLLECT
INTO table1;
Я попытался MERGE заявление:
MERGE INTO table1 t1
USING (
SELECT col1, col2, col3 FROM [email protected]_location
) t2
ON (
t1.col1 = t2.col1 AND
t1.col2 = t2.col2 AND
t1.col3 = t2.col3
)
WHEN NOT MATCHED THEN
INSERT (t1.col1, t1.col2, t1.col3, t1.update_dttm )
VALUES (t2.col1, t2.col2, t2.col3, sysdate )
Но, кажется, быть confirmed bug на версиях до Oracle 10.2.0.4 на оператор слияния при выполнении слияния с использованием удаленной базы данных. Вероятность получения корпоративного обновления тонкая, есть ли способ дальнейшей оптимизации моего первого запроса или записать его другим способом, чтобы он работал с лучшей эффективностью?
Спасибо.
Спасибо! Посмотрим. Я буду кричать назад, как только у нас появятся наши результаты. – jonasespelita