主页 > 知识库 > 数据库 > Oracle >

任重道远迁移路之DB2到Oracle

来源:网络 作者:网络 发表于:2012-06-25 08:51  点击:
1、在db2数据库中存在表tbtest,有下列类型字段 列名 db2 oracle c1 char(10) char(10) c2 varchar(10) varchar2(10) c3 integer number(10) c4 date date c5 timestamp timestamp c6 decimal(24,2) number(24,2) c7 decimal(12,7) number(12,7) 2、创建从db2
1、在db2数据库中存在表tbtest,有下列类型字段
列名 db2 oracle
c1 char(10) char(10)
c2 varchar(10) varchar2(10)
c3 integer number(10)
c4 date date
c5 timestamp timestamp
c6 decimal(24,2) number(24,2)
c7 decimal(12,7) number(12,7)


2、创建从db2中导出数据
双击代码全选
1
2
<pre class="brush:sql;toolbar:false;">export tbtest.del of del messages tbtest.msg select * from tbtest;</pre><p>
</p>
 
注:在tbtest.msg文件中有警告信息,一般是一条记录变成了多行,需要手工改改。
3、创建oracle数据导入控制文件tbtest.ctl,内容如下:
双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<pre class="brush:sql;toolbar:false;">load data
infile ‘tbtest.del’
truncate
into table tbtest
fields terminated by ‘,’ optionally enclosed by ‘”‘
trailing nullcols
(
c1,
c2,
c3,
c4 date ‘yyyymmdd’,
c5 timestamp ‘yyyy-mm-dd hh24.mi.ss.xff’,
c6 “to_number(:c6,’9999999999999999999999.99′)”,
c7 “to_number(:c7,’99999.9999999′)”
)</pre><p>
</p>
 
注:如果是追加数据,将truncate改为append即可。
4、导入数据

双击代码全选
1
sqlldr shen/shen@db control=tbtest.ctl log=tbtest.log
 

其次:
1.利用DB2的db2look命令可以直接导出数据库信息,包括:表结构,视图,函数,存储过程(唯一遗憾的是将DB2系统表信息等也导了出来,郁闷!)。
2.将创建表的语句单独存在一个文件,将Varchar用Varchar2代替。(当然表中字段没有大数据类型)。
3.在Oracle sql developer中执行建表语句。
4.利用PB将表逐个导入到Oracle中,数据迁移完成。(数据表很多,导了一天才导完,方法很笨吧?)。
建议:
1.如果是少的数据表,可以用Kettle工具,这个工具可以将源表结构自动转化为目标表结构。
2.数据导出、导入最好利用PB中完成。起初,我将表导成Excel,利用Oracle工具导入,总是出现许多错误。而且对于Date类型数据,很难处理,但PB可以自动转化。
3.Kettle工具功能很强大,但没有时间来研究,它可能能完成很多功能。
4.PowerBuilder,PowerDesign在数据库更改、表变动或数据迁移有许多特性。

    有帮助
    (0)
    0%
    没帮助
    (0)
    0%