1)迁移前的准备工作
kingbase服务器上,新建一个数据库用来接收迁移后的oracle库。
配置一些参数:数据库编码需要和原库一致、日期格式等。参数在kingbase.conf文件中配置。
在kingbase.conf文件末尾添加:
#修改时间格式
datestyle = 'iso, ymd'#as字段别名全转大写
enable_upper_colname=on#字段长度默认为byte
NLS_LENGTH_SEMANTICS = byte#兼容oracle的rowid伪列
default_with_oids = true
启动数据库 :
进入安装路径 server的bin目录 执行命令sys_ctl start -D 数据文件路径
或简便方法:
1.配置环境变量 path 添加server的bin目录
2.KINGBASE_DATA = 数据文件路径
具体可以参考金仓的文档 【kingbase_PDF\PDF\2_应用开发及迁移\1_应用开发及迁移指南\Oracle至KingbaseES迁移最佳实践】
一个坑:kingbase和oracle的实例、数据库、用户、模式 这些概念不太一样。oracle一个实例对应一个数据库,数据库可有多个用户,每个用户对应一个模式。kingbase一个实例可对应多个数据库,数据库下面设用户,用户可对应多个模式。(模式就是对象的集合,相当于一个文件夹)需要注意的是,kingbase中一个用户可以操作实例中的所有对象。
迁移前,需要在kingbase中做的就是新建数据库、用户、模式;以及配置kingbase.conf文件
2)开始迁移
金仓有一个工具ktds专门用于数据库的迁移。填好两边的url就行。
迁移过程中的报错看日志。表和序列等常规对象都迁移成功了。少数函数和视图报错,要再找找原因
3)应用程序中配置kingbase数据库连接
安装目录下有数据库驱动所需的jar包,复制到lib目录下
比如我的程序中用jdbc连接,hibernate框架,在配置文件中写好驱动类、url等
##运行程序后出现的一些问题:
1)字段别名大小写
select password as PW from ...
kingbase默认把别名转为小写pw,而oracle是默认大写
解决方法:
配置文件kingbase.conf 添加参数enable_upper_colname=on 然后重启数据库
2)返回的小数会在末尾补0
对于一个数据类型为number(12,6)的字段 数值9.7 在jdbc连接中会返回9.700000
数据库没有参数可以配置。只好改程序
2)偶发:写入数据库的日期会多出1秒导致查询失败
原因:程序传过来的Date类型有毫秒位,写入数据库时被四舍五入了。而oracle的date类型写入时会自动舍去毫秒位所以没有此问题
##一些记录:
1)迁移后,kingbase数据库的体积比原oracle库要小很多。(原库1400多M,迁移后接近700M)
2)kingbase从pg数据库进化而来,许多命令是一样的。
常用的比如:
清除缓存、重新分析统计信息——vacuum
查看sql执行记录——select * from pg_stat_activity