话不多说,直接开干(●ˇ∀ˇ●),冲!!!
一.首先,需要参数的分割
一般数据量大于一百万就需要进行数据分割,不然数据库效率会降低
--进行分库分表-方法
PROCEDURE P_MOVE_TABLE_NAME (V_PARAMETER_STR VARCHAR2) IS
TYPE T_PARA IS VARRAY(2) OF VARCHAR2(32);
V_PARA T_PARA DEFAULT T_PARA('', '');
V_PARA_LAST VARCHAR2(512) DEFAULT V_PARAMETER_STR;
V_IDX INTEGER;
V_I INTEGER DEFAULT 1;
V_ORG_NO VARCHAR2(16); --供电单位
V_YM VARCHAR2(8);
BEGIN
--参数分割
LOOP
V_IDX := INSTR(V_PARA_LAST, ',');
EXIT WHEN NVL(V_IDX, 0) = 0;
V_PARA(V_I) := SUBSTR(V_PARA_LAST, 1, V_IDX - 1);
V_PARA_LAST := SUBSTR(V_PARA_LAST, V_IDX + 1);
V_I := V_I + 1;
END LOOP;
--return;
V_ORG_NO := V_PARA(1);
V_YM := V_PARA(2);
二.进行sql主体编写,也就是INSERT语句
例如:
INSERT /* + PARALLEL(20) */
INTO TABLE_NAME ( --迁移到的表
*,
*,
*,
ORG_MO,
YM
)
SELECT T.*,
T.*,
T.*,
T.ORG_NO,
T.YM
FROM TABLE_NAME_FROM T --被迁移的表
WHERE T.ORG_NO LIKE V_ORG_NO || '%' --||在oracle中表示拼接的意思
AND V_YM=T.YM;
三.现在查询被迁移的表中的org_no和ym值,通过截取org_no的前几位获取更多的库表
CREATE TABLE ORG_YM_NAME
AS (SELECT DISTINCT SUBSTR(ORG_NO,0,5) AS ORG_NO,YM
FROM TABLE_NAME_FROM
GROUP BY SUBSTR(ORG_NO,0,5),YM);
四.创建job文件
begin
sys.dbms_scheduler.create_job(job_name => 'job_name',
job_type => 'job_type',
job_action => 'job_action',
start_date => to_date('start_date'),--可以自己定时
repeat_interval => 'Freq=Minutely;Interval=7',
end_date => to_date(null),
job_class => 'DEFAULT_JOB_CLASS',
enabled => false,
auto_drop => false,
comments => 'lihongxing任务调度');
end;
五.通过表添加配置文件
配置文件需要参考自家设计的配置表,此处仅作示例:
INSERT INTO CONFIGURATION_TABLE
SELECT
SYS_GUID(), --自动生成的主键
'GP_NAME' GP_NAME,
'TB_NAME' TB_NAME,
'DEAL_TYPE' DEAL_TYPE,
(M.ORG_NO ||','|| M.YM ||',') PARAMETER_STR,
'EXEC_PROC_NAME' EXEC_PROC_NAME,
ROWNUM AS SN,
'exec_stat' exec_stat,
'rel_flag' rel_flag,
'rel_table_name' rel_table_name,
'sc_count' sc_count,
'paramter_flag ' paramter_flag ,
'ownner' ownner
FROM ORG_YM_NAME M ;
六,修改队列状态为待启动,然后找到任务调度进行启动
七.通过脚本启动
sys.dbms_scheduler.enable(name => '任务调度名称');
到此为止,数据抽取就已经正式开始了,还需要注意的就是脚本实体错误的问题了.祝大家好运吧!!!