达梦数据库dexp 和 dimp 应用实例

目录

一、准备实验环境(测试库)

1.1.挂载新磁盘

1.2.创建数据库实例

1.3.注册系统服务

二、创建测试数据

2.1.登录数据库

2.2.创建测试用户和表空间

2.3.切换到测试用户

2.4.创建测试表

2.5.插入测试数据

2.6.验证数据

三、做导出导入测试实验

3.1.导出实验 (dexp)

3.1.1.全库导出

[3.1.2. 按用户导出](#3.1.2. 按用户导出)

[3.1.3. 按表导出](#3.1.3. 按表导出)

3.2.导入实验 (dimp)

[3.2.1. 准备导入测试环境](#3.2.1. 准备导入测试环境)

[3.2.2. 按表导入 (TABLES)](#3.2.2. 按表导入 (TABLES))

[3.2.3. 导入用户数据](#3.2.3. 导入用户数据)

[3.2.4. 导入全库备份](#3.2.4. 导入全库备份)


一、准备实验环境(测试库)

1.1.挂载新磁盘

首先需要将新添加的块盘挂载到系统的一个目录下。

首先,在原先部署单机部署达梦数据库的虚拟机的基础上,新增一块盘,用于创建一个新的实例,作为导入的测试空间

查看新磁盘 :使用 fdisk -llsblk 命令确认新磁盘的设备名称,例如 /dev/sdb

分区和格式化

1. 对新磁盘进行分区(可选,也可以直接使用整个磁盘)

fdisk /dev/sdc # 在 fdisk 交互界面中,依次输入 n, p, 1 回车回车, w 保存退出

2. 将分区(或整个磁盘)格式化为文件系统,例如 ext4

mkfs.ext4 /dev/sdb1

创建挂载点并挂载

1. 创建一个目录作为挂载点,例如 /dmdata2

mkdir -p /dmdata2

2. 挂载磁盘到该目录

mount /dev/sdc1 /dmdata2

设置开机自动挂载

编辑 /etc/fstab 文件,在末尾添加一行,防止重启后挂载丢失。

echo '/dev/sdc1 /dmdata2 ext4 defaults 0 0' >> /etc/fstab

bash 复制代码
[root@localhost ~]# # 1. 创建一个目录作为挂载点,例如 /dmdata2
[root@localhost ~]# mkdir -p /dmdata2
[root@localhost ~]#
[root@localhost ~]# # 2. 挂载磁盘到该目录
[root@localhost ~]# mount /dev/sdc1 /dmdata2
[root@localhost ~]#
[root@localhost ~]# echo '/dev/sdc1 /dmdata2 ext4 defaults 0 0' >> /etc/fstab
[root@localhost ~]#
[root@localhost ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri May 16 18:19:17 2025
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=f5c128eb-513e-47c6-a725-564c557e05af /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1 /history_data xfs defaults 0 0
# UUID=a927f23c-f9bc-4b2e-8e2e-d369e8f9b176 /history_data xfs defaults 0 0
/dev/sdc1 /dmdata2 ext4 defaults 0 0
[root@localhost ~]#
[root@localhost ~]# mount -a

赋权:

1.2.创建数据库

挂载好磁盘后,就可以使用达梦的 dminit 工具在这个新目录下初始化第二个数据库了。

切换到 dmdba 用户

su - dmdba

执行dminit命令

cd /home/dmdba/dmdbms/bin

./dminit PATH=/dmdata2/data DB_NAME=IMPORT_DB INSTANCE_NAME=IMPORT_SVR PORT_NUM=8889 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123

  • PATH:指向你新挂载的磁盘目录。dminit 会在该路径下自动创建数据库文件。

  • PORT_NUM:指定为 8889

1.3.注册系统服务

为了便于管理(开机自启、使用 systemctl 命令),需要将新实例注册为操作系统服务。

切换到 root 用户

exit # 退出 dmdba 用户,回到 root

执行服务注册脚本:

cd /home/dmdba/dmdbms/script/root

./dm_service_installer.sh -t dmserver -p IMPORT -dm_ini /dmdata2/data/IMPORT_DB/dm.ini

  • -p IMPORT:指定服务的后缀名,生成的服务名将是 DmServiceIMPORT

  • -dm_ini:必须指定为你刚在新磁盘上创建的实例的 dm.ini 文件路径。

注册成功后,你就可以通过以下命令来管理这个新的数据库实例了:

systemctl start DmServiceIMPORT # 启动

systemctl stop DmServiceIMPORT # 停止

systemctl status DmServiceIMPORT # 查看状态

至此,我们当前的服务器中存在两个独立的实例

二、创建测试数据

2.1.登录数据库

2.2.创建测试用户和表空间

-- 创建测试表空间

CREATE TABLESPACE TEST_DATA DATAFILE '/dmdata2/data/IMPORT_DB/TEST_DATA01.DBF' SIZE 100M;

-- 创建测试用户

CREATE USER TEST IDENTIFIED BY "Test123!!" DEFAULT TABLESPACE TEST_DATA;

-- 授予权限

GRANT DBA TO TEST;

GRANT RESOURCE TO TEST;

2.3.切换到测试用户

CONN TEST/"Test123!!"@localhost:8889;

2.4.创建测试表

bash 复制代码
-- 创建部门表
CREATE TABLE DEPT (
    DEPTNO INT PRIMARY KEY,
    DNAME VARCHAR(50),
    LOC VARCHAR(50)
);

-- 创建员工表
CREATE TABLE EMP (
    EMPNO INT PRIMARY KEY,
    ENAME VARCHAR(50),
    JOB VARCHAR(50),
    MGR INT,
    HIREDATE DATE,
    SAL DECIMAL(10,2),
    COMM DECIMAL(10,2),
    DEPTNO INT
);

-- 创建产品表(用于测试大表)
CREATE TABLE PRODUCT (
    PROD_ID INT PRIMARY KEY,
    PROD_NAME VARCHAR(100),
    CATEGORY VARCHAR(50),
    PRICE DECIMAL(10,2),
    STOCK INT
);

2.5.插入测试数据

bash 复制代码
-- 插入部门数据
INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');
COMMIT;

-- 插入员工数据
INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20);
INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20);
INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30);
INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10);
INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1982-12-09', 3000, NULL, 20);
INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788, '1983-01-12', 1100, NULL, 20);
INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30);
INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20);
INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, NULL, 10);
COMMIT;

