0
点赞
收藏
分享

微信扫一扫

ORACLE11G向DM8数据库迁移测试

mafa1993 2022-04-30 阅读 46
数据库

数据库部署

关于DM数据库安装部署的详细内容,可以参考《DM_Install_zh.pdf》。

创建操作系统用户

达梦数据库的运行需要使用专用的dmdba用户,因此需要创建相关用户。

groupadd dinstall

useradd -g dinstall -m dmdba

DM数据库

​​​​​​

运行/DMInstall.bin -i

检查操作系统限制

运行 ulimit -a 进行查询。修改open files为 65536 以上或 unlimited(无限制)。

如果用户需要为当前安装用户更改 ulimit 的资源限制,请修改文件 /etc/security/limits.conf

初始化数据库实例

运行以下命令初始化数据库实例(页大小32K,redo大小2048MB,开启归档):

   cd /db/dmdbms/bin

   ./dminit path=/db/dmdata/ PAGE_SIZE=32 LOG_SIZE=2048 ARCH_FLAG=1

修改数据库参数

执行命令vi /db/dmdata/DAMENG/dm.ini,并修改以下参数:

参数名称

取值

备注

BUFFER

3000

用于缓存数据页,一般配置为操作系统物理内存的60%~80%

MAX_BUFFER

3000

用于控制系统缓冲区的上限,一般配置为和BUFFER参数相等

CALC_AS_DECIMAL

1

1:表示整数类型的除法全部转换为DEC(0,0)处理,用于与ORACLE兼容

COMPATIBLE_MODE

4

是否兼容其他数据库模式,2:兼容 ORACLE

RECYCLE

1000

用于缓存排序、分组、临时表等产生的临时数据

DICT_BUF_SIZE

50

字典缓冲区大小,以兆为单位当数据库对象较多建议适当放大

TEMP_SIZE

1000

默认创建的临时表空间大小,以兆为单位。有

效值范围(10~1048576 ),不断的扩充临时表空间也会影响性能,生产系统建议改为1000

CACHE_POOL_SIZE

500

SQL 缓冲池大小,以兆为单位。有效值范围: 32 位平台下为(1~2048);64 位平台下为 (1~67108864)。单位:MB

MAX_SESSION

1000

系统允许同时连接的最大数,同时还受到LICENSE的限制,取二者中较小的值,有效值范围(1~65000 )

MAX_SESSION_STATEMENT

20000

单个会话上允许同时打开的语句句柄最大数,有的应用忘记关闭语句句柄,导致报错,这个参数可以适当放大

VIEW_PULLUP_FLAG

1

是否对视图进行上拉优化,把视图转换为其原

始定义,消除视图。0:不启用;1:启用。一般建议启用。

CNNTB_OPT_FLAG

2

是否使用优化的层次查询执行机制。0:不使用;1:强制使用;2:优化器自动决定是否使用

数据库用户创建(示例)

create user RPMDATA Identified By TAYH2021#;

grant RESOURCE,VTI to  RPMDATA;

在Oracle迁移到达梦的过程中,因为达梦和Oracle均支持SQL92标准,因此可以直接使用DTS进行迁移替代。

数据移植

本次迁移过程中,一共有表1168个,存储过程62个,视图7个,序列27个,函数21个等,因此有一定的迁移代价,经过实际迁移过程之后发现主要的迁移难点是存储过程的迁移,但是均可以在数据库层面进行等价修改之后手动创建​​​​​​​​​​​​​​

Oracle数据库用户对象迁移统计汇总

类型

Oracle数据库

迁移代价

1168

       0个修改

函数

21

0个修改

存储过程

62

30个等价修改(从数据库层面修改)

视图

7

0个修改

序列

27

0个修改

2

0个修改

自定义类型

1

0个修改

使用DTS工具先完成数据表迁移,并手动处理报错对象。​​​​​​​表迁移

对于表数据的迁移,使用DTS工具进行数据迁移,按当前的测试数据量,整个数据库迁移时间耗时4小时,主要个人电脑配置问题,迁移效率较低。

CPU、内存、磁盘IO,网络等硬件的配置,对数据迁移效率影响较大。如果提升硬件配置,迁移效率应该会有进一步提升。

目前存储过程和函数也是通过DTS进行了迁移,存储过程中有部分是在源端Oracle上就无法编译过去,因此到达梦中忽略进行编译,部分进行了等价修改,均是在数据库层面进行了修改,不涉及应用修改;函数部分,同样存在Oracle上无法编译过去的问题,进行了忽略,其他正常迁移;整个迁移过程

​​​​​​​              迁移任务清单

类型

数量

1168

视图

7

序列

27

存储过程

62

函数

21

2

公共同义词

33275

触发器

0

自定义类型

1

备注:

1、清单所列的项包含了很多不属于系统的数据库客体,故部分客体再迁移后报错不做二次处理。

2、表中数据量都不大,因此全部使用了DTS进行迁移。

中有两个包,均由DTS自动迁移完成。

​​​​​​​迁移问题汇总

在本次迁移中,遇到的问题主要有以下几个方面,均为存储过程上的问题。

1、存储过程

在存储过程的迁移中,有部分存储过程无法自动迁移,查看原库中存储过程中

因此,将null去掉之后手工创建存储过程即可完成,大部分无法迁移的存储过程都有这个问题。

2、存储过程编译时报错“不是Group By表达式”

有一个存储过程在编译时报错“不是Group By表达式”,通过修改dm.ini的兼容性参数,兼容MySQL之后即可正常编译。

3、其他问题

存在部分在Oracle上就没有正常编译的存储过程和函数,因此在本次迁移中也忽略创建

根据《程序员手册》中JDBC部分修改相应连接串,如下所示:

// 定义 DM JDBC 驱动串

String jdbcString = "dm.jdbc.driver.DmDriver";

// 定义 DM URL 连接串

String urlString = "jdbc:dm://localhost:5236";

// 定义连接用户名

String userName = "USER_NAME";

// 定义连接用户口令

String password = "USER_PASSWD";

暂时未进行应用移植工作。

​​​​​​​应用修改

因为达梦和Oracle的高度兼容性,JAVA程序迁移,基本只需要修改连接串就可以。

小结

1)数据库对象的兼容性良好;数据库对象基本可以通过DTS工具自动迁移,少部分需要手动修改;在迁移完成之后,后续需要继续与开发配合进行应用移植工作,包括应用连接数据库验证功能、使用压测工具例如LoadRunner进行压力测试等工作。

2)此次迁移工作,共用了1个工作日,其中数据库迁移和问题处理用了1个工作日,迁移过程较为顺利,大部分对象由DTS自动迁移完成。

举报

相关推荐

0 条评论