Альтернативы ora_rowscn в оракуле - PullRequest
0 голосов
/ 14 июня 2019

У нас есть сторонняя база данных Oracle, которая периодически запрашивается для копирования некоторых таблиц данных в базу данных Microsoft. Мы заботимся об изменениях данных Oracle и должны синхронизировать их с нашей копией.

Код для копирования опирается на ORA_ROWSCN, чтобы определить, какие строки были изменены, поэтому мы не копируем все содержимое таблицы при каждой синхронизации. Он сравнивает текущий MAX (ORA_ROWSCN) с MAX (ORA_ROWSCN), который был найден при последней синхронизации.

Однако запрос для определения MAX (ORA_ROWSCN) теперь занимает слишком много времени. Это сторонняя база данных, и мы не можем включить журналы аудита.

Есть ли разумная альтернатива этому?

Кроме того, мы видим тайм-аут Oracle в запросе для получения MAX (ORA_ROWSCN). Есть ли что-то, что мы можем сделать, чтобы помочь с этим? У нас максимальный запрос установлен на 4 часа, но оракул все еще не работает примерно через 25 минут.

1 Ответ

0 голосов
/ 14 июня 2019

Настоящий инструмент для сбора изменений (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, как профиль пользователя или план менеджера ресурсов? Брандмауэр? Балансировщик нагрузки? В качестве временной меры, если ничего больше, время ожидания может быть увеличено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...