-- 插入产品数据(批量生成测试数据)
BEGIN
    FOR i IN 1..10000 LOOP
        INSERT INTO PRODUCT VALUES (i, 'Product_' || i, 'Category_' || MOD(i, 10), ROUND(DBMS_RANDOM.VALUE(10, 1000), 2), TRUNC(DBMS_RANDOM.VALUE(0, 1000)));
        IF MOD(i, 1000) = 0 THEN
            COMMIT;
        END IF;
    END LOOP;
    COMMIT;
END;
/

2.6.验证数据

bash 复制代码
-- 统计各表数据量
SELECT 'DEPT' AS TABLE_NAME, COUNT(*) AS ROWS FROM DEPT
UNION ALL
SELECT 'EMP', COUNT(*) FROM EMP
UNION ALL
SELECT 'PRODUCT', COUNT(*) FROM PRODUCT;

-- 查看示例数据
SELECT * FROM DEPT;
SELECT * FROM EMP WHERE ROWNUM <= 5;
SELECT * FROM PRODUCT WHERE ROWNUM <= 5;

三、做导出导入测试实验

注意:先赋权,前面搞忘记!

3.1.导出实验 (dexp)

3.1.1.全库导出

退出 disql,回到 shell

exit

全库导出

cd /home/dmdba/dmdbms/bin

./dexp SYSDBA/Dameng123@localhost:8889 FILE=/dmdata2/backup/full_export.dmp LOG=/dmdata2/backup/full_export.log FULL=Y

bash 复制代码
[dmdba@localhost bin]$ ./dexp SYSDBA/Dameng123@localhost:8889 FILE=/dmdata2/backup/full_export.dmp LOG=/dmdata2/backup/full_export.log FULL=Y
dexp V8

version: 03134284336-20250117-257733-20132

