通过DBMS_scheduler定义job,实现DB多线程并行处理
来源:互联网 发布:淘宝首页店招尺寸 编辑:程序博客网 时间:2024/04/26 05:46
在DB中要实现多个线程并行进行,可以通过dbms_scheduler的这个调度来定义程序,实现异步job,进行同时运行,从而实现并行。 但相比与java中callable接口实现的多线程(通过Future从CompletionService.take()获取返回,例如:
CompletionService mainJob = new ExecutorCompletionService(executorService);
mainJob.submit(calInterestJobWorker);
Future completeJob = mainJob.take();//等待job返回
String jobName = (String)completeJob.get();
),db这个job没法捕获结果状态,需要自行在job中编写结果处理逻辑。
-----------------------------------------------------------------------定义--begin--
--定义PROGRAM
DBMS_SCHEDULER.CREATE_PROGRAM(PROGRAM_NAME => 'PROG_SYN_ILOAN_1',
PROGRAM_TYPE => 'STORED_PROCEDURE',
PROGRAM_ACTION => 'PKG_ICORE_DM_INTERFACE.proc_syn_dm_iloan_yq',
NUMBER_OF_ARGUMENTS => 2,
ENABLED => FALSE,
COMMENTS => NULL);
--【说明:参数从上到下依次分别是:存储过程的名字,存储过程的类型,存储过程要执行的动作(调用哪个存储过程),存储过程的参数个数,存储过程是否能用,存储过程的注释】
--定义参数
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(PROGRAM_NAME => 'PROG_SYN_ILOAN_1',
ARGUMENT_NAME => 'P_STAT_DATE',
ARGUMENT_POSITION => 1,
ARGUMENT_TYPE => 'DATE',
DEFAULT_VALUE => trunc(SYSDATE));
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(PROGRAM_NAME => 'PROG_SYN_ILOAN_1',
ARGUMENT_NAME => 'P_BATCH_NO',
ARGUMENT_POSITION => 2,
ARGUMENT_TYPE => 'INTEGER',
DEFAULT_VALUE => 200);
--【说明:参数从上到下依次分别是:存储过程的名字,存储过程的参数类型(就是被调用的存储过程的参数),参数位置,参数类型,参数默认值】
DBMS_SCHEDULER.ENABLE(NAME => 'PROG_SYN_ILOAN_1');
--【说明:将存储过程设置为可用】
--增加JOB
DBMS_SCHEDULER.CREATE_JOB(job_name => 'JOB_SYN_ILOAN_1',
program_name => 'PROG_SYN_ILOAN_1',
comments => 'PKG_ICORE_DM_INTERFACE.proc_syn_dm_iloan_yq IS RUNNING',
auto_drop => true,
enabled => FALSE);
--【说明:定义job加入刚定义的存储过程,并设置跑完后自动删除,初始化不能用,通过以下程序主动启用】
DBMS_SCHEDULER.ENABLE(NAME => 'JOB_SYN_ILOAN_1');
-----------------------------------------------------------------------定义--end--
-----------------------------------------------------------------------调用--begin--
--1 异步调用YQ-job (v_stat_date和v_batch_no为已定义的date和number)
v_job_name1 := 'JOB_SYN_ILOAN_1';
dbms_scheduler.set_job_argument_value(job_name => v_job_name1,argument_position => 1,argument_value => v_stat_date);
dbms_scheduler.set_job_argument_value(job_name => v_job_name1,argument_position => 2,argument_value => V_BATCH_NO);
DBMS_SCHEDULER.run_job(job_name => v_job_name1,
use_current_session => FALSE);----注意,调用的时候这里的使用当前会话use_current_session设为false,就可以定义多个异步的job,实现多个job并行执行。程序不会等处理结果,而是直接执行后面程序。从而实现多线程处理。
-----------------------------------------------------------------------调用--end--
- 通过DBMS_scheduler定义job,实现DB多线程并行处理
- oracle job,通过DBMS_SCHEDULER.CREATE_JOB来创建,管理也通过DBMS_SCHEDULER这个包来管理
- oracle存储过程通过JOB来实现并行执行
- 多线程 通过GCD实现网络并行
- DBMS_SCHEDULER 带参数JOB
- dbms_scheduler job raise_events dequeue
- 用dbms_scheduler创建job
- Hadoop多Job并行处理
- dbms_scheduler job 的简单管理
- dbms_scheduler job 之外部命令
- 使用DBMS_SCHEDULER创建job参考
- CountDownLatch和join两种方式实现多线程并行处理
- oracle10g dbms_scheduler.create_job 创建job简单实例
- 关于DBMS_SCHEDULER job日志级别LOGGING_LEVEL
- 关于DBMS_SCHEDULER job日志级别LOGGING_LEVEL
- dbms_scheduler包中job(作业)学习
- 分布式处理 和 并行处理系统 定义
- Oracle JOB实现多线程插入
- 【BLE】CC2541之PWM
- POJ 3026 Borg Maze
- Coding Interview Problems II
- 博客访问量超过38万次
- Unity3D学习笔记01
- 通过DBMS_scheduler定义job,实现DB多线程并行处理
- 关于搜狐焦点房产的数据分析
- unity学习笔记2
- 【翻译自mos文章】私有网络所用的协议 与 Oracle RAC
- 【翻译自mos文章】ACFS 使用inode 架构吗?
- Python Scraping Tools
- 这是蒟蒻,勾搭神犇.
- 【翻译自mos文章】Windows平台下的 Oraagent Memory Leak
- 断网小记