注册
Oracle到达梦的数据迁移实战记录
专栏/培训园地/ 文章详情 /

Oracle到达梦的数据迁移实战记录

Momo 2024/09/03 975 0 0
摘要

一、迁移背景说明

需求:将指定的Oracle数据库用户及数据迁移到达梦数据库中
迁移工具:DTS
源库:Oracle,字符集为UTF-8
目标库:达梦,字符集为UTF-8

二、迁移顺序说明

迁移准备:在目标库创建迁移用户/表空间并授权、统计要迁移的对象数量
迁移第一阶段:表定义、注释和数据
迁移第二阶段:索引、主键、约束
迁移第三阶段:视图、存储过程
迁移最后阶段:收集统计信息

三、迁移前准备工作

3.1 确认数据库的字符集

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

select userenv('language') from dual;

3.2 统计对象数量

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

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

3.3 创建迁移用户并授权相应的角色

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

角色定义
PUBLIC:具有对当前模式下对象的 DML 数据操作权限。
RESOURCE:具有在当前模式下对象定义权限(创建表、索引、视图等);
SOI:具有查询 sys 开头系统表的权限;
VTI:具有查询 v$开头的动态视图权限(动态视图记录在v$dynamic_tables,如果没有此权限,D
M 管理工具上会报没有查询 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;

四、迁移表数据

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

cd /home/dmdba/dmdbms/tool
./dts

图片.png

4.2 新建工程

图片.png

4.3 填写工程名称

图片.png

4.4 新建迁移任务

图片.png

4.5 填写迁移任务名称

图片.png

4.6 选择迁移方式

图片.png
图片.png

4.7 输入源端Oracle数据库信息

主机名需要填写具体的IP地址
图片.png

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

图片.png

4.9 配置迁移方式及策略

这里可以调整迁移任务最大并发数、提高迁移的效率
图片.png

4.10 指定迁移对象为表

图片.png
按需要勾选要迁移的表,之后点击转换
图片.png
这里勾选表定义、注释和数据,适当的调大
图片.png

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

这一步的目的是为了临时调大排序缓冲区和临时表空间的大小,从而提高迁移索引约束时的效率,在数据库创建索引时会占用较多的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;

六、迁移约束和索引

选择迁移索引时,可以勾选并行创建索引
图片.png

七、迁移其他非表对象

图片.png

八、收集统计信息

--小表按整张表收集
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 ';

九、迁移完成后调整参数

disql sysdba/SYSDBA
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]

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

处理过程:
确认源端Oracle数据库的数据库版本后,指定适合的驱动,之后truncate目标端已经导入的表,重新进行表数据的迁移
图片.png

报错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]不支持统计信息

报错信息如下:
图片.png

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

处理过程:
确认报错字段的定义类型是否为大字段或者虚拟列
图片.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服