выбор правильного типа пакетной работы - PullRequest
0 голосов
/ 28 декабря 2018

Мы пытаемся скопировать часть наших данных из одной базы данных Oracle в другую.Возможно, нам придется выполнять одну и ту же работу несколько раз через некоторое время (в зависимости от того, насколько быстро используются скопированные данные).Нам нужно посмотреть на 4 таблицы и перенести данные и отношения между этими таблицами на основе статуса (например, получить всех клиентов и их заказы, где инициируется статус клиента).

Это требования:

  1. Вывести 1000 строк данных (в зависимости от состояния)
  2. Структура данных в целевой базе данных не похожа на исходную базу данных
  3. Состояние скопированных данных вцелевые табели будут меняться.Когда осталось только 50 строк и их статус не изменился, пакетное задание должно быть запущено снова и принести еще 1000 строк.

Какую технологию и тип пакета мы должны использовать?ценим все виды советов.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Это очень открытый вопрос, и ответ на самом деле зависит от того, какой тип данных вы перемещаете, какой объем данных вы планируете перемещать, какие-либо технические / деловые / юридические требования для перемещения данных (например, если есть конфиденциальные данные)./ конфиденциальные данные, вы не хотите создавать незашифрованные CSV-файлы для перемещения данных,) нужно ли сохранять экспортированные данные в течение какого-либо промежутка времени и т. д.

Если вы перемещаете данныеиз одной базы данных Oracle в другую, вы можете начать с просмотра Data Pump .Data Pump - это утилита, которая используется для «очень высокоскоростного перемещения данных и метаданных из одной базы данных в другую».Используя Data Pump, вы можете легко использовать cron и некоторые простые сценарии для планирования автоматического экспорта и импорта соответствующих данных таблицы.Поскольку вы упомянули, что данные должны передаваться на основе Status, вы можете использовать запрос в своей команде Data Pump, чтобы экспортировать только те строки, которые соответствуют вашим критериям, например:

expdp system/password@db10g full=Y directory=TEST_DIR dumpfile=full.dmp logfile=expdp_full.log query='[YOURSCHEMA].[YOURTABLE1]:"WHERE Status=X",[YOURSCHEMA].[YOURTABLE2]:"WHERE status=X"'

Data Pump также можетиспользоваться для преобразования данных при их экспорте / импорте, например, путем переназначения схем / табличных пространств и выполнения SQL для строк, которые удовлетворяют определенным условиям.Data Pump - это мощная утилита с множеством опций, поэтому обязательно изучите, что может сделать утилита, потому что она может пригодиться, даже если вы не выбираете Data Pump для этого конкретного действия.

В зависимости отВ вашей ситуации с лицензированием вы также можете использовать что-то вроде GoldenGate для репликации соответствующих данных в другую базу данных по вашему выбору, но это может быть излишним для того, что вы пытаетесь достичь здесь.

0 голосов
/ 28 декабря 2018

oracle имеет свой собственный планировщик заданий / заданий.Вы можете создать задание и прикрепить к нему хранимую процедуру.

Задача также может отправить вам электронное письмо после завершения со статусом cempletion.

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
   job_name           =>  'update_sales',
   job_type           =>  'STORED_PROCEDURE',
   job_action         =>  'OPS.SALES_PKG.UPDATE_SALES_SUMMARY',
   start_date         =>  '28-APR-08 07.00.00 PM Australia/Sydney',
   repeat_interval    =>  'FREQ=DAILY;INTERVAL=2', /* every other day */
   end_date           =>  '20-NOV-08 07.00.00 PM Australia/Sydney',
   auto_drop          =>   FALSE,
   job_class          =>  'batch_update_jobs',
   comments           =>  'My new job');
END;
/

Для уведомлений по электронной почте

BEGIN
 DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION (
  job_name   =>  'EOD_JOB',
  recipients =>  'jsmith@example.com, rjones@example.com',
  sender     =>  'do_not_reply@example.com',
  subject    =>  'Scheduler Job Notification-%job_owner%.%job_name%-%event_type%',
  body       =>   '%event_type% occurred at %event_timestamp%. %error_message%',
  events     =>  'JOB_FAILED, JOB_BROKEN, JOB_DISABLED, JOB_SCH_LIM_REACHED');
END;
/

Ссылка

Если таблицы огромные, вы можете рассмотреть возможность импорта импорта на expdp/impdp.Но решение действительно зависит от размера ваших данных, отказоустойчивости, сложности данных, разницы между исходной и целевой таблицей и т. Д.

Если вы намереваетесь заполнить вашу целевую таблицу в режиме реального времени, а выне хочу вкладывать деньги в какие-либо технологии.Я могу посоветовать вам подключить вашу целевую базу данных с помощью Database Link и создать триггер на исходной таблице, чтобы при каждом выполнении INSERT / UPDATE / DELETE вы могли вставлять ее в целевую таблицу через DB Link.

...