oracle数据迁移-单表(字段不一致)

本文详细描述了如何使用OracleSQL*Loader进行数据迁移,涉及从旧数据库导出数据到txt文件,控制文件的准备,以及sh脚本的编写以处理不同字段类型和自增主键的转换。通过SQL*Loader实现数据导入新表的过程和两个实际场景的应用。
摘要由CSDN通过智能技术生成

1.老数据库数据写出

脚本命名-   export.sql

通过spool将数据写到txt文档中

WHENEVER OSERROR EXIT 9;

set line 10000

set echo off;

set pagesize 0

set feedback off

set heading off

set trimspool on

set termout off

set trimout on;

set trims on

set serveroutput off

set arraysize 5000

set long 100000;

alter session force parallel query parallel 8;

spool export.txt

select CIF_SEQ||'|'||ID_NUM||'|'||NAME||'|'||ADDR||'|'||LAST_TIME FORM PAYEE_NOTE_INFO;

spool off

2.准备控制转换文件

load data

append into table PAYEE_INFO

fields terminated by '|'

trailing nullcols

(

ID,

CIF_SEQ,

AC_NO,

NAME char(600),

ADDR char(800), #varchar2两倍大小

UPDATE_TIME date'YYYYMMMDDHH24MISS',

CREATE_TIME "sysdate"

)

3.准备导入脚本

#!/bin/sh

source ~/.bash_profile

export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK";

filename=export.txt

importData=import.txt

OLD_IFS=$IFS

i=0

IFS="|"

while read line

do

let i++

arr=($line)

str="${i}|${arr[0]}|${arr[1]}|${arr[2]}|${arr[3]}|${arr[4]}"

echo "$str" >>${importData};

done < $filename

rm -rf $filename

file_date=`date +%Y%m%d`

start_time=`date +%Y%m%d%H%M%S`

echo "请输入导入数据源:"

read DATA_SOURCE_CONN_IMPORT

#DATA_SOURCE_CONN_IMPORT=USERNAME/PASSWORD/IP:PORT/SID

echo "-------------connect to $DATA_SOURCE_CONN_IMPORT and import data to oracle start time=$start_time..."

sqlldr ${DATA_SOURCE_CONN_IMPORT} control=importCtl.ctl data=${importData}

end_time=`date +%Y%m%d%H%M%S`

IFS=$OLD_IFS

echo "----------------import finsh--end time $end_time"

4.执行步骤

  通过sqlplus连接远程服务器

sqlplus USERNAME/PASSWORD/IP:PORT/SID

sql< 命令行执行

@export.sql   

输出数据到export.txt文档

回到linux服务器执行

import.sh脚本

sh import.sh

数据写进新的数据库的表里 

5.案例场景

        1. 老项目改造,表数据迁移,新表部分字段类型不一样(如老表lastTime为varchar2类型  新表为timestamp 需要转换) 新表有自增主键,老表没有这个主键,在导入时生成插入新表中。

        2.刚开始准备了一个sh脚本处理导出导入,由于老生产服务器不能执行sh脚本,就改成通过sqlplus登录执行sql脚本。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值