使用达梦DTS迁移Oracle数据到达梦数据库过程步骤-记录总结

使用达梦DTS迁移Oracle数据到达梦数据库过程步骤-记录总结

1.1示例需求

把oracle数据库中HR用户数据迁移到DM数据库HRU用户中。

1.2示例-原数据库信息

|-----------|------------------------------------------------------------|
| 前端应用相关信息 | 应用开发平台:业务系统 应用开发接口:JDBC接口 |
| 后台数据库相关信息 | 数据库架构:单机 数据库版本:oracle 11g 服务IP地址:192.168.118.171 服务端口:1522 |

1.2.1Oracle版本,服务,连接信息

ifconfig

lsnrctl status

用户名密码等信息

1.3示例-目标达梦数据库

1.3.1主要信息

|-----------|-------------------------------------------------------------------------------------------------------------|
| 前端应用相关信息 | 应用开发平台:业务系统 |
| 后台数据库相关信息 | 数据库架构:单机 数据库版本:03134284368-20260306-316451-20149 服务IP地址:172.168.118.238 端口:5237 用户密码:sysdba/TEST_qweasd9999 |

select id_code,* from v$version;

1.4达梦DTS版本

dm8_20251105_x86_win_64_ent_8.1.4.80_pack43_tool

1.5数据迁移

1.5.1源端停止应用系统

务必停止,防止产生新增数据。

1.5.2源端表数量和数据行数,对象数量,约束查询统计

1.5.2.1表数量和数据行数统计

create table test_table_count_oracle (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 in('HR') order by 1, 2)

loop

select 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 test_table_count_oracle values('''||v_owner||''','''||v_tabname||''','''||to_number(num_rows)||''')';

end loop;

end;

select * from test_table_count_oracle;

1.5.2.2对象数量查询

SELECT

A.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_MVIEWS K WHERE K.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 'SYS_%' AND OWNER =A.USERNAME) "索引数量",

( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE='TYPE' AND OWNER =A.USERNAME ) "自定义类型",

( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE='PACKAGE' AND OWNER =A.USERNAME) "PKG数量"

FROM DBA_USERS A WHERE A.USERNAME IN ('HR');

1.5.2.3约束

select CONSTRAINT_TYPE,count(*) from DBA_CONSTRAINTS where owner IN ('HR') group by CONSTRAINT_TYPE ;

--查询默认列

create table test_com_oracle20260529 as

SELECT OWNER as "模式名",TABLE_NAME as "表名",COLUMN_NAME as "列名",DATA_TYPE as "列类型",DATA_DEFAULT as "默认值" FROM DBA_TAB_COLUMNS WHERE DATA_DEFAULT IS NOT NULL and OWNER IN ('HR');

1.5.3达梦数据库中准备工作

create tablespace HRU datafile 'HRU01.DBF' size 1024 autoextend on next 128,

'HRU2.DBF' size 1024 autoextend on next 128 CACHE = NORMAL;

create user "HRU" identified by "TEST_qweasd9999" default tablespace "HRU"

default index tablespace "HRU";

grant "PUBLIC","SOI" ,"RESOURCE","SVI","VTI" to "HRU";'

1.5.4数据迁移

使用达梦DTS进行数据迁移。

1.5.4.1过程记录

图形化向导方式,具体过程省略,重点部分截图

1.5.4.2DTS方式数据行数结果校验

图形化向导方式,具体过程省略,重点部分截图

1.5.5手工方式辅助数据结果校验

1.5.5.1表数量和数据行数统计

---达梦端统计表数量和行数

drop table test_table_count_dm;

create table test_table_count_dm(schema_name varchar(255),table_name varchar(255),v_count int);

DECLARE

v_count INT;

CURSOR c_tables IS

SELECT OWNER,TABLE_NAME FROM DBA_TABLES WHERE OWNER in ('HR') order by OWNER,TABLE_NAME;

BEGIN

FOR i IN c_tables LOOP

EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||i.OWNER||'.' || i.TABLE_NAME INTO v_count;

insert into test_table_count_dm values(i.OWNER,i.TABLE_NAME,v_count);

PRINT '模式名: ' || i.OWNER ||'表名: ' || i.TABLE_NAME || ', 行数: ' || v_count;

END LOOP;

END;

select * from test_table_count_dm;

可以把test_table_count_oracle迁移到DM数据库HRU模式下,然后进行关联查询对比。

1.5.5.2对象数量统计--汇总查询

SELECT

A.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(1) FROM DBA_OBJECTS I WHERE I.OWNER = A.USERNAME AND I.OBJECT_TYPE = 'FUNCTION' ) "函数数量",

( SELECT COUNT(1) FROM DBA_SEQUENCES J WHERE J.SEQUENCE_OWNER = A.USERNAME ) "序列数量",

( SELECT COUNT(1) FROM DBA_OBJECTS L WHERE L.OWNER = A.USERNAME AND L.OBJECT_TYPE = 'PROCEDURE' ) "存储过程数量",

( SELECT COUNT(1) FROM DBA_DB_LINKS M WHERE M.OWNER = A.USERNAME ) "DBLINK数量",

