`

Oracle JOB实现多线程插入

 
阅读更多
--参考之TOM 编程艺术中的DIY并行

--经测试,大数据量的插入,多线程在普通磁盘执行效率反而更慢,不如单insert语句,而在磁盘阵列硬件环境下执行效率有很大的提升。



--创建表,模拟多线程插入(TT3->TT4)
DROP TABLE TT3;
DROP TABLE TT4;
CREATE TABLE TT4 AS SELECT * FROM DBA_OBJECTS WHERE 1=0;
CREATE TABLE TT3 AS SELECT * FROM DBA_OBJECTS;
--数据分批插入参数表
DROP TABLE JOB_PARMS;
CREATE TABLE JOB_PARMS
 ( 
 JOB NUMBER PRIMARY KEY,
 LO_RID INT,
 HI_RID INT
 );
--创建插入的存储过程
CREATE OR REPLACE PROCEDURE PROC_TEST(P_JOB IN NUMBER) IS
 L_REC JOB_PARMS%ROWTYPE;
 BEGIN
 SELECT * INTO L_REC
 FROM JOB_PARMS
 WHERE JOB = P_JOB;
 INSERT INTO TT4
 SELECT A.OWNER,
       A.OBJECT_NAME,
       A.SUBOBJECT_NAME,
       A.OBJECT_ID,
       A.DATA_OBJECT_ID,
       A.OBJECT_TYPE,
       A.CREATED,
       A.LAST_DDL_TIME,
       A.TIMESTAMP,
       A.STATUS,
       A.TEMPORARY,
       A.GENERATED,
       A.SECONDARY
  FROM (SELECT ROWNUM RN, TT3.* FROM TT3 WHERE ROWNUM <= L_REC.HI_RID) A
 WHERE A.RN >= L_REC.LO_RID;
  DELETE FROM JOB_PARMS WHERE JOB = P_JOB;
   COMMIT;
   END;
/
---DIY 并行调度程序块
DECLARE
L_JOB NUMBER;
C_INDEX NUMBER;--插入的数量总数
S_INDEX INT:=0;--插入的开始index
E_INDEX INT:=0;--插入的结束index
CQ_INDEX INT:=20;--循环的次数
NUM_INCREASE INT:=0;--增量累加
V_I INT:=0;--计数器
BEGIN
SELECT COUNT(*) INTO C_INDEX FROM TT3;
NUM_INCREASE:= CEIL(C_INDEX/CQ_INDEX);
WHILE CQ_INDEX > V_I
LOOP
V_I:=V_I+1;
S_INDEX:=1+NUM_INCREASE*(V_I-1);
IF(V_I = 20) THEN--当等于循环次数则修改结束的index
E_INDEX:= C_INDEX;
ELSE 
E_INDEX:=NUM_INCREASE*V_I;
END IF;
DBMS_JOB.SUBMIT( L_JOB, 'PROC_TEST(JOB);');
INSERT INTO JOB_PARMS(JOB, LO_RID, HI_RID)
VALUES ( L_JOB, S_INDEX, E_INDEX );
END LOOP;
END;
/
--输入COMMIT开始执行
COMMIT;

--查看job是否执行完成

SELECT * FROM DBA_JOBS_RUNNING;

 

0
1
分享到:
评论

相关推荐

    Java操作Oracle数据库-多线程.rar

    本教程主要探讨如何在Java中利用多线程技术高效地与Oracle数据库进行交互,从而实现更强大的并发处理能力。通过"Java操作Oracle数据库-多线程.rar"这个压缩包,我们可以学习到以下几个关键知识点: 1. **JDBC连接**...

    Oracle Job的用法

    Oracle Job是Oracle数据库中的一个强大特性,主要用于在特定时间或间隔执行数据库操作,例如数据备份、维护任务或者定期的数据处理。以下是对Oracle Job使用方法和技巧的详细说明: 一、创建Oracle Job Oracle Job...

    Springboot Druid多数据源 多线程

    当我们需要在一个系统中同时处理来自多个不同数据库的数据时,如MySQL和Oracle,就需要实现多数据源的支持。本项目正是以此为目标,结合Spring Boot和Druid,构建了一个能够同时操作两种不同类型数据库的示例。 ...

    java oracle,多线程,综合应用示例

    总的来说,这个"java oracle,多线程,综合应用示例"涵盖了Java编程中的多线程技术、与Oracle数据库的交互,以及可能涉及到的项目管理和开发工具。通过深入学习和实践,开发者不仅可以提升自己的技术水平,还能更好地...

    学习 oracle 多线程写法

    更具客户的需求,编写出客户的sql语句,提供oracle 多线程模板

    oracle job使用详解

    Oracle Job 的使用对于实现定时任务、批处理操作和维护工作至关重要。以下是对 Oracle Job 使用的详细解释: 1. **创建 Job**: 创建 Job 可以通过 `DBMS_JOB.SUBMIT` 存储过程完成。例如,在提供的代码中,创建了...

    导出ORACLE - JOB

    从oracle库中导出自定义的job脚本。

    Oracle JOB 用法小结

    Oracle的JOB功能是一种定时任务调度机制,用于在数据库后台自动执行预定义的PL/SQL代码块或存储过程。以下是对Oracle JOB用法的详细总结: 首先,为了启用JOB队列,需要设置初始化参数`job_queue_processes`。通过...

    oracleJob创建脚本

    ### Oracle Job 创建脚本详解 #### 一、Oracle Job 概述 在Oracle数据库中,Job是一种用于调度定期任务的功能,常被用来自动化执行数据库管理中的各种任务,比如备份、清理临时表空间等。Job主要由`DBMS_JOB`包...

    ORACLE如何停止一个JOB

    ### ORACLE如何停止一个JOB:深入解析与实践 在Oracle数据库管理中,有时我们需要停止正在运行的JOB,这可能是由于各种原因,如发现错误、优化性能或调整资源分配。本文将详细阐述如何在Oracle中查询并停止正在运行...

    Oracle Job定时任务

    Oracle Job 定时任务 Oracle Job 定时任务是 Oracle 数据库中的一种定时执行任务的机制,它允许用户在指定的时间点或每天的某个时间点自行执行任务。 一、查询系统中的 Job 可以通过以下视图查询系统中的 Job: *...

    oracle job实例 测试通过

    从给定的Oracle Job实例测试通过的描述与代码片段中,我们可以提炼出多个关于Oracle数据库管理、编程与作业调度的关键知识点。以下是对这些知识点的详细解释: ### 1. 创建序列(Sequence) 在Oracle数据库中,...

    oracle JOB常见的执行时间定义

    oracle JOB常见的执行时间, 在初学者定义JOB时,对于执行时间往往不知道如何设置. 该文档列举了常见的定义方式.可以由此进行扩展.

    oraclejob例子

    Oracle Job是Oracle数据库中的一个核心特性,用于在预定义的时间执行特定的数据库任务,比如运行SQL脚本、数据备份、维护或性能监控等。Oracle Job的全称是Database Scheduler Job,它通过Oracle Database Scheduler...

    VC多线程操作ORACLE数据库

    本文将深入探讨如何在VC++环境中使用多线程技术来高效地操作Oracle数据库,旨在提供一个详细的知识框架。 首先,我们要了解什么是多线程。多线程是指在一个进程中可以同时执行多个独立的线程,每个线程都有自己的...

    oracle job

    Oracle Job是Oracle数据库中的一种调度工具,用于在指定的时间执行一系列数据库操作,如PL/SQL块、存储过程、包或操作系统命令。Oracle Job是Oracle的DBMS_SCHEDULER或之前版本中的DBMS_JOB包的一部分,它允许数据库...

    Java实现mybatis批量插入数据到Oracle

    本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...

    ORACLE创建JOB脚本

    在描述中提到的"脚本中的循环执行时间为每天晚上9点",这可以通过DBMS_JOB.SUBMIT过程来实现。例如,以下是一个简单的创建每晚9点执行的JOB的脚本示例: ```sql DECLARE v_job_number NUMBER; BEGIN DBMS_JOB....

    Oracle中多表关联批量插入批量更新与批量删除操作

    在Oracle数据库中,进行多表关联的批量插入、批量更新和批量删除操作是常见的数据库管理任务,尤其是在处理大量数据时,这些操作能显著提高效率并减少资源消耗。本文将详细探讨这三个方面,并通过实例代码来展示如何...

    oracle创建job

    Oracle 创建 Job 实现数据库定期任务 Oracle 中创建 Job 是实现数据库定期任务的重要步骤,可以是定期执行存储过程或者简单的 SQL 语句。在 Oracle 中,Job 是一个异步执行的任务,可以根据需要设置执行频率和执行...

Global site tag (gtag.js) - Google Analytics