ORACLE 到 DM 的移植主要有以下几个方面的工作:
1.分析待移植系统,确定移植对象。
2.通过数据迁移工具 DTS 完成常规数据库对象及数据的迁移。
3.通过人工完成 PL/SQL 的移植,只需要做少量的修改即可。
4.移植完成后对移植的结果进行校验,确保移植的完整性和正确性。
5.对应用系统进行移植、测试和优化。
2.1、统计 oracle 数据库基础信息
--统计页大小
select name,value from v$parameter where name ='db_block_size';
--查询编码格式
select * from v$nls_parameters a where a.PARAMETER='NLS_CHARACTERSET';
2.2、oracle 数据中的对象以及表数据量
--根据指定用户统计用户下的各对象类型和数目
select object_type,count(*) from all_objects where
owner='LCZ' group by object_type;
--查看表大小:
select SEGMENT_NAME,(BYTES/1024/1024) MB from dba_segments where owner='LCZ' order by 1;
3.1、选择合适的版本
达梦数据库内部会有定期的版本更新说明和版本发版通知,在进行项目移植
的之前,一定要先根据内部通报情况和自己所在技术团队的讨论,确定一个版本,
尽量以最新版本且无额外另行通知的版本,保证已经出现的问题,在即将移植的
系统中不再出现;
版本优先选择完整安装版本(无完整安装版本的平台例外),避免数据库客
户端和服务器端存在版本不匹配带来的额外工作量,达梦在不同平台的不同版本
上,安装包都会有差异,一定要采用严格匹配的原则,除非得到达梦原厂技术人
员的允许,尽量减少干扰性的问题出现。
3.2、选择合适的初始化参数
初始化库,关键的点在于对初始化参数的设置,本章节明确是从 Oracle 移
植到 DM 数据库,所以具体的初始化参数建议如下:
(1)关于页大小 PAGE_SIZE。Oracle 也叫块大小(block),在 DM 数据
库中,页大小可以为 4KB、8KB、16KB 或者 32KB,从 Oracle 移植到 DM,建
议设置页大小为 8KB, 一旦创建好了数据库,在该库的整个生命周期内,页大
小都不能够改变。除了每个字段的最大长度限制外,每条记录总长度不能大于页
面大小的一半。如果系统中存在或者以后可能存在含有较长的字符串类型的表,
建议该参数设置为 16 或者 32。页大小设置越大,最后数据文件的物理大小就会
越大,系统运行时,每次从磁盘调入内存的数据单位也就越大,所以此处要慎重。
(2)关于簇大小 EXTENT_SIZE。数据文件使用的簇大小,即每次分配新
的段空间时连续的页数,只能是 16 页或 32 页,缺省使用 16 页,从 ORACLE 移
植到 DM 使用默认值就可。
(3)关于大小写敏感 CASE_SENSITIVE。DM 为了兼容不同的数据库,在
初始化数据库的时候有一个参数字符串比较大小写敏感,用于确定数据库对象及
数据是否区分大小写, 默认为区分,不可更改。建议 MYSQL 和 SQLSERVER
迁移过来的系统,使用大小写不敏感, ORACLE 迁移过来的系统,使用大小写
敏感,以便和原来系统匹配。
(4)关于字符集 CHARSET。建议采用默认值 GB18030,如果需要国际字符可以采用 Unicode,GB18030 数字字母占 1 个字节,普通汉字占 2 个字节,部
分繁体及少数民族文字占 4 字节,Unicode 在达梦中采用 UTF-8 编码格式,欧洲的字母字符占 1 到 2 个字节, 亚洲的大部分字符占 3 个字节,附加字符为 4 个字节。如果只存储中文和字母数字,一般来说 GB18030 更节省空间一些。
(5)BLANK_PAD_MODE 空格填充模式,默认是 0,从 Oracle 移植要设置
为 1。
初始化DM示例:
dminit path=/dm8/ddata PAGE_SIZE=8 EXTENT_SIZE=16 CASE_SENSITIVE=y CHARSET=0 DB_NAME=DTSDB INSTANCE_NAME=DMDTSSERVER PORT_NUM=5237 BLANK_PAD_MODE=1
3.3、合理配置 INI 参数
DM 的 INI 参数文件中针对从 ORACLE 移植到 DM,有几个专门的参数,
这里将详细介绍。
在 INI 参数的 compatibility 部分,还有其它的一些参数,在涉及到之前,尽
量保持默认值,在移植准备的环节,先只调整这个参数就可以了,其它参数,在
移植过程中,遇到了,再具体分析。
开启oracle兼容参数:
SQL>SP_SET_PARA_VALUE(2,'COMPATIBLE_MODE',2);
3.4、创建用户和表空间
从 Oracle 移植到 DM,要求必须创建新的用户和表空间,不要把数据迁移到
系统管理员 SYSDBA 用户下和 MAIN 表空间下。
首先需要分析本次移植 Oracle 源库需要移植的是哪一个或者哪几个用户的
数据,然后分别创建这些需要移植的用户和对应的表空间;大多数情况下,我们
需要移植的 ORACLE 实例中可能存在有大量的用户,并不是所有的用户对象都
是需要我们移植的,所以在移植准备阶段,一定要和相关技术负责人员沟通明确
清楚。
3.5、根据Oracle端用户权限进行授权
Oracle:select * from dba_role_privs where grantee='LCZ';
DM:grant RESOURCE,public,DBA to LCZ;
(1)选择合理的迁移顺序:先迁移序列、再迁移表、最后迁移视图、函数、存储过程、触发器等。 (最后一部分可一起迁移)
(2)对于数据量大的表单独迁移。
(3)对于分区表如果数据量没有超过 1 亿建议迁移成普通表,在分区列上 创建索引。
(4)对于大字段较多的表,需要修改批量的行数,以免造成迁移工具内存溢出。
(5)数据量较大时,可开启快速装载
5.1、DTS迁移工具
(1)点击按钮创建新的工程,输入工程名和工程描述,点击【确定】,即可创建工程,如下图所示:
(2)右键选择【新建迁移】,输入迁移名称和迁移描述,即可创建迁移,如下图所示:
(3)点击【下一步】,选择要迁移的方式,以 Oracle 迁移到 DM 数据库为例,如下图所示:
(4)点击下一步,输入数据源(Oracle 数据库)的信息:主机名 (IP) 、端口,服务名(Oracle 默认服务名 ORCL),角色(默认),用户名和口令,如下图所示:
要确认数据库信息正确,保持开启状态,Oracle 监听已启动。
此步骤可能会出现连接问题:ORACLE 12C 使用默认方式连接不到需要迁移的库
【问题描述】:
ORACLE 12C 后多出一个新特性多容器,此时迁移数据时使用默认的方式迁移会导致连接不到需要迁移的库。
【问题解决】:
在迁移时不再使用默认方式,需要指定驱动和 URL
驱动路径:选择与数据库版本相对应的驱动
URL:使用服务名的方式登录 @ip 地址:端口号/服务名
(5)输入DM端链接信息
6、选择迁移选项
5.2、迁移表定义
(1)选择需要迁移的模式
(2)选择只迁移表定义
5.3、迁移表数据
勾选数据,修改普通表一次扫描读取行数和提交行数
设置主键冲突处理,设置导入导出并发数
修改大字段表一次扫描读取行数和提交行数
5.4、 迁移索引和约束
6.1、统计达梦数据基础信息
--统计页大小
select page;
--通过编码格式
select unicode;
--统计大小写敏感参数
select case_sensitive
6.2、统计达梦数据中的对象以及表数据量
--根据指定用户统计用户下的各对象类型和数目
select owner,object_type,count(object_name) from dba_objects where owner='LCZ' group by owner,object_type order by 3;
--数据量
select owner,segment_name,(bytes/1024/1024) MB from dba_segments where owner='LCZ' and segment_type='TABLE';
6.3、统计Oracle对象及数据量
select owner,object_type,count(object_name) from dba_objects where owner='LCZ' group by owner,object_type order by 3;
select owner,segment_name,(bytes/1024/1024) MB from dba_segments where owner='LCZ' and segment_type='TABLE';
6.4、DTS迁移工具对比
(1)创建dts对比任务:
(2)指定模式
(3)添加目的
(4)审阅对比任务
(5)查看对比报告
7.1、更新统计信息
迁移完整的库建议按照库模式更新统计信息,凡是涉及到迁移数据的及时进行更新统计信息的操作。
--收集指定用户下所有表所有列的统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS('username',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
--收集指定用户下所有索引的统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS('usename',1.0,TRUE,'FOR ALL INDEXED SIZE AUTO');
--或 收集单个索引统计信息:
DBMS_STATS.GATHER_INDEX_STATS('username','IDX_T2_X');
--收集指定用户下某表统计信息:
DBMS_STATS.GATHER_TABLE_STATS('username','table_name',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
--收集某表某列的统计信息:
STAT 100 ON table_name(column_name);
注意:统计信息收集过程中将对数据库性能造成一定影响,避免在业务高峰期收集统计信息。
除了手动命名收集统计信息,也可登录管理工具进行统计信息收集。
7.2、数据备份
在对数据更新完统计信息后,在数据量不大,磁盘空间足够的情况下应进行
一次数据备份工作。数据备份有两种方式:正常停止数据库后,拷贝备份 data 文
件夹;或者开启归档日志后,进行物理备份。
更多相关资料请参考达梦云适配技术社区
达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台