【达梦数据库】异构数据库迁移实战记录--Oracle迁移达梦篇

目录

一、前言

二、迁移背景说明

三、迁移顺序说明

四、迁移前准备工作

五、迁移表数据

六、迁移索引前的参数调整

 七、迁移约束和索引

八、收集统计信息

 九、迁移完成后调整参数

十、迁移报错以及处理

报错1:违反协议[14,108]

报错2:列[xxx]长度超出定义

 报错3:对象[xxx]不支持统计信息


一、前言

最近做了一些异构数据库迁移方面的工作,在此记录下具体的实施细节以及碰到的问题,方便有需要的小伙伴参考和学习。

二、迁移背景说明

需求:将指定的Oracle数据库用户及数据迁移到达梦数据库中

迁移工具:DTS

源库:Oracle,字符集为UTF-8

目标库:达梦,字符集为UTF-8

三、迁移顺序说明

迁移准备:在目标库创建迁移用户/表空间并授权、统计要迁移的对象数量

迁移第一阶段:表定义、注释和数据

迁移第二阶段:索引、主键、约束

迁移第三阶段:视图、存储过程

迁移最后阶段:收集统计信息

四、迁移前准备工作

4.1 统计对象数量

用于迁移完成后的数据对象对比

select object_type,count(*) from dba_objects where owner='TEST' group by object_type;

4.2 确认数据库的字符集

建议源端和目标端的数据库字符集保持一致,例如在源库字符集是GBK,目标库的字符集是UTF-8的情况下,由于中文字符占据的字节数不同:GB18030字符集是一个中文字符占用2个字节,UTF-8是一个中文字符占用3个字节,进行转字符集的迁移时,就有可能出现某个列的长度超出定义的情况。

 select userenv('language') from dual;

4.3 创建迁移用户并授予相应的角色

以test用户为例,表空间大小参考源库的用户数据量大小

角色定义说明

PUBLIC:具有对当前模式下对象的 DML 数据操作权限。

RESOURCE:具有在当前模式下对象定义权限(创建表、索引、视图等);

SOI:具有查询 sys 开头系统表的权限;

VTI:具有查询 v$开头的动态视图权限(动态视图记录在v$dynamic_tables,如果没有此权限,DM 管理工具上会报没有查询 v$视图权限)

 disql sysdba/SYSDBA

create user TEST identified by "dameng123" ;

create tablespace TEST datafile '/data/dmdata/dmdb/test01.dbf size 10240 autoextend on next 1024 maxsize 51200 ;

alter tablespace "TEST" add datafile ' /data/dmdata/dmdb/test02.dbf' size 10240 autoextend on next 1024 maxsize 51200;

alter user TEST default tablespace TEST;

grant resource,public,soi,vti,svi to TEST;

五、迁移表数据

5.1 打开迁移工具图形化界面

 cd /home/dmdba/dmdbms/tool

./dts

 

5.2  新建工程

 5.3 填写工程名称

 5.4 新建迁移任务

 5.5 填写迁移任务名称

 

 5.6 选择迁移方式

5.7 输入源端Oracle数据库信息

主机名需要填写具体的IP地址

5.8 输入目标端达梦数据库的信息

 5.9 配置迁移方式及策略

可以适当调大迁移任务的并发数,提高迁移的效率

 5.10 指定迁移对象为表

 

 勾选表定义、注释和数据,填写并发数最后勾选应用当前选项到其他同类对象

六、迁移索引前的参数调整

这一步的目的是为了临时调大排序缓冲区和临时表空间的大小,从而提高迁移索引时的效率,在数据库创建索引时会占用较多的temp表空间和内存缓冲区。待迁移完成后再将相关的参数调回原来的值。

SORT_BUF_GLOBAL_SIZE:与服务器的内存有关,根据实际情况适当调大

TEMP_SPACE_LIMIT:与数据磁盘大小有关,根据实际情况适当调大

select * from v$parameter where name in ('SORT_FLAG','SORT_BLK_SIZE','SORT_BUF_SIZE','SORT_BUF_GLOBAL_SIZE');

alter system set 'SORT_BUF_SIZE'=2048 both;

alter system set 'SORT_BLK_SIZE'=50 both;

alter system set 'SORT_BUF_GLOBAL_SIZE'=204800 both;

alter system set 'TEMP_SPACE_LIMIT'=204800 both;

 七、迁移约束和索引

 迁移其他非表对象

八、收集统计信息

 --小表按整张表收集

select last_analyzed,'dbms_stats.gather_table_stats('''||owner||''','''||table_name||''',null,100,TRUE,''FOR ALL COLUMNS SIZE AUTO'');',

         (table_rowcount(owner,table_name)) num

    from dba_tables

   where owner='TEST'

     and last_analyzed is null

order by num;

--大表按列收集

select 'stat 100 on "'||owner||'"."'||table_name||'"("'||column_name||'");' from DBA_TAB_COLUMNS where owner='TEST' and table_name='TEST_table_name ';

 九、迁移完成后调整参数

 alter system set 'SORT_BUF_SIZE'=2 both;

alter system set 'SORT_BLK_SIZE'=1 both;

alter system set 'SORT_BUF_GLOBAL_SIZE'=8000 both;

alter system set 'TEMP_SPACE_LIMIT'=102400 both;

select * from v$parameter where name in ('SORT_FLAG','SORT_BLK_SIZE','SORT_BUF_SIZE','SORT_BUF_GLOBAL_SIZE');

十、迁移报错以及处理

报错1:违反协议[14,108]

 

报错原因:

由于dts工具默认的驱动版本12.1,在迁移版本为11g的Oracle数据库时,就有可能会出现驱动版本不匹配导致有违反协议的报错。

处理过程:

确认源端Oracle数据库的数据库版本后,指定适合的驱动,之后truncate目标端已经导入的表,重新进行表数据的迁移

 

报错2:列[xxx]长度超出定义

报错信息如下:

任务名:从"TEST"."TABLE_NAME"迁移数据到"TEST"."TABLE_NAME"

列[xxx]长度超出定义

报错原因:

这一类问题常见于GBK转UTF8的数据迁移中,中文字符占的字节数不同。

处理过程:

在源端数据库中查出报错的表字段的长度定义,之后在目标端清空表数据,将字段长度调整后再重新进行数据同步

--达梦目标端中执行

--清空表数据

disql sysdba/SYSDBA

truncate table "TEST"."TABLE_NAME";

--调整对应的字段长度 扩大到1.5倍

alter table "TEST"."TABLE_NAME" modify "xxx" VARCHAR2(90);

 报错3:对象[xxx]不支持统计信息

 报错信息如下:

 

报错原因:

这一类问题常见于指定收集统计信息的列是大字段或者虚拟列

处理过程:

确认报错字段的定义类型是否为大字段或者虚拟列

 

 

想要了解更多内容可访问达梦技术社区:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值