注册
逻辑备份与还原
专栏/技术分享/ 文章详情 /

逻辑备份与还原

🌊Amaharashi 2026/08/28 86 0 0
摘要

1 环境信息

操作系统:CentOS Linux 7;
数据库软件:达梦数据库DM8;
虚拟平台:VMware Workstation Pro;
CPU架构:x86_64。

2 应用实例

cat > /tmp/dm_check.sql << ‘EOF’
SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TABLES;
SELECT COUNT(*) FROM TEST_DW;
exit;
EOF
su - dmdba -c ‘/home/dmdba/dmdbms/bin/disql
SYSDBA/Dameng123@127.0.0.1:5238 `/tmp/dm_check.sql’
image.png
主库有 TEST_DW 表,2行数据。
先创建导出目录,再执行导出:
mkdir -p /home/dmdba/dm_exp && chown dmdba:dinstall /home/dmdba/dm_exp
su - dmdba -c ‘/home/dmdba/dmdbms/bin/dexp
SYSDBA/Dameng123@127.0.0.1:5238 FILE=/home/dmdba/dm_exp/test_dw.dmp TABLES=TEST_DW LOG=/home/dmdba/dm_exp/exp1.log’
命令解释:

  • SYSDBA/Dameng123@127.0.0.1:5238 — 连接主库
  • FILE= — 导出的 .dmp 文件路径
  • TABLES=TEST_DW — 只导出这一个表
  • LOG= — 日志记录
    image.png
    dimp SHOW 查看导出文件内容:
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/dimp
    SYSDBA/Dameng123@127.0.0.1:5238 FILE=/home/dmdba/dm_exp/test_dw.dmp SHOW=Y FULL=Y LOG=/home/dmdba/dm_exp/show.log’
    SHOW=Y 只打印SQL不导入
    image.png
    dimp 导入到测试库(端口 25239)
    先把测试库上可能存在的旧表删掉,再导入:
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/disql
    SYSDBA/Dameng123@127.0.0.1:25239 -E “DROP TABLE IF EXISTS
    TEST_DW;”’
    然后导入:
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/dimp
    SYSDBA/Dameng123@127.0.0.1:25239 FILE=/home/dmdba/dm_exp/test_dw.dmp
    FULL=Y LOG=/home/dmdba/dm_exp/imp1.log’
    image.png
    验证测试库上数据是否到位:
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/disql
    SYSDBA/Dameng123@127.0.0.1:25239 -E “SELECT * FROM TEST_DW;”’
    image.png
    dimp TABLE_EXISTS_ACTION(表已存在时的处理策略)
    先在测试库上删掉一行模拟变化,再用 REPLACE 覆盖回去:
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/disql
    SYSDBA/Dameng123@127.0.0.1:25239 -E “DELETE FROM TEST_DW WHERE ID=999; COMMIT; SELECT * FROM TEST_DW;”’
    image.png
    然后执行覆盖导入:
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/dimp
    SYSDBA/Dameng123@127.0.0.1:25239 FILE=/home/dmdba/dm_exp/test_dw.dmp FULL=Y TABLE_EXISTS_ACTION=REPLACE
    LOG=/home/dmdba/dm_exp/imp_replace.log’
    image.png
    验证 ID=999 是否恢复:
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/disql
    SYSDBA/Dameng123@127.0.0.1:25239 -E “SELECT * FROM TEST_DW;”’
    image.png
    dexp QUERY 过滤导出(只导出部分行)
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/dexp
    SYSDBA/Dameng123@127.0.0.1:5238 FILE=/home/dmdba/dm_exp/test_dw_filter.dmp TABLES=TEST_DW
    QUERY=“WHERE ID=1” LOG=/home/dmdba/dm_exp/exp_filter.log’
    QUERY=WHERE ID=1 只导出满足条件的行。
    image.png
    过滤导出成功 — 完整表 2 行,加了 WHERE ID=1 后只导出 1 行。
    最后一步:把这个过滤后的文件导入测试库,验证确实只有 ID=1:
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/disql
    SYSDBA/Dameng123@127.0.0.1:25239 -E “DROP TABLE IF EXISTS
    TEST_DW;”’
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/dimp
    SYSDBA/Dameng123@127.0.0.1:25239 FILE=/home/dmdba/dm_exp/test_dw_filter.dmp FULL=Y
    LOG=/home/dmdba/dm_exp/imp_filter.log’
    su - dmdba -c ‘/home/dmdba/dmdbms/bin/disql
    SYSDBA/Dameng123@127.0.0.1:25239 -E “SELECT * FROM TEST_DW;”’
    image.png
    image.png
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服