Настоящий инструмент для сбора изменений (CDC), такой как Oracle GoldenGate, может быть альтернативой в зависимости от вашего бюджета (он не бесплатный) и открытости третьей стороны для установки его в своей системе. (Вам также необходимо установить его на свой компьютер.) Но, если вы просто время от времени тянете несколько столов, это, вероятно, не лучший вариант. Если бы данные передавались из Oracle в Oracle, вы могли бы потенциально использовать быстрое обновление материализованных представлений, но SQL Server, находящийся в миксе, несколько усложняет ситуацию. Может быть возможным решение для собственного роста, которое использует триггер на исходной таблице для записи вставленных / обновленных / удаленных ключей в дельта-таблицу - но это только в том случае, если третья сторона разрешит это в своей системе.
Чтобы сократить время запроса, вы можете попробовать использовать подсказку /*+PARALLEL(N)*/
, которая использует N параллельных процессов для выполнения запроса. Но учтите, что этот подход потребляет дополнительные ресурсы и может замедлить работу системы Oracle. Вам нужно будет сделать несколько проб и ошибок, чтобы найти оптимальное значение "N", например, DOP или "Степень параллелизма". Будьте осторожны при выборе начального DOP.
Пример:
SELECT /*+PARALLEL(4)*/ MAX(ORA_ROWSCN)
FROM third_party_table;
Наконец, было бы полезно выяснить, что на самом деле вызывает тайм-аут. Что-то в Oracle, как профиль пользователя или план менеджера ресурсов? Брандмауэр? Балансировщик нагрузки? В качестве временной меры, если ничего больше, время ожидания может быть увеличено.