Oracle数据库数据表与表之间进行数据迁移

话不多说,直接开干(●ˇ∀ˇ●),冲!!!

一.首先,需要参数的分割
一般数据量大于一百万就需要进行数据分割,不然数据库效率会降低


  --进行分库分表-方法
  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 => '任务调度名称');

到此为止,数据抽取就已经正式开始了,还需要注意的就是脚本实体错误的问题了.祝大家好运吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笨笨的大肥牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值