达梦数据迁移工具DTS使用实践

1、环境描述

在这里插入图片描述

2、DTS概述

1.支持视图、存储过程/函数、包、类、同义词、触发器等对象迁移;
2.支持数据类型的自动映射,编码转换;
3.支持根据条件自定义迁移部分数据;
4.向导式迁移步骤,上手简单;
5.支持 web 端操作、监控;
6.支持迁移评估。

3、DTS典型应用场景

1.支持全量静态数据迁移,无法实现数据增量迁移方式;
2.为保障迁移全量数据的一致性,需要充足的业务系统停机窗口;
3.迁移过程中,源端数据库不能有数据变更以及对象变更。

4、数据库调研

4.1源端Oracle数据库调研

4.1.1迁移对象统计

select a.username, (select count(1) from dba_tables b where b.owner = a.username) table_num,( SELECT COUNT(1) FROM DBA_INDEXES I WHERE UNIQUENESS = 'UNIQUE' AND OWNER =A.USERNAME OR INDEX_NAME NOT LIKE 'SYS_%' AND OWNER =A.USERNAME) index_num,(select count(distinct c.table_name)from dba_tab_partitions cwhere c.table_owner = a.username) part_num,(select count(1)from dba_tab_cols dwhere d.OWNER = a.usernameand d.DATA_TYPE like '%LOB%')  lob_num,(select sum(e.bytes) / 1024 / 1024 / 1024from dba_extents ewhere exists (select 1from dba_lobs fwhere f.owner = a.usernameand f.segment_name = e.segment_name)) lob_space,(select count(1) from dba_views g where g.OWNER = a.username) view_num,(select count(1) from dba_triggers h where h.owner = a.username) trig_num,(select count(DISTINCT I.NAME)from DBA_SOURCE IWHERE I.OWNER = A.usernameAND I.TYPE = 'FUNCTION') fun_num,(select COUNT(1)FROM DBA_SEQUENCES jWHERE j.sequence_owner = A.username) seq_num,(select count(1) from dba_synonyms where owner= A.username) syn,(select COUNT(1) FROM DBA_MVIEWS K WHERE K.owner = A.username) mv_num,(select count(DISTINCT l.NAME)from DBA_SOURCE LWHERE L.OWNER = A.usernameAND L.TYPE = 'PROCEDURE') stor_num,(select COUNT(1) FROM DBA_DB_LINKS M WHERE M.owner = A.username) dblink_num,(select max(n.DATA_LENGTH)from dba_tab_cols nwhere n.OWNER = a.username) max_length,(select SUM(O.DATA_LENGTH)from dba_tab_cols owhere o.OWNER = a.usernameand o.DATA_TYPE not like '%LOB%') max_row_widefrom dba_users a where username in ('HR');

在这里插入图片描述

4.1.2迁移数据量统计

select distinct segment_type,sum(BYTES)/1024 /1024 /1024 , COUNT(*) 
FROM DBA_SEGMENTS 
where owner = 'HR' group by segment_type order by 2 desc;

在这里插入图片描述

4.1.3字符集信息统计

SQL> SELECT value FROM NLS_Database_Parameters WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';VALUE
-------------------------
AL16UTF16SQL> select userenv('language') from dual;USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8

4.1.4是否已字节为单位

SQL> Show parameter NLS_LENGTH_SEMANTICS;NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_length_semantics                 string      BYTE
SQL> select PRIVILEGE from dba_sys_privs WHERE GRANTEE='HR';PRIVILEGE
----------------------------------------
CREATE DATABASE LINK
ALTER SESSION
CREATE VIEW
UNLIMITED TABLESPACE
CREATE SESSION
CREATE SEQUENCE
CREATE SYNONYM7 rows selected.

4.1.5对象权限调研

