达梦数据迁移工具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.mzph.cn/diannao/58656.shtml

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

相关文章

【Web.路由】——路由约束

我们需要明确的一点就是,一个URL地址就是一个路由值。 而路由约束,就是制定出的一套规则,只有路由值与路由约束中的规则匹配,才可以进行下一步操作。 路由约束不仅可用于路由请求,还可以用于链接的生成。 参数值约束 …

医药公司常用的九大翻译场景

医药公司的翻译工作通常涉及多个专业领域,以下是一些常见的翻译场景: 1、药品说明书翻译:包括药物的成分、副作用、使用方法、储存条件等内容的翻译,必须准确无误,以确保患者和医务人员能够正确使用药物。 2、临床研…

VB中的安全性考虑,如防止SQL注入、XSS攻击等

在Visual Basic (VB) 开发中,安全性是一个至关重要的考虑因素。为了防止SQL注入、跨站脚本(XSS)攻击等常见安全威胁,开发人员需要采取一系列措施来确保应用程序的安全性。以下是对VB中安全性考虑的详细描述: 防止SQL注…

c++编解码封装

多态版编解码 对服务器和客户端的结构体进行序列化然后对数据进行反序列化 案例分析 代码demo Codec.h #pragma once #include <iostream>class Codec { public:Codec();virtual std::string encodeMsg();//string是标准库的string类virtual void* decodeMsg();virtu…

Android 圆形进度条CircleProgressView 基础版

一个最基础的自定义View 圆形进度条&#xff0c;可设置背景色、进度条颜色&#xff08;渐变色&#xff09;下载进度控制&#xff1b;可二次定制度高&#xff1b; 核心代码&#xff1a; Overrideprotected void onDraw(NonNull Canvas canvas) {super.onDraw(canvas);int mW g…

防抖与节流 - 2024最新版前端秋招面试短期突击面试题【100道】

防抖与节流 - 2024最新版前端秋招面试短期突击面试题【100道】 ⏲️ 在JavaScript中&#xff0c;防抖&#xff08;Debouncing&#xff09;与节流&#xff08;Throttling&#xff09;是两种常用的性能优化技术&#xff0c;尤其在处理频繁触发的事件时&#xff0c;如滚动、窗口调…

SSH登录介绍

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

中信银行西安分行完成首笔上市公司股票回购增持专项贷款审批

10月18日上午&#xff0c;中国人民银行联合国家金融监管总局、中国证监会发布《关于设立股票回购增持再贷款有关事宜的通知》&#xff0c;创新推出股票回购增持专项再贷款货币政策工具&#xff0c;旨在鼓励金融机构支持上市公司回购和股票增持&#xff0c;进一步提振市场信心&a…

ValueError: Object arrays cannot be loaded when allow_pickle=False

文章目录 问题解决方法1&#xff1a;allow_pickleTrue解决方法2&#xff1a;降低numpy版本错误原因&#xff1a;python和numpy版本不兼容 问题 Traceback (most recent call last): File “D:\project\test_st\retrieval\read_npy.py”, line 4, in data np.load(‘mosi0__le…

如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8

如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8 在日常开发中&#xff0c;我们经常会遇到不同编码格式的文件&#xff0c;比如 UTF-8、ASCII、Windows-1252、ISO-8859-1 等。文件编码不一致可能导致读取或处理文件时出现乱码&#xff0c;特别是在批量处理数据文件时。…

【三十八】【QT开发应用】vlcplayer视频播放器(一)实现视频播放,视频暂停,视频停止,进度条调节,音量调节,时长显示功能

效果展示 vlcplayer_test视频播放器 MainWidget.ui 注意控件的布局和命名&#xff0c;控件的命名和信号与槽函数的绑定有关&#xff0c;所以这点很重要。 下载VLC组件和环境配置 videolan下载地址我下载的是vlc-3.0.8-win64版本. 将下载的文件复制粘贴到项目文件中. 复制粘…

PostgreSQL中查询每个账号的最新和最新前的数据

问题背景 有时候我们需要PostgreSQL中查询每个账号的最新和最新前的数据&#xff0c;也就是Rank12的数据供使用。 解决方案 如果PostgreSQL中查询每个账号的最新和最新前的数据&#xff0c;我们可以使用窗口函数来实现。窗口函数允许我们对数据进行分区&#xff0c;然后在每个…

linux上trace code的几种方法

我们在看代码时&#xff0c;总是会遇到下面问题&#xff1a; 1.查看某个场景下的代码执行流 2.查看某个函数被执行时的routine 但是&#xff0c;如果直接查看源码&#xff0c;源码可能代码量大&#xff0c;且分支多&#xff0c;不容易理清。就需要让相关程序运行起来查看。 …

《论文写作》课程心得

《论文写作》课程心得 在学习闵帆老师的《论文写作》课程后&#xff0c;结合平时观察同门的论文评改过程&#xff0c;我对论文写作有了新的体会。因此&#xff0c;我写下这篇博客&#xff0c;作为我对论文写作的总结。在我看来&#xff0c;论文写作这门课虽然主要讲的是如何写…

【LeetCode每日一题】——1791.找出星型图的中心节点

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 图 二【题目难度】 简单 三【题目编号】 1791.找出星型图的中心节点 四【题目描述】 有一个…

深入了解 美国高防 CN2 :如何提升全球化业务的网络安全与性能

美国高防 CN2 的重要性 在跨国企业和全球化业务的不断扩展下&#xff0c;对高性能和安全的网络连接需求不断增加。美国高防 CN2&#xff08;Global Internet Access&#xff09;以其卓越的跨境传输效率和强大的防护能力&#xff0c;成为许多企业关注的焦点。尤其是对电商、游戏…

Endnote如何关联Word,在Word上通过Endnote插入文献

1、Word版本已被激活 首先检查Word版本是否已经被激活&#xff0c;不管是正版还是破解版&#xff0c;未激活状态&#xff08;试用&#xff09;可能会导致关联不成功。如下图所示为已激活版本&#xff0c;在“文件”—“账户”可看。 2、勾选开发工具 其次&#xff0c;打开Wor…

1688旺铺主页首页装修 代码 首页悬浮视频怎么做?阿里巴巴代码装修悬浮视频代码固定视频悬浮漂浮视频

1688旺铺主页首页装修 代码 首页悬浮视频怎么做&#xff1f;阿里巴巴代码装修悬浮视频代码固定视频悬浮漂浮视频 一秒美工工具

VB中如何处理国际化(Internationalization)和本地化(Localization)

在Visual Basic (VB) 中处理国际化&#xff08;Internationalization&#xff0c;简称 i18n&#xff09;和本地化&#xff08;Localization&#xff0c;简称 l10n&#xff09;是一个多步骤的过程&#xff0c;涉及准备应用程序以支持多种语言和文化&#xff0c;以及为每种目标语…

【错误描述:“L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误”】

解决办法&#xff1a; 一、检查并更改网络协议 &#xff08;如果网络协议更改完成&#xff0c;还是链接失败&#xff0c;直接看 第二点&#xff09; 1、打开网络和Internet 设置 2、找到更改适配器选项 3、先择你要链接VPN&#xff0c;右键选择属性&#xff0c;之后选择安…