1.概述
本文主要测试如何使用逻辑备份恢复(dexp/dimp)实现跨模式、跨多个表空间的数据迁移。
1.1 测试版本
达梦数据库的版本是:2023年4月之后的版本。
1.2 测试内容
- 跨模式、跨多个表空间数据迁移(多个数据表空间,多个索引表空间)。
2.测试过程
2.1 测试数据准备
1)创建测试用户TESTA、TESTB
2)创建4个数据表空间/索引表空间
CREATE TABLESPACE "TBS_TESTC" DATAFILE 'TBS_TESTC1.DBF' SIZE 128 AUTOEXTEND ON NEXT 128;
CREATE TABLESPACE "TBS_TESTD" DATAFILE 'TBS_TESTD1.DBF' SIZE 128 AUTOEXTEND ON NEXT 128;
CREATE TABLESPACE "TBS_TESTE" DATAFILE 'TBS_TESTE1.DBF' SIZE 128 AUTOEXTEND ON NEXT 128;
CREATE TABLESPACE "TBS_TESTF" DATAFILE 'TBS_TESTF1.DBF' SIZE 128 AUTOEXTEND ON NEXT 128;
CREATE TABLESPACE "IDX_TESTC" DATAFILE 'IDX_TESTC1.DBF' SIZE 128 AUTOEXTEND ON NEXT 128;
CREATE TABLESPACE "IDX_TESTD" DATAFILE 'IDX_TESTD1.DBF' SIZE 128 AUTOEXTEND ON NEXT 128;
CREATE TABLESPACE "IDX_TESTE" DATAFILE 'IDX_TESTE1.DBF' SIZE 128 AUTOEXTEND ON NEXT 128;
CREATE TABLESPACE "IDX_TESTF" DATAFILE 'IDX_TESTF1.DBF' SIZE 128 AUTOEXTEND ON NEXT 128;
2) 创建测试数据
--创建测试表
CREATE TABLE TESTA.A2(ID INT) tablespace TBS_TESTC;
CREATE TABLE TESTA.A3(ID INT) tablespace TBS_TESTD;
CREATE TABLE TESTA.A4(ID INT) tablespace TBS_TESTA;
--创建测试索引
CREATE INDEX TESTA.IDX_A2 ON TESTA.A2(ID) tablespace IDX_TESTC;
CREATE INDEX TESTA.IDX_A3 ON TESTA.A3(ID) tablespace IDX_TESTD;
CREATE INDEX TESTA.IDX_A4 ON TESTA.A4(ID) tablespace IDX_TESTA;
3)导入数据
begin
for i in 1..100 loop
insert into TESTA.A2 values(DBMS_RANDOM.VALUE(1,100));
insert into TESTA.A3 values(DBMS_RANDOM.VALUE(1,100));
insert into TESTA.A4 values(DBMS_RANDOM.VALUE(1,100));
end loop;
Commit;
end;
/
4)检查测试数据
--检查表信息
SELECT OWNER AS 模式,
TABLE_NAME AS 表名,
NUM_ROWS AS 行数,
TABLESPACE_NAME AS 所属表空间
FROM ALL_TABLES
WHERE OWNER IN ('TESTA', 'TESTB');
--检查索引信息
SELECT OWNER AS 模式,
INDEX_NAME AS 索引名,
TABLESPACE_NAME AS 所属表空间
FROM DBA_INDEXES
WHERE OWNER IN ('TESTA', 'TESTB') and INDEX_NAME like 'IDX_%';
2.2 迁移测试
1)导出dmp文件
2)导入dmp文件
D:\app\dmdbms\bin\dimp.exe SYSDBA/SYSDBA@LOCALHOST:15236 DIRECTORY=D:\app\dmdbms\data\DAMENG\bak FILE=exp_TESTA.dmp IGNORE=N COMPILE=Y INDEXFIRST=N TABLE_FIRST=N COMMIT_ROWS=5000 FAST_LOAD=N REMAP_SCHEMA="TESTA":"TESTB" REMAP_TABLESPACE=TBS_TESTA:TBS_TESTB,TBS_TESTC:TBS_TESTE,TBS_TESTD:TBS_TESTF,IDX_TESTA:IDX_TESTB,IDX_TESTC:IDX_TESTE,IDX_TESTD:IDX_TESTF LOG=imp_TESTB_2023_11_03_10_29_33.log LOG_WRITE=N
3)查看表空间
--检查表信息
SELECT OWNER AS 模式,
TABLE_NAME AS 表名,
NUM_ROWS AS 行数,
TABLESPACE_NAME AS 所属表空间
FROM ALL_TABLES
WHERE OWNER IN ('TESTA', 'TESTB');
--检查索引信息
SELECT OWNER AS 模式,
INDEX_NAME AS 索引名,
TABLESPACE_NAME AS 所属表空间
FROM DBA_INDEXES
WHERE OWNER IN ('TESTA', 'TESTB') and INDEX_NAME like 'IDX_%';
2.3 迁移总结
- 当用户/模式下包含多个数据表空间/索引表空间时,dexp导出时:参数TABLESPACE=Y(手动设置/图形化勾选:定义包含表空间),dimp导入时需要指定:REMAP_SCHEMA参数设置模式映射,REMAP_TABLESPACE参数设置表空间映射(支持多表空间映射,比如REMAP_TABLESPACE=TBS_TESTA:TBS_TESTB,TBS_TESTC:TBS_TESTE…),即可实现:跨用户/跨模式 对应 跨多个表空间的数据导入;
- 当用户/模式包含多个数据表空间/索引表空间时,dexp导出时:参数TABLESPACE=N(默认设置),dimp导入时只需要指定REMAP_SCHEMA参数设置模式映射,即可实现:跨用户/跨模式的对应默认表空间的数据导入(其他数据表空间/索引表空间也会导入至默认的数据表空间/索引表空间中); 注:就算指定了REMAP_TABLESPACE参数设置多个表空间映射,也不生效。