SQL> select * from dba_tab_privs WHERE GRANTEE='HR';GRANTEE         OWNER           TABLE_NAME      GRANTOR         PRIVILEGE       GRA HIE COM TYPE            INH
--------------- --------------- --------------- --------------- --------------- --- --- --- --------------- ---
HR              SYS             DBMS_STATS      SYS             EXECUTE         NO  NO  NO  PACKAGE         NO

4.1.6表空间信息调研

select ee.username,dd.* from (select aa.*, bb.file_name, cc.NEXT_EXTENTfrom (select tbs_used_info.tablespace_name,tbs_used_info.alloc_mb,tbs_used_info.used_mb,tbs_used_info.max_mb,tbs_used_info.free_of_max_mb,tbs_used_info.used_of_max || '%' used_of_max_pctfrom (select a.tablespace_name,round(a.bytes_alloc / 1024 / 1024) alloc_mb,round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024) used_mb,round((a.bytes_alloc - nvl(b.bytes_free, 0)) * 100 /a.maxbytes) used_of_max,round((a.maxbytes - a.bytes_alloc +nvl(b.bytes_free, 0)) / 1048576) free_of_max_mb,round(a.maxbytes / 1048576) max_mbfrom (select f.tablespace_name,sum(f.bytes) bytes_alloc,sum(decode(f.autoextensible,'YES',f.maxbytes,'NO',f.bytes)) maxbytesfrom dba_data_files fgroup by tablespace_name) a,(select f.tablespace_name, sum(f.bytes) bytes_freefrom dba_free_space fgroup by tablespace_name) bwhere a.tablespace_name = b.tablespace_name(+)) tbs_used_infoorder by tbs_used_info.used_of_max desc) aa,dba_data_files bb,dba_tablespaces ccwhere aa.tablespace_name = bb.tablespace_nameand aa.tablespace_name = cc.tablespace_name) ddright join dba_users ee on dd.tablespace_name=ee.default_tablespacewhere ee.username in ('HR');

在这里插入图片描述

select *from (select owner, tablespace_name, sum(b) KBfrom (select owner,t.segment_name,t.partition_name,round(bytes / 1024   , 2) b,tablespace_namefrom dba_segments t)where owner in ('HR')group by owner,tablespace_name);

在这里插入图片描述

4.2目标端DM数据库调研

根据实际需求安装部署相应的DM数据库版本。

5、迁移评估

[dmdba@lei2 ~]$ cd /dmdba/dmdbms/tool/
[dmdba@lei2 tool]$ export DISPLAY=192.168.0.200:0.0
[dmdba@lei2 tool]$ ./dts
Xlib:  extension "RANDR" missing on display "192.168.0.200:0.0".

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、制定迁移计划

根据待移植的 Oracle 系统信息分析的情况,制定迁移计划:先对整库进行一次性迁移,再对迁移失败的或不兼容的对象进行手动迁移。
先在目标端DM数据库创建相应的表空间、用户并赋权。

SQL> create user hr identified by hrhrhrhrhr default tablespace dmhr;
操作已执行
已用时间: 4.317(毫秒). 执行号:604.
SQL> grant resource,VTI to hr;
操作已执行
已用时间: 1.490(毫秒). 执行号:605.

7、迁移数据库

将ORACLE中的HR用户迁移至DM数据库中的HR用户。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、数据验证

8.1源端对象及数据统计

