记录一次使用达梦导入(dimp)导出(dexp)工具进行数据库迁移的操作。
在初始化数据库前需要查询旧服务器设置,避免出现数据导出失败的问题,下面是我遇到的一些影响数据导入的参数设置。
select CASE_SENSITIVE(); --是否大小写敏感,1:敏感,0:不敏感select SF_GET_PAGE_SIZE(); --每条记录总长度不能大于PAGE_SIZE大小的一半
select SF_GET_EXTENT_SIZE(); --每次分配新的段空间时连续的页数
select * from V$PARAMETER where name = 'LENGTH_IN_CHAR'; --是否使用字符为单位
SELECT * FROM V$PARAMETER WHERE NAME = 'GLOBAL_CHARSET'; --字符集
先切换到 dmdba 用户然后根据我数据库查询到的值执行数据库初始化操作
./dminit PATH=/data/dmdbms/data/ CASE_SENSITIVE=N PAGE_SIZE=16 EXTENT_SIZE=16 CHARSET=1
然后使用 root 账户执行下面安装服务的脚本
./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /data/dmdbms/data/DAMENG/dm.ini
systemctl start DmServiceDMSERVER
systemctl enable DmServiceDMSERVER
./dm_service_installer.sh -t dmap
systemctl start DmAPService
systemctl enable DmAPService
服务正常启动后进入 ./disql 创建源数据中相对应的用户和表空间
CREATE TABLESPACE "TEST" DATAFILE '/data/dmdbms/data/DAMENG/TEST.DBF' SIZE 128 AUTOEXTEND ON NEXT 100 MAXSIZE UNLIMITED;
CREATE USER "TEST" IDENTIFIED BY "testpassword" DEFAULT TABLESPACE "TEST" TEMPORARY TABLESPACE "TEMP";
最后使用导出的dmp文件进行还原
./dimp SYSDBA DIRECTORY=/data/bak/test/ file=imp_exp.dmp log=exp.log
执行完毕后可以查询 /data/bak/test/exp.log 中的 Error 来判断是否有执行失败的部分。
导入过程中遇到的问题:
1. 达梦7导出的dump导入到达梦8
除了前面提到的参数会影响到最终导入结果以外还会遇到一些奇怪的问题导致导入失败,建议使用dts(DM数据迁移工具)来升级到高版本数据库。
2. 同版本导入
需要保证导入的数据库与原始数据库的初始化参数一致,尤其是前面提到的参数,具体可以参考dminit的文档来对照排查。