( 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数量"

FROM DBA_USERS A WHERE A.USERNAME IN ('HRU');

1.5.5.3视图

SELECT OWNER, VIEW_NAME FROM DBA_VIEWS where OWNER in ('HRU');

1.5.5.4物化视图

select a.owner,b.MVIEW_NAME from dba_objects a,DBA_mviews b where a.object_type ='SCH' and a.object_id=b.SCHID ;

1.5.5.5函数

SELECT * FROM DBA_OBJECTS WHERE OBJECT_TYPE = 'FUNCTION' and OWNER in ('HRU');

1.5.5.6存储过程

SELECT * FROM DBA_OBJECTS WHERE OBJECT_TYPE = 'PROCEDURE' and OWNER in ('HRU');

​​​​​​​1.5.5.7触发器

SELECT * FROM DBA_TRIGGERS WHERE OWNER in ('HRU');

​​​​​​​1.5.5.8序列

SELECT * FROM DBA_SEQUENCES where SEQUENCE_OWNER='HRU';

​​​​​​​1.5.5.9DBLINK数量

SELECT * FROM DBA_DB_LINKS where OWNER='HRU';

​​​​​​​1.5.5.10

SELECT * FROM DBA_OBJECTS WHERE OBJECT_TYPE='PACKAGE' AND OWNER='HRU';

​​​​​​​1.5.5.11约束数量统计

select CONSTRAINT_TYPE,count(*) from DBA_CONSTRAINTS where owner IN ('HRU') group by CONSTRAINT_TYPE ;

​​​​​​​1.5.5.12约束具体表对应

CONSTRAINT_TYPE='P' --主键约束

CONSTRAINT_TYPE='U' --唯一约束

CONSTRAINT_TYPE='R' --外键约束

CONSTRAINT_TYPE='C' --check约束

--粒度到约束名称

create table HRU.test_table_yuesu_dm as

select OWNER,CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME from DBA_CONSTRAINTS where owner IN ('HRU');

create table HR.test_table_yuesu_oracle as

select OWNER,CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME from DBA_CONSTRAINTS where owner IN ('HR') ;

--粒度到约束列名

create table HRU.test_table_yuesu2_dm as

SELECT a.OWNER as "模式名",a.TABLE_NAME as "表名",b.COLUMN_NAME as "列名", a.CONSTRAINT_NAME as "约束名"

from DBA_CONSTRAINTS a, (select OWNER,CONSTRAINT_NAME,TABLE_NAME,LISTAGG(COLUMN_NAME, ', ')

WITHIN GROUP (ORDER BY COLUMN_NAME) COLUMN_NAME

from ALL_CONS_COLUMNS group by OWNER,CONSTRAINT_NAME,TABLE_NAME) b where a.CONSTRAINT_NAME=b.CONSTRAINT_NAME

and a.OWNER=b.OWNER and a.TABLE_NAME=b.TABLE_NAME and a.CONSTRAINT_TYPE='P' and a.OWNER='HRU';

--查询默认列

create table HRU.test_table_yuesu3_dm as

SELECT OWNER as "模式名",TABLE_NAME as "表名",COLUMN_NAME as "列名",DATA_TYPE as "列类型",DATA_DEFAULT as "默认值" FROM DBA_TAB_COLUMNS WHERE DATA_DEFAULT IS NOT NULL and OWNER='HRU';

--查询非空列

SELECT OWNER as "模式名",TABLE_NAME as "表名",COLUMN_NAME as "列名",DATA_TYPE as "列类型" FROM DBA_TAB_COLUMNS WHERE NULLABLE ='Y' and OWNER='HR' and TABLE_NAME not like 'BIN%'

​​​​​​​1.6更新数据库统计信息

call DBMS_STATS.gather_schema_stats('HRU',100);

​​​​​​​1.7达梦数据库端全备份

及时对数据库进行全备。

​​​​​​​1.8应用移植

(1)将应用系统中的数据库JDBC驱动连接串修改为达梦数据库的连接串:dm.jdbc.driver.DmDriver

(2)将应用系统中数据库的URL修改为达梦数据库的URL

jdbc:dm://IP:5237

​​​​​​​1.9应用 系统测试

数据库数据迁移达梦数据库完成后,应用系统连接达梦数据库进行功能测试。

​​​​​​​1.10后续其它工作,如果有。

更多达梦数据库运维指南、在线文档、相关资料、社区在线提问以及技术分享

访问​​​​​​​ 达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

https://eco.dameng.com/

相关推荐
就叫飞六吧2 小时前
MySQL 驱动里那个 `cj` 到底是什么?
数据库·mysql
MageGojo2 小时前
短链还原 API 怎么接入:展开跳转链路、查看状态码和最终落地页
数据库·redis·缓存
蚰蜒螟2 小时前
从mkdir命令到磁盘:Linux内核目录创建过程深度解析
linux·运维·数据库
我是一颗柠檬2 小时前
【Redis】字符串与哈希Day3(2026年)
数据库·redis·后端·database
sakoba2 小时前
MySQL常见问题学习
数据库·学习·mysql
小二·2 小时前
向量数据库深度对比:PGVector vs Qdrant vs Milvus vs Chroma(附性能测试数据)
数据库·wpf·milvus
sleven fung2 小时前
Milvus 向量数据库
开发语言·数据库·python·langchain·milvus
赵渝强老师2 小时前
【赵渝强老师】崖山数据库的数据字典
数据库·oracle
java_cj2 小时前
MySQL 8.0 新特性深度解析:降序索引、Doublewrite Buffer 与 redo log 无锁优化
数据库·mysql