create table table_count (owner varchar(100),table_name varchar(100),cnt int);
declare
v_owner VARCHAR2(100);
v_tabname VARCHAR2(100);
stmt  VARCHAR2(200);
num_rows number;
begin
for rec in (select owner,table_name from dba_tables where owner='HR' order by 1, 2)loopselect rec.owner,rec.table_name into v_owner,v_tabname from dual;stmt := 'select count(*) from "' || v_owner || '"."' || v_tabname || '"';EXECUTE IMMEDIATE stmt INTO num_rows;  
EXECUTE IMMEDIATE 'insert into table_count values('''||v_owner||''','''||v_tabname||''','''||to_number(num_rows)||''')';end loop;
end;
/
SQL> select * from table_count;OWNER           TABLE_NAME             CNT
--------------- --------------- ----------
HR              COUNTRIES               25
HR              DEPARTMENTS             27
HR              EMPLOYEES              107
HR              JOBS                    19
HR              JOB_HISTORY             10
HR              LOCATIONS               23
HR              REGIONS                  47 rows selected.

8.2源端各对象的数量统计

SELECTA.USERNAME ,(SELECT COUNT(1) FROM DBA_TABLES B WHERE B.OWNER = A.USERNAME) table_num,( SELECT COUNT(1) FROM DBA_VIEWS G WHERE G.OWNER = A.USERNAME ) view_num,(SELECT COUNT(1) FROM DBA_MVIEWS K WHERE K.OWNER = A.USERNAME) mv_num,( SELECT COUNT(1) FROM DBA_TRIGGERS H WHERE H.OWNER = A.USERNAME ) tri_num,( SELECT COUNT(DISTINCT I.NAME) FROM DBA_SOURCE I WHERE I.OWNER = A.USERNAME AND I.TYPE = 'FUNCTION' ) fun_num,( SELECT COUNT(1) FROM DBA_SEQUENCES J WHERE J.SEQUENCE_OWNER = A.USERNAME ) seq_num,( SELECT COUNT(DISTINCT L.NAME) FROM DBA_SOURCE L WHERE L.OWNER = A.USERNAME AND L.TYPE = 'PROCEDURE' ) stor_num,( SELECT COUNT(1) FROM DBA_DB_LINKS M WHERE M.OWNER = A.USERNAME ) link_num,( SELECT COUNT(1) FROM DBA_INDEXES I WHERE UNIQUENESS = 'UNIQUE' AND OWNER =A.USERNAME OR INDEX_NAME NOT LIKE 'SYS_%' AND OWNER =A.USERNAME) idx_num,( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE='TYPE' AND OWNER =A.USERNAME ) other,( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE='PACKAGE' AND OWNER =A.USERNAME) pkg_num
FROMDBA_USERS A WHERE A.USERNAME IN ('HR');

在这里插入图片描述

8.3目标端对象及数据统计

create table table_count (owner varchar(100),table_name varchar(100),cnt int);
declare
v_owner VARCHAR2(100);
v_tabname VARCHAR2(100);
stmt  VARCHAR2(200);
num_rows number;
begin
for rec in (select owner,table_name from dba_tables where owner='HR' order by 1, 2)loopselect rec.owner,rec.table_name into v_owner,v_tabname from dual;stmt := 'select count(*) from "' || v_owner || '"."' || v_tabname || '"';EXECUTE IMMEDIATE stmt INTO num_rows;  
EXECUTE IMMEDIATE 'insert into table_count values('''||v_owner||''','''||v_tabname||''','''||to_number(num_rows)||''')';end loop;
end;
/
SQL> select * from table_count;行号     OWNER TABLE_NAME  CNT        
---------- ----- ----------- -----------
1          HR    COUNTRIES   25
2          HR    DEPARTMENTS 27
3          HR    EMPLOYEES   107
4          HR    JOBS        19
5          HR    JOB_HISTORY 10
6          HR    LOCATIONS   23
7          HR    REGIONS     47 rows got已用时间: 0.372(毫秒). 执行号:610.SQL> select * from table_count;行号     OWNER TABLE_NAME  CNT        
---------- ----- ----------- -----------
1          HR    COUNTRIES   25
2          HR    DEPARTMENTS 27
3          HR    EMPLOYEES   107
4          HR    JOBS        19
5          HR    JOB_HISTORY 10
6          HR    LOCATIONS   23
7          HR    REGIONS     47 rows got已用时间: 0.372(毫秒). 执行号:610.

8.4目标端各对象的数量统计

SELECTA.USERNAME  "用户名",(SELECT COUNT(1) FROM DBA_TABLES B WHERE B.OWNER = A.USERNAME)  "表数量",( SELECT COUNT(1) FROM DBA_VIEWS G WHERE G.OWNER = A.USERNAME )  "视图数量",( SELECT COUNT(1) FROM DBA_TRIGGERS H WHERE H.OWNER = A.USERNAME )  "触发器数量",( SELECT COUNT(DISTINCT I.NAME) FROM DBA_SOURCE I WHERE I.OWNER = A.USERNAME AND I.TYPE = 'FUNCTION' )  "函数数量",( SELECT COUNT(1) FROM DBA_SEQUENCES J WHERE J.SEQUENCE_OWNER = A.USERNAME )  "序列数量",( SELECT COUNT(DISTINCT L.NAME) FROM DBA_SOURCE L WHERE L.OWNER = A.USERNAME AND L.TYPE = 'PROCEDURE' )  "存储过程数量",( SELECT COUNT(1) FROM DBA_DB_LINKS M WHERE M.OWNER = A.USERNAME )  "DBLINK数量",( SELECT COUNT(1) FROM DBA_INDEXES I WHERE UNIQUENESS = 'UNIQUE' AND OWNER =A.USERNAME OR INDEX_NAME NOT LIKE 'INDEX335%' AND OWNER =A.USERNAME)  "索引数量",( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE='TYPE' AND OWNER =A.USERNAME OR OBJECT_TYPE='CLASS' AND OWNER =A.USERNAME )  "自定义类型",( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE='PACKAGE' AND OWNER =A.USERNAME)  "PKG数量"
FROMDBA_USERS A WHERE A.USERNAME IN ('HR');

在这里插入图片描述

9、迁移完成后续工作

9.1统计信息收集

SQL> DBMS_STATS.GATHER_SCHEMA_STATS( 'HR',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
DMSQL 过程已成功完成
已用时间: 164.834(毫秒). 执行号:612.

9.2数据库备份

迁移完成后,建议对数据库做一次全量备份。

9.3应用迁移

应用迁移、连接串修改、驱动修改等。

更多内容请参考:https://eco.dameng.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461064.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

瑞格智慧心理服务平台 NPreenSMSList.asmx sql注入漏洞复现

0x01 产品描述: ‌ 瑞格智慧心理服务平台‌是一个集心理测评、心理咨询、心理危机干预、心理放松训练等功能于一体的综合性心理健康服务平台。该平台由北京瑞格心灵科技有限公司开发,旨在为用户提供全方位的心理健康服务。0x02 漏洞描述:…

【经典论文阅读11】ESMM模型——基于贝叶斯公式的CVR预估

传统的CVR模型(也就是直接对conversion rate建模的模型)在实际应用中面临两个问题(样本选择偏差与数据稀疏性问题)。为了解决这两个问题,本文提出ESMM模型。该模型巧妙地利用用户行为序列去建模这个问题,从…

OpenCV基础01

目录 一、环境安装 二、显示窗口 三、创建图片 四、图片保存 五、图像裁剪 六、调整图片大小 七、图像绘制 1、绘制圆形 2、绘制矩形 3、绘制文本 4、绘制直线 5、中文文本 八、控制鼠标 九、鼠标事件 十、视频处理 OpenCV作为C和C语言的源代码文件,…

git:将多个提交合并为一个

如何将第一至第五次提交合并为一个? 1. 使用 git log -n 命令查看spring boot admin的commit-id,本例n6,命令如下: PS E:\liguogang\spring-cloud> git log -62. 使用 git reset --soft commit-id 命令将前五次提交重置到工作…

Leetcode 二叉树中的最大路径和

算法思想 这道题要求在一棵二叉树中找到路径和最大的路径。路径可以从树中任意一个节点开始,到任意一个节点结束,但路径上的节点必须是连续的。 算法使用递归的方式来遍历树中的每个节点,并在遍历过程中计算包含当前节点的最大路径和。具体…

Python 变量在函数中的作用域

什么是局部变量? 作用范围在函数内部,在函数外部无法使用 什么是全局变量? 在函数内部和外部均可使用 如何将函数内定义的变量声明为全局变量? 使用global关键字, global变量 练习: 演示局部变量 #…

【Android】Kotlin教程(4)

文章目录 1.field2.计算属性3.主构造函数4.次构造函数5.默认参数6.初始化块7.初始化顺序7.延迟初始化lateinit8.惰性初始化 1.field field 关键字通常与属性的自定义 getter 和 setter 一起使用。当你需要为一个属性提供自定义的行为时,可以使用 field 来访问或设置…

SSH登录介绍

说明:一般登录服务器,我们可以用远程连接工具,如XShell、Windterm等,或者通过公司搭建的JumpServer(跳板机、堡垒机)来连接。前者是点对点登录,输入主机、端口,通过SSH协议登录&…

unity中预制体的移动-旋转-放缩

unity中预制体的移动-旋转-放缩 左上侧竖栏图标介绍Tools(手形工具)Move Tool(移动工具,单位米)Rotate Tool(旋转工具,单位角度)Scale Tool(缩放工具,单位倍数)Rect Tool(矩形工具)Transform Tool(变换工具)图标快捷键对照表工具使用的小技巧…

HarmonyOS开发 - 本地持久化之实现LocalStorage实例

用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。 说明&#x…

java程序打包为一个exe程序

ok,最近学到了一个有意思的东西 那就是如何将自己写好的java程序打包成一个exe程序,发给别人,然后运行。 那么开始之前,请先安装整个工具: exe4j:https://www.ej-technologies.com/exe4j/download&#…

高并发设计模式之ForkJoin模式

分而治之是一种思想,所谓分而治之就是把一个复杂的算法问题按一定的分解方法分为规模较小的若干部分,然后逐个解决,分别找出各部分的解,最后把各部分的解在整合成整个问题的解.ForkJoin模式就是分而治之思想的另一种应用. ForkJoin模式的原理 ForkJoin模式先把一个大任务分解…

AMD XILINX 20nm器件价格上调25%

随着市场回暖,台积电也在调整价格策略,近期台积电上调了20nm的出厂价格。 据相关消息显示,AMD为了保障持续的供货和服务,也计划将20nm器件的价格统一上调25%,预计将于11月发布正式的涨价通知,并于2025年Q1开…

EfficientNet-B6模型实现ISIC皮肤镜图像数据集分类

项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于opencv答题卡识别判卷】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【G…

为何我们要将测试左移?回到过去的美好时光

以下为作者观点: 为何我们将测试左移?在传统的开发周期中,测试通常在功能完成后甚至在开发阶段结束时进行。左移测试通过从开发过程开始到整个开发过程整合测试活动来挑战这一点。 让我们首先讨论一下为什么我们选择“左移”,因…

java项目之基于智能推荐的卫生健康系统(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于智能推荐的卫生健康系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于智能推荐…

性能测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点…

深度学习基础—循环神经网络(RNN)

引言 从本系列博客开始,我们将来一起学习一下NLP领域的相关基础知识,NLP领域重要的模型是RNN,在此之前,先来了解一些符号的含义。 1.符号定义 (1)符号定义 假设建立一个能够自动识别句中人名位置的序列模型…

【工具变量】自由贸易试验区试点DID数据集(2003-2023年)

数据简介:自由贸易试验区(Free Trade Zone,简称FTZ)是中国ZF在新形势下为了推进GG开放、提高开放型经济水平而采取的重要战略举措。自贸试验区在一国的部分领土内运入任何货物,被认为在关境以外,免于实施惯…

Flask

创建项目 Pycharm专业版 默认文件 Pycharm社区版没有自动创建这几个文件,手动创建即可。 运行 常规功能 debug模式 修改内容自动更新,否则需要重新启动运行项目才生效。 修改host 通网络内其他人可以通过我得ip访问该服务。 修改端口号 空格分隔…