迁移PostgreSQL到Oracle涉及到两方面工作:表结构的迁移和表数据的迁移。
- 表结构的迁移
表结构的迁移相对简单可以借助ESF Database Migration Toolkit( http://www.easyfrom.net/)进行.。ESF Database Migration Tookit工具是试用版,所以不能通过其迁移数据(它会将所有varchar字段的开头替换为T)。通过ESF Database Migration Toolkit迁移完成后,通过PL/SQL developer的export user objects得到创建表结构的语句。
- 表数据的迁移
数据迁移有2种方式:postgreSQL导出insert语句然后执行语句导入或者postgreSQL导出文件然后用oracle的sqlldr方式导入。前者存在clob难以插入以及sql长度限制等问题,推荐后者方式进行数据迁移。
1.Copy命令导出数据文件
copy table1 to 'd:/table1.data' delimiter as '|' null as '';
注意:postgreSQL存在boolean类型导出为t或者f(oracle用int类型1或者2来代替),使用cast函数
Copy (select cast(column as int) from table1 ) to 'd:/table1.data' delimiter as '|' null as '';
批量执行使用sql函数进行
create function exportLiferay(path text) returns void
as
$$
begin
execute 'copy table1 to ''' || path || 'table1_.data'' delimiter as ''|'' null as '''' ';
return;
end;
$$
language plpgsql;
2. 制作sqlldr控制文件
注意:字符集、clob以及时间,日期类型
load data
CHARACTERSET UTF8
into table table1
fields terminated by "|"
optionally enclosed by '"'
trailing nullcols
(
folderid,
groupid,
companyid,
userid,
createdate timestamp"yyyy-mm-dd hh24:mi:ss.ff",
modifieddate timestamp"yyyy-mm-dd hh24:mi:ss.ff",
parentfolderid,
name,
description char(10000)
)
3.执行导入
sqlldr import/import data=table1.data control=table1.ctl log=table1.log readsize=100000000
注意:根据实际情况,调整readsize