在学习 DM8 数据库备份与还原的过程中,除了使用 dmrman 、disql工具进行物理备份与还原,还可以使用 dexp 和 dimp 实现数据库对象的逻辑导出与导入。
dexp 是逻辑导出工具,dimp 是逻辑导入工具。两者配合使用,可以根据实际需求导出数据库中的对象和数据,并在需要时重新导入。
与物理备份相比,逻辑备份更侧重于数据库对象及数据本身,支持整库、用户、模式和指定表等不同范围,适用于逻辑备份、数据迁移以及指定对象恢复等场景。
dexp 用于将数据库中的对象及数据以二进制格式导出到逻辑备份文件中。根据实际需求,可以选择不同的导出范围。
dimp 用于读取 dexp 生成的逻辑备份文件,并将其中的对象和数据导入目标数据库。
需要注意,导入前需要关注目标数据库的用户、权限、对象状态以及源端与目标端的兼容性。
| 对比项 | dexp/dimp | dmrman 等物理备份工具 |
|---|---|---|
| 操作对象 | 数据库逻辑对象及数据 | 数据库物理文件、数据页等 |
| 主要用途 | 逻辑备份、对象迁移、数据导入导出 | 数据库物理备份与恢复 |
| 操作方式 | 逻辑导出与逻辑导入 | 物理备份、还原与恢复 |
| 典型文件 | .dmp 等逻辑导出文件 |
物理备份集 |
两者适用于不同的场景,实际使用时应根据现场情况选择合适的方式。
| 项目 | 配置 |
|---|---|
| 数据库 | DM8 |
| 操作系统 | Linux |
| 数据库端口 | 5236 |
| DM8 安装目录 | /home/dmdba/dmdbms |
| 备份目录 | /dmdata/dmbak |
| 测试对象 | SYSDBA.WZL_TEST |
确认 dexp 和 dimp 工具存在:
ls -l /home/dmdba/dmdbms/bin/dexp
ls -l /home/dmdba/dmdbms/bin/dimp
先准备一张测试表及少量数据。
CREATE TABLE SYSDBA.WZL_TEST (
ID INT PRIMARY KEY,
NAME VARCHAR(50),
CREATE_TIME DATE
);
INSERT INTO SYSDBA.WZL_TEST
VALUES (1, '测试数据1', SYSDATE);
INSERT INTO SYSDBA.WZL_TEST
VALUES (2, '测试数据2', SYSDATE);
INSERT INTO SYSDBA.WZL_TEST
VALUES (3, '测试数据3', SYSDATE);
COMMIT;
SELECT * FROM SYSDBA.WZL_TEST ORDER BY ID;
确认测试表及数据正常后,开始进行逻辑备份与还原。
本次只导出测试表,使用 TABLES 参数指定导出对象。
dexp USERID=SYSDBA/Wei_1234@192.168.234.111:5236 FILE=WZL_TEST.dmp LOG=WZL_TEST_exp.log DIRECTORY=/dmdata/dmbak TABLES=SYSDBA.WZL_TEST
成功导出打印如下
参数说明:
USERID:指定数据库连接信息。FILE:指定导出文件名称。LOG:指定导出日志文件名称。DIRECTORY:指定文件目录。TABLES:指定需要导出的表。导出完成后,检查生成的文件及日志:
ls -lh /dmdata/dmbak
cat /dmdata/dmbak/WZL_TEST_exp.log
确认日志中没有影响导出成功的错误,并检查目标表是否已被导出。
为了验证导出文件是否能够用于恢复,本次先删除测试表,再通过 dimp 重新导入。
DROP TABLE SYSDBA.WZL_TEST;
执行导入:
dimp USERID=SYSDBA/Wei_739867901@192.168.234.111:5236 FILE=WZL_TEST.dmp LOG=WZL_TEST_imp.log DIRECTORY=/dmdata/dmbak TABLES=SYSDBA.WZL_TEST
成功导入打印如下
检查导入日志:
cat /dmdata/dmbak/WZL_TEST_imp.log
通过 disql 查询测试表:
SELECT COUNT(*) FROM SYSDBA.WZL_TEST;
SELECT * FROM SYSDBA.WZL_TEST ORDER BY ID;
对比导出前记录的数据,确认表结构和数据恢复成功。
与指定表导出不同,整库逻辑备份使用 FULL=Y 参数。该方式用于导出数据库范围内的逻辑对象,适用于整库逻辑迁移等场景。
为了避免影响现有测试环境,新建一个独立的实例进行导入验证。
执行整库逻辑导出:
dexp USERID=SYSDBA/Wei_739867901@192.168.234.111:5236 FILE=FULL_DB.dmp LOG=FULL_DB_exp.log DIRECTORY=/dmdata/dmbak FULL=Y
与指定表导出相比,本次不再使用 TABLES 参数,而是通过 FULL=Y 指定整库导出范围。
导出完成后,检查备份文件和日志:
ls -lh /dmdata/dmbak
cat /dmdata/dmbak/FULL_DB_exp.log
完整输出
文件大小
确认导出任务正常结束,并记录导出文件的实际大小、日志结果及耗时。
整库逻辑导入前,需要明确目标环境。
本次建议使用独立的目标 DM8 实例,避免直接向正在使用的源数据库执行整库导入。
准备时需要关注:
需要注意,FULL=Y 表示选择整库逻辑导入范围,并不意味着 dimp 会自动完成目标数据库的初始化,也不应将其理解为覆盖目标库所有物理文件。
在目标数据库上执行导入:
dimp USERID=SYSDBA/Wei_739867901@192.168.234.111:5239 FILE=FULL_DB.dmp LOG=FULL_DB_imp.log DIRECTORY=/dmdata/dmbak FULL=Y
其中,目标地址应替换为目标数据库的实际 IP 或主机名,DIRECTORY 应指向目标端能够读取导出文件的目录。
如果备份文件保存在源数据库服务器,需要先将文件传输到目标端,或者根据实际部署方式使用适当的文件访问路径。
导入过程中应关注命令输出及日志,特别是用户、对象创建、权限和数据导入相关的错误信息。
完整输出
整库导入完成后,不应只根据命令执行结束就判断备份恢复成功。
建议从以下几个方面进行检查:
如果是实际迁移任务,还需要结合源端和目标端的对象清单进行核对。
文章
阅读量
获赞
