| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Oracle迁移达梦实践过程 -> 正文阅读 |
|
[大数据]Oracle迁移达梦实践过程 |
目录 ???????4.2.比对达梦数据库与oracle数据库差异 前言现在越来越多的项目从Oracle迁移到DM数据库来,总结一下迁移过程,常见问题处理方式。希望可以帮助到各位伙伴。 1.统计oracle数据库信息1.1.统计基本信息
1.2.统计数据库中对象及表数量
2.迁移准备2.1.注意事项数据库参数检查:
???????2.2.检查基本参数
???????2.3.检查兼容ORACLE参数
???????2.4.检查用户及表空间
生产环境建议创建30G一个数据文件,关闭自动扩展
创建用户并授权
3.DTS迁移过程注意:根据业务数据量,注意迁移方式 1.选择合理的迁移顺序:先迁移序列、再迁移表、最后迁移视图 2.对于数据量大的表单独迁移 3.对于分区表数据量没有超过1亿建议迁移成普通表,在分区列上创建索引 4.对于大字段较多的表,需要修改批量的行数,以免造成迁移工具内存溢出。 ???????3.1.新建迁移任务? 选择oracle==》达梦,选择下一步 ?配置oracle连接 ?配置目的端参数 3.2.迁移表结构及序列选择要迁移的表 ? 选择转换只选择表定义与表及字段注释,如下图 ? 然后勾选应用当前选项到其他同类对象后,会弹出下图 确定往下一步,下一步执行 表结构迁移完 ????????3.3.迁移表数据全选后然后点转换,如下图 ??????? ? ??????? 注意:大字段读写取行数,可以适当开启并行。不开快速装载 ???????3.4.迁移索引选择对应的约束 点完成,开始迁移 ???????? ? 如下索引迁移完成 ?3.5.迁移视图、物化视图等? ?迁移完成 4.核对数据库迁移结果
|
select object_type,count(*) from all_objects where owner='ITPUX' group by object_type; |
b. 统计指定用户下所有的对象,并记录到新的记录表中
create table dm_objects(obj_owner varchar(100),obj_name varchar(100),obj_type varchar(50)); insert into dm_objects select owner,object_name,object_type from all_objects where owner='ITPUX'; |
c. 统计每个表的数据量到表数据记录表(使用DISQL运行)
create table dm_tables(tab_owner varchar(100),tab_name varchar(100),tab_count int); begin ??????? for rec in ??????? ( ??????????????? select ??????????????????????? owner, ??????????????????????? object_name ??????????????? from ??????????????????????? all_objects ??????????????? where ??????????????????????? owner????? ='ITPUX' ??????????????????? and object_type='TABLE' ??????? ) ??????? loop ??????????????? begin ??????????????????????? execute immediate 'insert into dm_tables select '''|| rec.owner ||''','''|| rec.object_name ||''',count(*) from '|| rec.owner || '.' || rec.object_name; ??????????????? exception ??????????????? when others then ??????????????????????? print rec.owner || '.' || rec.object_name || 'get count error'; ??????????????? end; ??????? end loop; end; select * from dm_tables; |
a. 比对对象,找出没有迁移的对象
select * from oracle_objects where (obj_owner,obj_name) not in ( select obj_owner,obj_name from dm_objects) --and obj_type='TABLE' |
b. 比对表数据量,找出数据量不相等的表
select a.tab_owner,a.tab_name,a.tab_count-b.tab_count from oracle_tables a, dm_tables b where a.tab_owner=b.tab_owner and a.tab_name=b.tab_name and a.tab_count-b.tab_count<>0 |
更新统计信息,数据核对完成无问题后,应进行一次全库的统计信息更新工作。
统计信息更新脚本示例如下:
DBMS_STATS.GATHER_SCHEMA_STATS( 'ITPUX', FALSE, 'FOR ALL COLUMNS SIZE AUTO'); |
select * from sysjob.sysjobs; |
登录数据库执行以下命令,创建作业系统表 SP_INIT_JOB_SYS(1); 全量备份(每周六 23 点全备):其中有1分钟后的一次性全备调度,执行完成后检查备份是否成功。 call SP_CREATE_JOB('bakfull',1,0,'',0,0,'',0,''); call SP_JOB_CONFIG_START('bakfull'); call SP_ADD_JOB_STEP('bakfull', 'bak1', 6, '01020000/dmbak', 0, 0, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('bakfull', 'std1', 1, 2, 1, 64, 0, '23:00:00', NULL, '2021-11-01 21:17:22', NULL, ''); call SP_ADD_JOB_SCHEDULE('bakfull', 'once', 1, 0, 0, 0, 0, NULL, NULL, sysdate+1/1440, NULL, ''); call SP_JOB_CONFIG_COMMIT('bakfull'); 增量备份(每周除周六外每天 23 点增量备份): call SP_CREATE_JOB('bakincr',1,0,'',0,0,'',0,''); call SP_JOB_CONFIG_START('bakincr'); call SP_ADD_JOB_STEP('bakincr', 'bak2', 6, '41010000/dmbak|/dmbak', 0, 0, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('bakincr', 'std2', 1, 2, 1, 63, 0, '23:00:00', NULL, '2021-11-01 21:19:30', NULL, ''); call SP_JOB_CONFIG_COMMIT('bakincr'); 备份定期删除(每天 23:30 删除 14 天前备份): call SP_CREATE_JOB('delbak',1,0,'',0,0,'',0,''); call SP_JOB_CONFIG_START('delbak'); call SP_ADD_JOB_STEP('delbak','bak1',0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dmdata/dmbak'');call sp_db_bakset_remove_batch(''DISK'',now()-14);', 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('delbak', 'del01', 1, 1, 1, 0, 0, '23:30:00', NULL, '2020-11-02 14:48:41', NULL, ''); call SP_JOB_CONFIG_COMMIT('delbak'); 另外添加自动收集统计信息的任务(每天1点收集全库统计信息) call SP_CREATE_JOB('statistics',1,0,'',0,0,'',0,''); call SP_JOB_CONFIG_START('statistics'); call SP_ADD_JOB_STEP('statistics', 'statistics1', 0, 'begin for rs in (select ''sf_set_SESSION_para_value(''''HAGR_HASH_SIZE'''',(select cast( case when max(table_rowcount(owner,table_name))<=(select max_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') and max(table_rowcount(owner,table_name))>=( select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''')? then max(table_rowcount(owner,table_name)) when max(table_rowcount(owner,table_name))<( select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') then ?(select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') else ?(select max_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') end as bigint) ?from dba_tables where owner=''''''||NAME||''''''));'' sql1,''DBMS_STATS.GATHER_SCHEMA_STATS(''''''||NAME||'''''',100,TRUE,''''FOR ALL COLUMNS SIZE AUTO'''');'' sql2 ?from SYS.SYSOBJECTS where TYPE$=''SCH'' ) loop execute? immediate rs.sql1; execute? immediate rs.sql2; end loop; end;', 0, 0, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('statistics', 'statistics1', 1, 2, 1, 64, 0, '01:00:00', NULL, '2021-06-09 22:54:37', NULL, ''); call SP_JOB_CONFIG_COMMIT('statistics'); |
一般从oracle 迁移到 DM7 的时候,出现字符串截断的一般都是字段中含有中文,出 现这种问题是因为 DM7 初始化的时候选择的字符集是 Unicode (即 utf 8 ),该字符集的 国际标准是一个汉字占 3 个字节,而 oracle 中默认情况下一个汉字占 2 个字节,此时迁移 的时候就会报下面的错误:
解决办法:
????????2.选择 VARCHAR 类型以字符为单位,如图:
????????
????????3.因为前面 2 种都需要重新初始化数据库,第三种不需要重新初始化数据库即可解决,即在 选择迁移方式的时候,选择字符长度隐射关系为 2 ,如下图
DM7在初始化的时候,选择的页大小影响后面表每行数据的长度,表每行的长度之和(普通数据类型)不能超过一页大小,如果超过 1 页大小即报记录超长的错误,如下图:
解决办法:
这种情况是因为表中设置了唯一性约束或者主键约束,但是数据中有重复记录造成的。也有可能是原始库 的约束被禁用了,或者数据重复迁移造成的。
解决办法:
在确定源数据没有问题的情况下,迁移的时候选择删除后再拷贝,如下图: 在迁移界面中,先中要迁移的表,然后点击转换
在弹出的窗口中选择删除后拷贝,如下图:
?
这种问题主要是由外键约束造成的,父表的数据没有迁移,先迁移了子表的数据,错误 如图所示:
解决办法:
迁移的时候先不迁移外键等约束,在选择好要迁移的表时,点击转换,按照下面步骤迁移。
(1)第一次只选择表定义,不选择约束等,如图:
(2)第一次迁移完成后(确保没有错误),第二次只选择数据,如图:
(3)第三步选择约束、索引等,如图:
这个问题一般是因为在迁移视图之前,没有将视图依赖的表迁移过去,如图所示:
严格按照迁移的顺序,先迁移表,然后再迁移视图、存储过程、函数等的顺序迁移即可。
该问题原因是将mysql迁移到达梦数据库时,mysql中存在0000-00-00 00:00:00这种格式的存在,在达梦数据库中这种格式会报错。
解决办法:
错误消息: 列[RECOMMEND]长度超出定义,错误号:?? -6169
解决办法:
修改列字段映射为2之后重新迁移正常
?? ????????
24小时免费服务热线:400 991 6599
达梦技术社区:https://eco.dameng.com
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/22 10:30:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |