项目需要,有个数据需要导入,拿到手一开始以为是MysqL,结果是个PostGresql的数据,于是装数据库,但这个也不懂呀,而且本系统用的Oracle,于是得解决迁移转换的问题。
总结下来两个思路。
1、PostgresToOracle
多金的用第一种。
这个软件很好,但是不便宜,129美元,试用期30天,试用状态每次每表只能转1000条
2、sql*LOADER
如果手头不宽裕可以用这种通用方法
我用的Aqua Data Studio 19
1、查询到数据
select * from public.xxx;
这里会有个问题,就是如果数据量太大,比如我这里28万条,会显示内存不足,需要改下软件的默认内存大小
大约这个安装路径下这个文件
D:\Program Files\Aqua Data Studio 19.0 - 64bit\datastudio.ini
修改下vmarg.2大一些,我这里直接调整为4096,
vmarg.1=-Dsun.swing.enableImprovedDragGesture vmarg.2=-Xmx4096M vmarg.3=-XX:MetaspaceSize=512m vmarg.4=-Djsse.enableCBCProtection=false
2、将查询结果保存到本地
用datastudio的保存结果保存到本地
根据postgresql的表结构进行创建oracle表,这里建议所有数字number类型和时间类型统一改成varchar,nvarchar也让我改成了varchar
4、sqlloder导入
sqlloadr配置文件
文件名 xxx.txt,要导入的文件名 D:\xxx.csv
--编写 insert.ctl 文件 load datacharacterset ZHS16GBK -- 表的储存格式 INFILE 'D:\xxx.csv' -- 数据文本路径 Append into table xxx -- 表名 fields terminated by "," -- 以,分割字段(id,xzq,bldid)
执行命令进行导入
sqlldr username/password@127.0.0.1:1521/orcl control=xxx.txt
注意:路径和文件名尽量不要用中文
characterset ZHS16GBK
这行用于避免中文乱码
select * from v$nls_parameters where ParaMETER like '%NLS_CHaraCTERSET%'
中间可能会出现报错,会在当前目录下产生log日志,可以查看报错信息,我这遇到的主要是number类型存了非number数据,让我都给改成varchar就没问题了,后续可以在oracle里进行格式转换。
总之思路就是把复杂问题转换为自己能解决的问题,postgresql我搞不了,oracle那不是手拿把掐。