前言:生产环境要从oracle数据库迁移到达梦数据库,先在测试环境做了验证,结果发现达梦对oracle的兼容性实在太好了。oracle数据库在安装时没有做特殊配置,达梦数据库的配置修改的也很少,迁移很顺利。
一、代码修改问题记录:
1、oracle数据库的CLOB类型使用oracle JDBC 查询出来为CLOB类型,达梦数据库的CLOB类型使用达梦JDBC查询出来的类型为DmdbNClob,在代码中对数据库查询出的数据转换类型时会报类型转换错误,通过修改代码将强转的对象类型由CLOB改为DmdbNClob。
2、oracle数据库的count()函数使用oracle JDBC 查询出来为BigDecimal类型,达梦数据库的count()函数使用达梦JDBC查询出来的类型为Long,在代码中对数据库查询出的数据转换类型时会报类型转换错误,通过修改代码将强转的对象类型由BigDecimal改为Long。
3、在项目源代码书写的sql语句中使用了单词“percent”作为字段别名,“percent”为达梦数据库的关键字,因此会报sql错误。通过给关键字“percent”加双引号的方式解决报错问题。
4.代码中使用sql语句使用foreach拼接800个union all,达梦数据库报“嵌套层次太深”错误,通过咨询达梦数据库技术支持。修改以下参数解决此问题
EXPR_N_LEVEL(表达式最大嵌套层数,修改为800)
N_PARSE_LEVEL(表示对象 PROC、VIEW、PKG、CLASS 的最大解析层次,修改为800)
MAX_SQL_LEVEL(指定 DM 虚拟机允许的最大栈帧数,修改为800)
5、mysql迁移到达梦,因在mysql中使用了主键自增的设计,迁移到大梦后不兼容报错。通过修改代码不使用主键id自增解决此问题。
二、特别要求
使用迁移工具dts迁移时达梦数据库的模式名应与Oracle数据库的用户名一致,否则在部分对象中写死oracle用户名时会迁移失败
三、数据库配置记录:
1、数据库初始化参数(实例初始化时设置后续不能修改):
#数据页大小(8),可选值:4、8、16、32,单位:K
PAGE_SIZE=32 (16K以上)
字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
CHARSET=0
#大小敏感(Y),可选值:Y/N,1/0
CASE_SENSITIVE=1
2、dm.ini参数
#是否兼容其他数据库模式,改为2兼容oracle
COMPATIBLE_MODE=2
#整数相除是否保留小数位,修改为1
CALC_AS_DECIMAL=1
#表达式最大嵌套层数,修改为800
EXPR_N_LEVEL=800
#表示对象 PROC、VIEW、PKG、CLASS 的最大解析层次,修改为800
N_PARSE_LEVEL=800
#指定 DM 虚拟机允许的最大栈帧数,修改为800
MAX_SQL_LEVEL=800
四、参数查看及设置方法
1、查看方法
–统计页大小
select page;
–通过编码格式
select unicode;
–统计大小写敏感参数
select case_sensitive;
–是否兼容其他数据库模式,改为2兼容oracle
select para_name,para_value from v$dm_ini where para_name = ‘COMPATIBLE_MODE’
整数相除是否保留小数位,修改为1
select para_name,para_value from v$dm_ini where para_name = ‘CALC_AS_DECIMAL’
–表达式最大嵌套层数,修改为800
select para_name,para_value from v$dm_ini where para_name = ‘EXPR_N_LEVEL’
–表示对象 PROC、VIEW、PKG、CLASS 的最大解析层次,修改为800
select para_name,para_value from v$dm_ini where para_name = ‘N_PARSE_LEVEL’
–指定 DM 虚拟机允许的最大栈帧数,修改为800
select para_name,para_value from v$dm_ini where para_name = ‘MAX_SQL_LEVEL’
2、参数设置方法:
PAGE_SIZE、CHARSET、CASE_SENSITIVE初始化数据库实例时通过./dminit设置
sp_set_para_value(2,‘COMPATIBLE_MODE’,2)
sp_set_para_value(2,‘CALC_AS_DECIMAL’,1)
sp_set_para_value(1,‘EXPR_N_LEVEL’,800)
sp_set_para_value(1,‘N_PARSE_LEVEL’,800)
sp_set_para_value(1,‘MAX_SQL_LEVEL’,800)
文章
阅读量
获赞