oracle 迁移 大表,一张大表的数据迁移

博主面临一个四千万条记录的堆表迁移任务,由于业务需求和系统限制,不能创建索引。提出了利用主键前六位进行分块迁移的策略,通过存储过程逐个处理游标中的数据并插入新系统。新旧系统表结构不同,部分字段已改名且新增了迁移相关信息。整个迁移过程需通过存储过程完成,新系统无实时业务。
摘要由CSDN通过智能技术生成

本帖最后由 to_be_dba 于 2013-2-1 09:32 编辑

现在有一张四千多万的堆表,(由于业务上很少用,所以没有分区),要通过存储过程将大部分的内容迁移到新系统上。

由于是生产系统,不允许有建索引等操作。

其中主键是A\B\C三列的联合。前导列A基本是唯一的,数据定长,类似06/100000/000000

我的想法是:通过主键的前六位进行截取

首先select distinct  substr(A,1,6) from table_name; 放入游标cur中

然后逐个提取游标中的内容,

select * from table_name where A like cur;(试了一下,这样能用到索引,时间十多分钟,可接受)

在内层循环中每次将数据插入到新系统的表中。

不知道这样的思路是否合理,有没有更好的方法。

感谢各位的回复,某些内容没有说清楚,补充如下:

新系统中表结构:

SQL> desc BS_INTR

Name          Type         Nullable Default Comments

------------- ------------ -------- ------- --------------------------------------------------------------

INTR_SEQ      NUMBER(13)

LAST_ACT_DATE DATE

LAST_ACT_TYP  VARCHAR2(5)

LAST_ACT_USER VARCHAR2(50)

B_CODE        VARCHAR2(2)

CAR           VARCHAR2(4)  Y

DST           VARCHAR2(5)

FBA           VARCHAR2(3)  Y

FBS           VARCHAR2(2)  Y

FBT           VARCHAR2(15)

FFR           VARCHAR2(16) Y

FTD           VARCHAR2(5)  Y

FTD           VARCHAR2(5)  Y

FTN           VARCHAR2(5)  Y

SEQUENCE      NUMBER(3)

NAD           VARCHAR2(5)  Y

NBD           VARCHAR2(5)  Y

ORA           VARCHAR2(5)

RBK           VARCHAR2(2)

SEG           NUMBER(1)

STPO          VARCHAR2(1)

TICKET_SEQ    NUMBER(13)

TRANS_SEQ     NUMBER(13)

BILL_PERIOD   VARCHAR2(6)

旧系统中表结构:

SQL> desc BI_INTR

Name          Type         Nullable Default Comments

------------- ------------ -------- ------- --------

INTR_SALES_NM CHAR(16)

TICKET_SEQ    NUMBER(3)

INTR_NM       NUMBER(3)

U_VERSION     CHAR(1)      Y

INTR_CODE     CHAR(4)      Y

INTR_ORG      VARCHAR2(5)  Y

INTR_DST      VARCHAR2(5)  Y

INTR_STPO     VARCHAR2(1)  Y

INTR_FBT      VARCHAR2(15) Y

INTR_SEG      VARCHAR2(1)  Y

INTR_NBD      VARCHAR2(5)  Y

INTR_NAD      VARCHAR2(5)  Y

INTR_IVC      VARCHAR2(1)  Y

INTR_FTN      VARCHAR2(5)  Y

INTR_CLS      VARCHAR2(2)  Y

INTR_FTD      VARCHAR2(5)  Y

INTR_FTD      VARCHAR2(5)  Y

INTR_FBS      VARCHAR2(2)  Y

INTR_FBA      VARCHAR2(3)  Y

INTR_PRV      VARCHAR2(11) Y

INTR_FFR      VARCHAR2(16) Y

CRE_DATE      DATE         Y

CRE_USR_ID    VARCHAR2(6)  Y

MOD_DATE      DATE         Y

MOD_USR_ID    VARCHAR2(6)  Y

新系统的表结构、列名已经定义好了,以前的列名格式“INTR_XXXX”都已经改为“XXXX”,还加了几个迁移过程中的时间、操作人等信息,其他几列的值未给出,暂时置空。

根据要求,都是需要用存储过程来执行的,这一点我改变不了。

新旧两套系统是在不同的服务器上的。旧表的全部记录,只取部分列插入新系统。新系统无业务,不会立即投入使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值