选择正确的批处理作业类型

时间:2018-12-28 14:30:59

标签: oracle jobs job-scheduling

我们正在尝试将部分数据从一个Oracle数据库复制到另一个数据库。一段时间后,我们可能需要做几次相同的工作(取决于复制数据的使用速度)。 我们需要查看4个表,并根据状态转移数据以及这些表之间的关系(例如,在启动客户状态的情况下获取所有客户及其订单)。

这些是要求:

  1. 带来1000行数据(基于状态)
  2. 目标数据库中的数据结构与原始数据库不同
  3. 复制到目标表格的数据的状态将改变。如果只剩下50行并且它们的状态没有更改,则批处理作业必须再次运行并再增加1000行。

我们应该使用哪种技术和批次类型?感谢各种建议。

2 个答案:

答案 0 :(得分:1)

oracle有其自己的Job / Task Scheduler。您可以创建Job并将其存储过程附加到该Job。

任务还可以在完成后以电子邮件状态向您发送电子邮件。

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;
/

Reference

如果表很大,则可以考虑通过expdp/impdp导出导入。但是决定实际上取决于您的数据大小,容错能力,数据复杂性以及源表和目标表结构之间的差异等等。

如果您打算实时输入目标表,并且不想在任何技术上进行投资。我建议您将目标数据库与Database Link连接,并在源表上创建触发器,以便每当发生INSERT / UPDATE / DELETE时,都可以通过DB Link插入目标表。

答案 1 :(得分:1)

这是一个非常开放的问题,答案实际上取决于您要移动的数据类型,计划移动的数据量,移动数据的任何技术/业务/法律要求(例如,如果敏感/机密数据,您不希望创建用于移动数据的纯文本.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"'

数据泵还可以用于在导出/导入数据时进行数据转换,例如通过重新映射架构/表空间并在满足特定条件的行上执行SQL。 Data Pump是一个功能强大的实用程序,具有许多选项,因此请确保研究该实用程序的功能,因为即使您没有为特定活动选择Data Pump,它也可能派上用场。

根据您的许可情况,您还可以使用诸如GoldenGate之类的东西将相关数据复制到您选择的另一个数据库中,但这可能对您在此处要完成的工作有些过分。