start dexp:
SYSDBA/******@localhost:8889 FILE=/dmdata2/backup/full_export.dmp LOG=/dmdata2/backup/full_export.log FULL=Y


导出对象类型:SYSPACKAGE_DEF

共导出 2 个SYSPACKAGE_DEF

导出对象类型:USER

共导出 1 个USER

导出对象类型:SYSTEM_PRIVILEGE

共导出 1 个SYSTEM_PRIVILEGE

导出对象类型:SYS_ROLE_PRIVILEGE_TO_USER

共导出 3 个SYS_ROLE_PRIVILEGE_TO_USER

正在导出 第1 个SCHEMA :SYSDBA

开始导出模式[SYSDBA].....

模式[SYSDBA]导出结束.....

成功导出 第1 个SCHEMA :SYSDBA


正在导出 第2 个SCHEMA :TEST

开始导出模式[TEST].....


----- [2026-04-17 05:34:39]导出表:TEST.DEPT -----


----- [2026-04-17 05:34:39]导出表:TEST.EMP -----


----- [2026-04-17 05:34:39]导出表:TEST.PRODUCT -----

表TEST.DEPT导出结束,共导出 4 行数据, 大小 0.090 KB

表TEST.EMP导出结束,共导出 14 行数据, 大小 0.659 KB

表TEST.PRODUCT导出结束,共导出 10000 行数据, 大小 434.261 KB

共导出 3 个TABLE

模式[TEST]导出结束.....

成功导出 第2 个SCHEMA :TEST


共导出 2 个SCHEMA


整个导出过程共花费    0.441 s


成功终止导出, 没有出现警告
[dmdba@localhost bin]$

3.1.2. 按用户导出

只导出 TEST 用户

./dexp SYSDBA/Dameng123@localhost:8889 FILE=/dmdata2/backup/test_user.dmp LOG=/dmdata2/backup/test_user.log OWNER=TEST

bash 复制代码
[dmdba@localhost bin]$ ./dexp SYSDBA/Dameng123@localhost:8889 FILE=/dmdata2/backup/test_user.dmp LOG=/dmdata2/backup/test_user.log OWNER=TEST
dexp V8

version: 03134284336-20250117-257733-20132

start dexp:
SYSDBA/******@localhost:8889 FILE=/dmdata2/backup/test_user.dmp LOG=/dmdata2/backup/test_user.log OWNER=TEST


导出对象类型:USER

共导出 1 个USER

导出对象类型:SYSTEM_PRIVILEGE

共导出 1 个SYSTEM_PRIVILEGE

导出对象类型:SYS_ROLE_PRIVILEGE_TO_USER

共导出 3 个SYS_ROLE_PRIVILEGE_TO_USER

正在导出 第1 个SCHEMA :TEST

开始导出模式[TEST].....


----- [2026-04-17 05:38:05]导出表:TEST.DEPT -----


----- [2026-04-17 05:38:05]导出表:TEST.EMP -----


----- [2026-04-17 05:38:05]导出表:TEST.PRODUCT -----

表TEST.DEPT导出结束,共导出 4 行数据, 大小 0.090 KB

表TEST.EMP导出结束,共导出 14 行数据, 大小 0.659 KB

表TEST.PRODUCT导出结束,共导出 10000 行数据, 大小 434.261 KB

共导出 3 个TABLE

模式[TEST]导出结束.....

成功导出 第1 个SCHEMA :TEST


共导出 1 个SCHEMA


整个导出过程共花费    0.268 s


成功终止导出, 没有出现警告
[dmdba@localhost bin]$

3.1.3. 按表导出

导出指定表

./dexp SYSDBA/Dameng123@localhost:8889 FILE=/dmdata2/backup/emp_dept.dmp LOG=/dmdata2/backup/emp_dept.log TABLES=TEST.EMP,TEST.DEPT

bash 复制代码
[dmdba@localhost bin]$ ./dexp SYSDBA/Dameng123@localhost:8889 FILE=/dmdata2/backup/emp_dept.dmp LOG=/dmdata2/backup/emp_dept.log TABLES=TEST.EMP,TEST.DEPT
dexp V8

[警告]文件"/dmdata2/backup/emp_dept.dmp"已经存在
是否覆盖(y/n, 1/0):y

[警告]文件"/dmdata2/backup/emp_dept.log"已经存在
是否覆盖(y/n, 1/0):y

version: 03134284336-20250117-257733-20132

start dexp:
SYSDBA/******@localhost:8889 FILE=/dmdata2/backup/emp_dept.dmp LOG=/dmdata2/backup/emp_dept.log TABLES=TEST.EMP,TEST.DEPT



----- [2026-04-17 05:48:26]导出表:TEST.EMP -----


----- [2026-04-17 05:48:26]导出表:TEST.DEPT -----

表TEST.EMP导出结束,共导出 14 行数据, 大小 0.659 KB

表TEST.DEPT导出结束,共导出 4 行数据, 大小 0.090 KB

共导出 2 个TABLE

整个导出过程共花费    0.094 s


成功终止导出, 没有出现警告
[dmdba@localhost bin]$

3.2.导入实验 (dimp)

3.2.1. 准备导入测试环境

连接数据库

./disql SYSDBA/"1314520yP@qq"@localhost:5236

创建测试用户用于导入

CREATE USER TEST_IMP IDENTIFIED BY "Test123!!";

GRANT DBA, RESOURCE TO TEST_IMP;

exit

3.2.2. 按表导入 (TABLES)

将导出的表数据导入到数据库中。

导入单张表

./dimp USERID=SYSDBA/\"1314520yP@qq\"@localhost:5236 FILE=/dmdata2/backup/emp_dept.dmp LOG=/dmdata/dmbak/emp_to_imp.log FROMUSER=TEST TOUSER=TEST_IMP TABLE_EXISTS_ACTION=REPLACE

可以看到,直接导入会报错,因为导入库中并没有该表

解决方法:先建表结构

bash 复制代码
CONN TEST_IMP/"Test123!!"@localhost:5236;

-- 创建部门表
CREATE TABLE DEPT (
    DEPTNO INT PRIMARY KEY,
    DNAME VARCHAR(50),
    LOC VARCHAR(50)
);

-- 创建员工表
CREATE TABLE EMP (
    EMPNO INT PRIMARY KEY,
    ENAME VARCHAR(50),
    JOB VARCHAR(50),
    MGR INT,
    HIREDATE DATE,
    SAL DECIMAL(10,2),
    COMM DECIMAL(10,2),
    DEPTNO INT
);

./dimp USERID=SYSDBA/\"1314520yP@qq\"@localhost:5236 FILE=/dmdata2/backup/emp_dept.dmp LOG=/dmdata/dmbak/emp_to_imp.log FROMUSER=TEST TOUSER=TEST_IMP TABLE_EXISTS_ACTION=REPLACE

登录测试数据:

CONN TEST_IMP/"Test123!!"@localhost:5236;

select * from dept;

select * from emp;

3.2.3. 导入用户数据

删除前面产生的数据:

导入到指定用户

./dimp USERID=SYSDBA/\"1314520yP@qq\"@localhost:5236 FILE=/dmdata2/backup/test_user.dmp LOG=/dmdata2/backup/test_import.log FROMUSER=TEST TOUSER=TEST_IMP TABLE_EXISTS_ACTION=REPLACE

bash 复制代码
[dmdba@localhost bin]$ ./dimp USERID=SYSDBA/\"1314520yP@qq\"@localhost:5236 FILE=/dmdata2/backup/test_user.dmp LOG=/dmdata2/backup/test_import.log FROMUSER=TEST TOUSER=TEST_IMP TABLE_EXISTS_ACTION=REPLACE
dimp V8

version: 03134284336-20250117-257733-20132

start dimp:
SYSDBA/******@localhost:5236 FILE=/dmdata2/backup/test_user.dmp LOG=/dmdata2/backup/test_import.log FROMUSER=TEST TOUSER=TEST_IMP TABLE_EXISTS_ACTION=REPLACE


本地编码:PG_UTF8, 导入文件编码:PG_GB18030

[0/8]开始导入模式[TEST]......

[0/8]导入模式中的 NECESSARY GLOBAL 对象......

[0/8]模式中的 NECESSARY GLOBAL 对象导入完成......


----- [2026-04-17 06:37:39]导入表:TEST_IMP.DEPT -----

[0/8][表: DEPT]创建表 TEST_IMP.DEPT ...


----- [2026-04-17 06:37:39]导入表:TEST_IMP.EMP -----


----- [2026-04-17 06:37:39]导入表:TEST_IMP.PRODUCT -----

[1/8][表: DEPT]创建表已完成,导入表 DEPT 的数据中...

[1/8][表: EMP]创建表 TEST_IMP.EMP ...

[2/8][表: EMP]创建表已完成,导入表 EMP 的数据中...

[2/8][表: PRODUCT]创建表 TEST_IMP.PRODUCT ...

[3/8][表: PRODUCT]创建表已完成,导入表 PRODUCT 的数据中...

[表: DEPT]导入表 TEST_IMP.DEPT 的数据:4 行被处理, 大小 0.090 KB

[表: EMP]导入表 TEST_IMP.EMP 的数据:14 行被处理, 大小 0.659 KB

[表: PRODUCT]导入表 TEST_IMP.PRODUCT 的数据:10000 行被处理, 大小 434.261 KB

[3/8]导入模式中的 GLOBAL 对象......

[3/8]模式中的 GLOBAL 对象导入完成......

[3/8]模式[TEST_IMP]导入完成......

[3/8]整个导入过程共花费    0.105 s


成功终止导入, 没有出现警告
[dmdba@localhost bin]$

登录测试:

CONN TEST_IMP/"Test123!!"@localhost:5236;

3.2.4. 导入全库备份

全库导入

./dimp USERID=SYSDBA/\"1314520yP@qq\"@localhost:5236 FILE=/dmdata2/backup/full_export.dmp LOG=/dmdata2/backup/full_import.log FULL=Y

bash 复制代码
[dmdba@localhost bin]$ ./dimp USERID=SYSDBA/\"1314520yP@qq\"@localhost:5236 FILE=/dmdata2/backup/full_export.dmp LOG=/dmdata2/backup/full_import.log FULL=Y
dimp V8

version: 03134284336-20250117-257733-20132

start dimp:
SYSDBA/******@localhost:5236 FILE=/dmdata2/backup/full_export.dmp LOG=/dmdata2/backup/full_import.log FULL=Y


本地编码:PG_UTF8, 导入文件编码:PG_GB18030

[0/10]导入 GLOBAL 对象......

[0/10]导入 SYSPACKAGES_DEF 对象......

[1/10]导入 SYSPACKAGES_DEF 对象......

[2/10]导入 USER 对象 : TEST

[3/10]导入 SYS_PRIV 对象......

[4/10]导入 SR_PRIV 对象......

[5/10]导入 SR_PRIV 对象......

[6/10]导入 SR_PRIV 对象......

[7/10]GLOBAL 对象导入完毕......

[7/10]导入 SCHEMA 对象......

[7/10]开始导入模式[SYSDBA]......

[7/10]导入模式中的 NECESSARY GLOBAL 对象......

[7/10]模式中的 NECESSARY GLOBAL 对象导入完成......

[7/10]导入模式中的 GLOBAL 对象......

[7/10]模式中的 GLOBAL 对象导入完成......

[7/10]模式[SYSDBA]导入完成......

[7/10]开始导入模式[TEST]......

[7/10]导入模式中的 NECESSARY GLOBAL 对象......

[7/10]模式中的 NECESSARY GLOBAL 对象导入完成......


----- [2026-04-17 06:42:29]导入表:TEST.DEPT -----


----- [2026-04-17 06:42:29]导入表:TEST.EMP -----

[7/10][表: DEPT]创建表 TEST.DEPT ...


----- [2026-04-17 06:42:29]导入表:TEST.PRODUCT -----

[8/10][表: DEPT]创建表已完成,导入表 DEPT 的数据中...

[8/10][表: EMP]创建表 TEST.EMP ...

[9/10][表: EMP]创建表已完成,导入表 EMP 的数据中...

[9/10][表: PRODUCT]创建表 TEST.PRODUCT ...

[10/10][表: PRODUCT]创建表已完成,导入表 PRODUCT 的数据中...

[表: EMP]导入表 TEST.EMP 的数据:14 行被处理, 大小 0.659 KB

[表: DEPT]导入表 TEST.DEPT 的数据:4 行被处理, 大小 0.090 KB

[表: PRODUCT]导入表 TEST.PRODUCT 的数据:10000 行被处理, 大小 434.261 KB

[10/10]导入模式中的 GLOBAL 对象......

[10/10]模式中的 GLOBAL 对象导入完成......

[10/10]模式[TEST]导入完成......

[10/10]整个导入过程共花费    7.962 s


成功终止导入, 没有出现警告
[dmdba@localhost bin]$
相关推荐
21439651 小时前
网页如何运行html
jvm·数据库·python
Flying pigs~~2 小时前
从零到一构建企业级 RAG 问答系统:一个完整的模块化实践指南
数据库·人工智能·缓存·大模型·milvus·知识库·rag
2402_854808372 小时前
Golang数组和切片有什么区别_Golang数组切片对比教程【通俗】
jvm·数据库·python
2401_865439632 小时前
如何在 Go 中精确安装指定版本的模块
jvm·数据库·python
小菜同学爱学习2 小时前
进阶实操!MySQL常用查询技巧(多场景案例+优化思路)
数据库·mysql
zhangchaoxies2 小时前
c++ rpc框架选择 grpc和thrift哪个更适合c++
jvm·数据库·python
2301_815279522 小时前
怎么管理开启了审计日志的金融级数据库实例_合规访问控制
jvm·数据库·python
2301_803538952 小时前
SQL如何避免不同团队修改同一张表_基于前缀名的授权GRANT ON语法
jvm·数据库·python
m0_678485452 小时前
c++怎么在Windows下设置文件的安全访问控制列表(ACL)权限【底层】
jvm·数据库·python