注册
DM8数据库逻辑备份工具使用学习
专栏/技术分享/ 文章详情 /

DM8数据库逻辑备份工具使用学习

BigQ 2026/08/28 215 0 0
摘要

一 逻辑备份基础知识

1.1 逻辑备份工具介绍

达梦DM8数据库提供两套原生逻辑导入导出工具:传统客户端工具 dexp/dimp服务端数据泵工具 dexpdp/dimpdp。逻辑备份区别于物理备份,不依赖数据库物理数据文件,通过解析数据库逻辑对象(表、视图、存储过程、权限、序列等)生成通用dmp二进制备份文件,广泛用于数据迁移、环境克隆、误删恢复、版本升级、测试数据同步等运维场景。

1.2 逻辑备份与物理备份差异

逻辑备份(dexp/dimp/dexpdp/dimpdp)属于业务对象级别备份,读取数据库字典信息与业务数据,与物理存储结构无关,支持跨版本、跨设备迁移;物理备份为文件级拷贝,速度更快,但无法单独恢复单表、单模式数据。

对比维度 逻辑备份 物理备份
备份粒度 业务对象级别,可按库/用户/模式/表四级灵活选择 文件级整库拷贝,粒度较粗
备份内容 表结构、数据、视图、存储过程、权限等逻辑对象 数据文件、日志文件等物理文件
跨版本/跨设备迁移 支持,可跨小版本、跨硬件平台迁移 受限,通常要求页大小、簇大小等参数一致
恢复灵活性 高,可单独恢复单表、单模式、单个用户 低,一般只能整库恢复
备份/恢复速度 较慢,需逐行解析与写入 快,直接文件级拷贝
适用场景 数据迁移、开发测试环境同步、误删单表恢复 生产整库备份、灾难恢复、大容量数据保护

1.3 逻辑导出级别

DM8所有逻辑工具均固定四种操作级别,执行命令只能选择其中一种,不可叠加混用:

  • 全库级 FULL=Y:导出/导入整库所有用户、模式、表、权限、存储过程、触发器等全量对象,适用于整库迁移、环境初始化。
  • 用户级 OWNER:针对指定数据库用户下所有归属对象操作,适用于单一业务账号整体迁移。
  • 模式级 SCHEMAS:运维最常用,针对指定模式隔离操作。
  • 表级 TABLES:仅操作指定单表/多表,用于单表数据恢复、局部数据同步。

二 逻辑备份工具常用参数

2.1 DEXP工具常用参数

2.1.1 导出基础参数

  1. USERID:数据库连接核心参数,必填。格式为「用户名/密码@IP:端口」,本地数据库可省略IP端口,默认连接本地5236端口。支持普通用户、管理员用户连接导出。
  2. FILE:导出dmp备份文件名称,支持自定义命名,超大文件可搭配%U通配符实现文件自动拆分。
    • 如果 FILE 指定的文件包含生成路径,则忽略 DIRECTORY 中的路径;
    • 如果 FILE 没有指定路径时,使用 DIRECTORY 中指定的路径;
    • 如果 FILE 和 DIRECTORY 都没有指定路径,则使用系统当前路径。

2.1.2 四种导出级别参数

导出级别范围参数四选一,不可同时使用,用于精准控制导出粒度,是差异化备份的核心参数。

  1. FULL=Y/N:整库导出参数,默认N。设置Y时导出实例下所有用户、模式、数据表、视图、权限、存储过程、触发器、序列等全量对象,适用于整库迁移、环境全量初始化。

示例:

[dmdba@dm8 dump]$ dexp userid=SYSDBA/XXXX file=fulldb.dmp log=exp_fulldb.log full=y
  1. OWNER=(用户1,用户2):用户级导出,指定多个数据库用户,批量导出对应用户名下所有归属对象,适合多业务账号整体迁移。

示例:

[dmdba@dm8 dump]$ dexp userid=SYSDBA/XXXX file=user.dmp log=exp_user.log owner=app_user,tuser
  1. SCHEMAS=(模式1,模式2):模式级导出,运维最常用参数,精准导出单个或多个业务模式所有对象。

示例:

[dmdba@dm8 dump]$ dexp userid=SYSDBA/XXXX file=schema.dmp log=exp_schema.log schemas=app_user,appinfo
  1. TABLES=(模式.表名):表级导出,支持精准导出单表、多表、分区表,仅导出指定数据表及关联索引、约束,用于单表误删恢复、局部数据同步。

示例:

[dmdba@dm8 dump]$ dexp userid=SYSDBA/XXXX file=tables.dmp log=tables.log tables=dmhr.employee,app_user.emp

2.1.3 导出过滤控制参数

用于灵活控制导出内容,可单独导出表结构或纯数据,适配开发环境结构同步、批量数据抽取场景。

  1. QUERY=条件语句:数据精准过滤参数,支持自定义WHERE条件,导出符合条件的增量数据,例如QUERY=“WHERE CREATE_TIME>‘2026-01-01’”,实现增量数据导出。

示例:

##导出APP_USER模式,其中只导出EMP表中deptno为20的数据 [dmdba@dm8 dump]$ dexp userid=SYSDBA/XXXX file=APP_USER.dmp log=APP_USER.log schemas=APP_USER QUERY=EMP:"WHERE DEPTNO=20" ##EMP表行数 SQL> select count(*) from APP_USER.EMP; 行号 COUNT(*) ---------- -------------------- 1 14 ##EMP表DEPTNO=20的行数 SQL> select count(*) from APP_USER.EMP WHERE DEPTNO=20; 行号 COUNT(*) ---------- -------------------- 1 5 ##导出日志 表APP_USER.EMP导出结束,共导出 5 行数据, 大小 0.229 KB
  1. EXCLUDE:导出排除对象,支持批量过滤无需导出的对象类型。
    • EXCLUDE=<对象种类名>,<对象种类名>

可选对象种类名:

种类 含义
CONSTRAINTS 约束(PK/FK/CHECK/UNIQUE 等)
INDEXES 索引
ROWS 表数据行(只导结构时 EXCLUDE=ROWSROWS=N
TRIGGERS 触发器
GRANTS 权限/授权
VIEWS 视图定义
PROCEDURE 存储过程、存储函数
PACKAGE 包(PACKAGE / PACKAGE BODY)
SEQUENCE 序列
TABLES
STATISTICS 统计信息
HINT 优化器 hint

示例:

##导出APP_USER模式,导出时排除视图 [dmdba@dm8 dump]$ dexp userid=SYSDBA/XXXX file=APP_USER.dmp log=APP_USER.log schemas=APP_USER EXCLUDE=VIEWS
  • EXCLUDE=TYPE: name1,name2
  • EXCLUDE=TYPE:cond,TYPE:cond

可选TYPE:

TYPE 关键字 含义说明 条件写法示例
SCHEMAS 忽略指定模式,若导出级别已是 TABLESSCHEMAS,此写法无效 SCHEMAS:SCH1,SCH2
TABLES 忽略指定表 TABLES:TEMP%,TEST1
VIEWS 忽略指定视图 VIEWS:V1,V2
PROCEDURE 忽略指定存储过程/函数 PROCEDURE:PROC1,PROC2
PACKAGE 忽略指定包 PACKAGE:PKG1,PKG2
SEQUENCE 忽略指定序列 SEQUENCE:SEQ1,SEQ2

可选cond :IN、LIKE、NOT IN、NOT LIKE、BETWEEN AND、>、<、=、>=、<=、<>、!=

示例:

##导出 APP_USER模式,不导出统计信息和EMP、DEPT表 [dmdba@dm8 dump]$ dexp userid=SYSDBA/XXXX file=APP_USER.dmp log=APP_USER.log schemas=APP_USER EXCLUDE=STATISTICS,TABLES:EMP,DEPT ##导出 APP_USER模式,不导出EMP开头的表和DEPT、CLASS表 [dmdba@dm8 dump]$ dexp userid=SYSDBA/Dameng123 file=APP_USER.dmp log=APP_USER.log schemas=APP_USER EXCLUDE=STATISTICS,"TABLES:\"LIKE 'EMP%'\",TABLES:\"IN ('DEPT','CLASS')\""
  1. INCLUDE:精准包含对象,仅导出指定类型数据库对象,适用于仅备份权限、仅备份存储过程等专项备份场景。
    • EXCLUDE=<对象种类名>,<对象种类名>

可选对象种类名:

种类 含义
CONSTRAINTS 约束(PK/FK/CHECK/UNIQUE 等)
INDEXES 索引
ROWS 表数据行
TRIGGERS 触发器
GRANTS 权限/授权
VIEWS 视图定义
PROCEDURE 存储过程、存储函数
PACKAGE 包(PACKAGE / PACKAGE BODY)
SEQUENCE 序列
TABLES
STATISTICS 统计信息
HINT 优化器 hint
  • EXCLUDE=TYPE: name1,name2
  • EXCLUDE=TYPE:cond,TYPE:cond

可选TYPE:

TYPE 关键字 含义说明 条件写法示例
SCHEMAS 只导出指定模式,若导出级别为TABLESSCHEMAS,此写法无效 SCHEMAS:SCH1,SCH2
TABLES 只导出指定表 TABLES:TEMP%,TEST1
VIEWS 只导出指定视图 VIEWS:V1,V2
PROCEDURE 只导出指定存储过程/函数 PROCEDURE:PROC1,PROC2
PACKAGE 只导出指定包 PACKAGE:PKG1,PKG2
SEQUENCE 只导出指定序列 SEQUENCE:SEQ1,SEQ2

可选cond :IN、LIKE、NOT IN、NOT LIKE、BETWEEN AND、>、<、=、>=、<=、<>、!=

示例:

##仅导出DMHR.EMPLOYEE的约束和索引 [dmdba@dm8 dump]$ dexp userid=SYSDBA/xxxxx file=tables.dmp log=tables.log tables=DMHR.EMPLOYEE INCLUDE=CONSTRAINTS,INDEXES
  1. CONSTRAINTS、TABLESPACE、GRANTS、INDEXES、TRIGGERS、ROWS:用来指定某类对象是否被导出。类别分别为约束、表空间、权限、索引、触发器和数据。

该参数含义分别如下:

  • CONSTRAINTS=Y/N:是否导出表约束(主键、外键、唯一约束),默认Y,结构同步场景建议开启。
  • TABLESPACE=Y/N:是否导出表空间 / 表空间组定义,对象语句是否附带存储参数,默认 N;N:剔除表空间相关配置;Y:携带表空间存储选项,仅导出在线状态表空间。
  • GRANTS=Y/N:是否导出对象权限,默认Y,完整导出用户授权关系;测试环境精简备份可设置N,忽略权限导出。
  • INDEXES=Y/N:是否导出索引,默认Y,仅做数据迁移可临时关闭,提升导出速度。
  • TRIGGERS=Y/N:是否导出触发器,默认 Y;依赖触发器业务场景开启,临时同步数据避免触发冗余写入可设 N。
  • ROWS=Y/N:控制是否导出表业务数据,默认Y(结构+数据全导出);设置ROWS=N时,仅导出表结构、索引、约束、注释,不导出任何数据,适用于环境初始化建表。

该参数与exclude、include的功能区别如下:

  • 设为 N 单个关闭 = EXCLUDE 批量排除:效果完全一致,任选一种写法即可;
  • 设为 Y 单个开启 ≠ INCLUDE 批量包含:二者逻辑不同
    • 单独参数设 Y:只是单纯开启某一类对象导出,其余对象沿用默认导出规则;
    • INCLUDE:仅导出罗列的对象类型,未写入的所有对象一律不导出,范围限制更强。
  • 优先级规则:单参数配置、批量参数同时书写时,以后面书写的参数生效 ,文件内参数从上至下解析,后配置的会覆盖前面配置。

示例:

##仅导出app_user模式emp表结构 [dmdba@dm8 dump]$ dexp userid=SYSDBA/Dameng123 file=tables.dmp log=tables.log tables=app_user.emp rows=n

2.1.4 大文件拆分与压缩参数

针对GB、TB级大库导出,解决单文件过大、磁盘空间不足、文件传输困难等问题,生产大库必备。

  1. COMPRESS=Y/N:备份压缩参数,默认N。开启Y后自动压缩dmp备份文件,可节省磁盘空间。
  2. COMPRESS_LEVEL:指定导出数据压缩等级。仅当 COMPRESS=Y 时有效。取值范围 0~9,缺省为 1。数值越大,压缩等级越高,压缩比例越高,0 表示不压缩。
  3. FILESIZE:单文件大小限制,单位支持 字节/K/M/G,例如FILESIZE=1024M,搭配FILE=bak_%U.dmp使用,可自动将超大备份拆分为多个1G分片文件,避免单文件超限。
  4. FILENUM: 用于指定一个模板导出文件的个数,如果没有配置%u 模板则无效。取值范围为 1~65534,缺省为 65534。可选参数。FILENUM 需要和 FILESIZE 搭配使用,FILENUM*FILESIZE要大于等于导出的文件总大小,否则会报错空间不足。

2.1.5 导出并行参数

通过调整并发、缓存参数,最大化利用服务器资源,大幅提升导出速度。

  1. PARALLEL:指定导出的过程中所使用的线程数目,默认16。如果 CPU 核心数为 N的话,那一般来说 PARALLEL 为 N 或者 N+1 最合适。

示例:

[dmdba@dm8 dump]$ dexp userid=SYSDBA/xxxxx file=fulldb.dmp log=fulldb.log full=y parallel=4
  1. TABLE_PARALLEL:指定导出每张表所使用的线程数,默认8。针对超大单表单独设置并发线程,提升大表数据导出效率。如果 CPU 核数为 N 的话,那一般来说 TABLE_PARALLEL 为 N 或者 N+1 最合适 。

示例:

[dmdba@dm8 dump]$ dexp userid=SYSDBA/XXXX file=tables.dmp log=tables.log tables=app_user.emp table_parallel=4

2.1.6 日志与输出参数

  1. LOG:导出日志文件名,记录导出全过程日志、成功对象数、报错信息,运维排查问题必备,建议生产环境必加。
    • 如果 LOG 指定的文件包含生成路径,则忽略 DIRECTORY 中的路径;
    • 如果 LOG 没有指定路径时,使用 DIRECTORY 中指定的路径;
    • 如果 LOG 和 DIRECTORY 都没有指定路径,则使用系统当前路径。
  2. NOLOG:设置屏幕上是否显示日志信息,默认为 N 屏幕显示日志信息。设置为Y 屏幕不显示日志信息。
  3. LOG_WRITE:设置日志信息实时写入日志文件,默认为 N 日志内容先在屏幕上全部打印完毕再写入日志文件。设置为Y,一边将日志内容打印到屏幕上,一边将日志内容写入日志文件。
  4. FEEDBACK:在导出数据的过程中每间隔多少行打印一次进度信息,默认为 0 只打印导出表的总行数。

示例:

##导出dmhr.employee表,每200行显示一次进度 [dmdba@dm8 dump]$ dexp userid=SYSDBA/xxxxx file=tables.dmp log=tables.log tables=dmhr.employee feedback=200 [表: EMPLOYEE]线程[0]导出表[EMPLOYEE]的数据 200 行 [表: EMPLOYEE]线程[0]导出表[EMPLOYEE]的数据 400 行 [表: EMPLOYEE]线程[0]导出表[EMPLOYEE]的数据 429 行 [表: EMPLOYEE]线程[1]导出表[EMPLOYEE]的数据 200 行 [表: EMPLOYEE]线程[1]导出表[EMPLOYEE]的数据 400 行 [表: EMPLOYEE]线程[1]导出表[EMPLOYEE]的数据 427 行 表DMHR.EMPLOYEE导出结束,共导出 856 行数据, 大小 87.269 KB

2.1.7 表数据闪回导出参数

基于系统 LSN 号/时间戳闪回导出,导出该 LSN /时间戳 数据库的一致性快照数据,该功能依赖数据库闪回功能,需要打开数据库闪回功能,闪回指定的 LSN号/时间戳 不能超过 UNDO_RETENTION 指定的保留时间。

  1. FLASHBACK_SCN :基于系统 LSN 号闪回导出,导出该 LSN 时刻数据库的一致性快照数据;
  2. FLASHBACK_TIME :基于时间戳闪回导出,填写具体时间,数据库内部自动换算成对应 SCN,读取该时间点的一致性数据快照;

示例:

[dmdba@dm8 dump]$ dexp userid=SYSDBA/Dameng123 file=tables.dmp log=tables.log tables=app_user.emp flashback_scn=112945

2.2 DIMP工具常用参数

dimp/dimpdp 导入参数适配两套导入工具,整体参数使用与dexp/dexpdp 导出工具用法相同,绝大多数基础参数、性能参数、对象过滤参数的用法、格式、适配规则完全一致,可直接参考导出参数配置使用。本节重点对导入独有、差异化核心参数进行模块化细分讲解,方便对照学习与运维查阅。

2.2.1 导入基础参数

导入必备基础参数,用于建立数据库连接、指定备份文件与日志路径,是所有导入命令的基础配置。

  1. USERID:数据库连接核心参数,必填。格式为「用户名/密码@IP:端口」,本地数据库可省略IP端口,支持管理员与普通授权用户导入数据。
  2. DIRECTORY:文件读取路径参数,传统dimp填写系统真实物理路径,dimpdp数据泵填写数据库DIRECTORY逻辑目录名。
  3. FILE:待导入的dmp备份文件名,支持分片文件通配识别,无需手动指定所有分片。
  4. LOG:导入日志文件名,完整记录导入对象数量、执行耗时、报错信息,生产导入必加,便于问题追溯。

2.2.2 四种导入级别参数

dimp/dimpdp 导入工具与导出工具一致,同样支持全库级、用户级、模式级、表级四种导入粒度,四者互斥、不可同时使用。用于精准控制导入范围,实现按需恢复、局部数据迁移,是精细化数据恢复的核心能力。

该参数为可选参数,默认为导入的文件导出时所用的方式。当导出方式不为 FULL 时,导入时也可以指定为 FULL 方式,此时的 FULL 会将导出文件包含的全部内容导入到指定的实例中。

  1. FULL=Y/N:整库导入参数,默认N。完整还原dmp备份文件中所有数据库对象,包含全部用户、模式、数据表、视图、存储过程、权限、序列、触发器等全量资源。

示例:

[dmdba@dm8 dirdump]$ dimp userid=SYSDBA/XXX:5240 file=fulldb.dmp log=imp_fulldb.log full=y
  1. OWNER=(用户1,用户2):仅导入指定数据库用户名下的所有归属对象,精准还原单一业务账号的全部资源。

示例:

##1. 导出APP_USER,TUSER两个用户 [dmdba@dm8 dirdump]$ dexp userid=SYSDBA/XXX:5236 file=user.dmp log=exp_user.log owner=app_user,tuser ##2. 仅导入APP_USER用户 [dmdba@dm8 dirdump]$ dimp userid=SYSDBA/XXX:5240 file=user.dmp log=imp_user.log owner=app_user ##3. 不指定owner参数或指定 full=y 将导入DMP文件中所有用户 [dmdba@dm8 dirdump]$ dimp userid=SYSDBA/XXX:5240 file=user.dmp log=imp_user.log full=y
  1. SCHEMAS=(模式1,模式2):仅导入指定业务模式下的所有表、视图、函数、存储过程等对象,不受其他用户、模式影响。

示例:

##1. 导出 DMHR,PERSON 两个模式 [dmdba@dm8 dirdump]$ dexp userid=SYSDBA/xxx:5236 file=schemas.dmp log=exp_schemas.log schemas=dmhr,person ##3. 仅导入PERSON 模式 [dmdba@dm8 dirdump]$ dimp userid=SYSDBA/xxx:5240 file=schemas.dmp log=imp_schemas.log schemas=person ##3. 不指定 schemas 参数或指定 full=y 将导入DMP文件中所有模式 [dmdba@dm8 dirdump]$ dimp userid=SYSDBA/xxx:5240 file=schemas.dmp log=imp_schemas.log full=y
  1. TABLES=(模式.表名):仅导入指定的一张或多张数据表,精准恢复局部表数据与结构,不影响库内其他对象。

示例:

##1. 导出 DMHR 模式下employee、department表 [dmdba@dm8 dirdump]$ dexp userid=SYSDBA/Dameng123:5236 file=tables.dmp log=exp_tables.log tables=dmhr.employee,dmhr.department ##3. 仅导入employee 表 [dmdba@dm8 dirdump]$ dimp userid=SYSDBA/Dameng123:5240 file=tables.dmp log=imp_tables.log tables=dmhr.employee ##3. 不指定 tables 参数或指定 full=y 将导入DMP文件中所有表 [dmdba@dm8 dirdump]$ dimp userid=SYSDBA/Dameng123:5240 file=tables.dmp log=imp_tables.log full=y

2.2.3 导入冲突处理参数

用于解决导入过程中数据表已存在、数据重复等冲突问题,是生产数据恢复、增量同步的核心参数。

  1. TABLE_EXISTS_ACTION:表存在冲突处理策略,核心必用参数,包含四种模式:
    • SKIP:跳过已存在数据表,不执行任何操作,保留原表与数据;
    • APPEND:保留原表原有数据,追加导入新数据,适合增量同步;
    • TRUNCATE:清空目标表原有数据,再导入新数据,表结构不变;
    • REPLACE:删除重建数据表,再导入数据,适配表结构变更同步场景。

示例:

--1. 目标库已存在该表,且存在业务数据 [dmdba@dm8 dirdump]$ disql SYSDBA/Dameng123:5240 SQL> select count(*) from DMHR.EMPLOYEE; 行号 COUNT(*) ---------- -------------------- 1 90 --2. 目标库与源库表结构相同 [dmdba@dm8 dirdump]$ dimp userid=sysdba/Dameng123:5240 file=tables.dmp log=imp_tables.log tables=dmhr.employee table_exists_action=truncate [表: EMPLOYEE]表 DMHR.EMPLOYEE 存在且表中记录被删除 [1/8][表: EMPLOYEE]创建表已完成,导入表 EMPLOYEE 的数据中... 表 DMHR.EMPLOYEE 的数据导入完成,共导入数据:856 行, 大小 87.269 KB --3. 目标库与源库表结构不同 [dmdba@dm8 dirdump]$ dimp userid=sysdba/Dameng123:5240 file=tables.dmp log=imp_tables.log tables=dmhr.employee table_exists_action=replace [0/8][表: EMPLOYEE]创建表 DMHR.EMPLOYEE ... [1/8][表: EMPLOYEE]创建表已完成,导入表 EMPLOYEE 的数据中... 表 DMHR.EMPLOYEE 的数据导入完成,共导入数据:856 行, 大小 87.269 KB
  1. PRIMARY_CONFLICT:仅处理主键冲突,对有主键的表生效;普通唯一索引冲突不受控。通常搭TABLE_EXISTS_ACTION=APPEND 使用。

该参数的取值及使用场景如下:

参数取值 核心行为 冲突行处理 适用场景
默认(不设置) 遇到主键重复直接报错,导入中断 原表数据不变,导入终止 要求数据完全干净,零容忍重复
IGNORE 跳过 dmp 中主键重复行,继续导入其余数据 保留目标库旧行,丢弃 dmp 冲突行 增量导入,以目标库数据为准
OVERWRITE 先 DELETE 目标库冲突行,再 INSERT dmp 行(触发 DELETE 触发器) 删除旧行,写入 dmp 新行 整行替换,数据完全来自 dmp
OVERWRITE2 主键匹配则 UPDATE,不匹配则 INSERT(触发 UPDATE 触发器) 更新 dmp 带的字段,目标库其他字段保留 增量同步,只更新变化字段
  1. IGNORE=Y/N:忽略创建数据库对象错误,默认N。设置Y可自动跳过主键冲突、唯一索引重复、对象已存在等报错,避免批量导入任务中断,适合大批量增量导入场景。

示例:

--1. 源库导出 employee 表 [dmdba@dm8 dirdump]$ dexp userid=SYSDBA/Dameng123:5236 file=tables.dmp log=exp_tables.log tables=dmhr.employee --2. 目标库查询 employee 表,表已存在,数据为 0 [dmdba@dm8 dirdump]$ disql SYSDBA/Dameng123:5240 SQL> select count(*) from DMHR.EMPLOYEE; 行号 COUNT(*) ---------- -------------------- 1 0 --3. 目标库正常导入表数据,因表已存在,导入任务终止 [dmdba@dm8 dirdump]$ dimp userid=SYSDBA/Dameng123:5240 file=tables.dmp log=imp_tables.log tables=dmhr.employee [警告]表已存在,表 DMHR.EMPLOYEE 导入失败... 成功终止导入, 出现1个警告 --4. 目标库查询 employee 表数据 [dmdba@dm8 dirdump]$ disql SYSDBA/Dameng123:5240 SQL> select count(*) from DMHR.EMPLOYEE; 行号 COUNT(*) ---------- -------------------- 1 0 --5. 目标库导入表数据,同时指定 IGNORE 参数忽略导入过程中的报错 [dmdba@dm8 dirdump]$ dimp userid=SYSDBA/Dameng123:5240 file=tables.dmp log=imp_tables.log tables=dmhr.employee ignore=y --6. 目标库查询 employee 表数据 [dmdba@dm8 dirdump]$ disql SYSDBA/Dameng123:5240 SQL> select count(*) from DMHR.EMPLOYEE; 行号 COUNT(*) ---------- -------------------- 1 856

2.2.4 导入重映射参数

主要用于跨服务器、跨环境迁移,解决源库与目标库模式名、表空间名不一致导致的导入失败问题。达梦数据库支持三种映射关系:数据库模式重映射、数据库表重映射、数据库表空间重映射。

  1. REMAP_SCHEMA:模式重映射参数,迁移高频核心参数,格式为「源模式名:目标模式名」,可将导出的旧模式数据完整导入至全新自定义模式,实现模式重命名、环境克隆,重映射后模式拥有者为导入时使用的用户

示例:

[dmdba@dm8 ~]$ dimp userid=sysdba/Dameng123:5240 file=schema.dmp log=imp_schema.log remap_schema=APPINFO:APP_INFO
  1. REMAP_TABLE:表重映射参数,将源表/视图中的数据导入到目的表/视图中,对导入的表进行重命名,语句格式为[<SOURCE_SCHEMA>.]<SOURCE_TABLE>:<TARGET_TABLE>。

示例:

##1. 源库导出dmhr.employee和app_user.dept两个表 [dmdba@dm8 dirdump]$ dexp userid=sysdba/Dameng123:5236 file=tables.dmp log=exp_tables.log tables=dmhr.employee,app_user.dept ##2. 目标库导入并进行重命名,dmhr.employee重命名为dmhr.emp2026、app_user.dept重命名为app_user.dept2026 [dmdba@dm8 dirdump]$ dimp userid=sysdba/Dameng123:5240 file=tables.dmp log=imp_tables.log remap_table=dmhr.employee:emp2026,app_user.dept:dept2026
  1. REMAP_TABLESPACE:表空间重映射参数,格式为「源表空间:目标表空间」,解决源库自定义表空间、目标库无对应表空间的报错,适配异构环境迁移。

示例:

##1. 源库 APP_USER 用户默认表空间为 DMDATA [dmdba@dm8 dirdump]$ disql SYSDBA/Dameng123:5236 SQL> SELECT USERNAME,DEFAULT_TABLESPACE,DEFAULT_INDEX_TABLESPACE FROM DBA_USERS WHERE USERNAME='APP_USER'; 行号 USERNAME DEFAULT_TABLESPACE DEFAULT_INDEX_TABLESPACE ---------- -------- ------------------ ------------------------ 1 APP_USER DMDATA DMDATA ##2. 源库 APP_USER 用户导出 [dmdba@dm8 dirdump]$ dexp userid=sysdba/Dameng123:5236 file=owner.dmp log=exp_owner.log owner=app_user tablespace=y ##3. 目标库 APP_USER 用户导入 [dmdba@dm8 dirdump]$ dimp userid=sysdba/Dameng123:5240 file=owner.dmp log=imp_owner.log owner=app_user remap_tablespace=DMDATA:UDATA ##4. 目标库 APP_USER 用户默认表空间为 UDATA [dmdba@dm8 dirdump]$ disql SYSDBA/Dameng123:5240 SQL> SELECT USERNAME,DEFAULT_TABLESPACE,DEFAULT_INDEX_TABLESPACE FROM DBA_USERS WHERE USERNAME='APP_USER'; 行号 USERNAME DEFAULT_TABLESPACE DEFAULT_INDEX_TABLESPACE ---------- -------- ------------------ ------------------------ 1 APP_USER UDATA UDATA

2.2.5 仅导入数据参数

精准控制导入内容,可单独导入结构或纯数据,适配不同环境同步、数据修复场景。

  1. DATA_ONLY=Y/N:仅导入业务数据,默认N。设置Y时只导入表数据,不创建表结构、索引、约束、触发器,适用于表结构一致的增量数据恢复。

示例:

##1. 源库导出 dmhr.employee 表 [dmdba@dm8 dirdump]$ dexp userid=sysdba/Dameng123:5236 file=table.dmp log=exp_table.log tables=dmhr.employee ##2. 目标库导入表结构 [dmdba@dm8 dirdump]$ dimp userid=sysdba/Dameng123:5240 file=table.dmp log=imp_table.log rows=n ##3. 目标库导入表数据 [dmdba@dm8 dirdump]$ dimp userid=sysdba/Dameng123:5240 file=table.dmp log=imp_table1.log data_only=y 表 DMHR.EMPLOYEE 的数据导入完成,共导入数据:856 行, 大小 87.269 KB

2.2.6 快速装载数据参数

针对大批量、超大表导入场景,优化写入逻辑、提升导入效率,缩短生产恢复耗时。

  1. FAST_LOAD=Y/N:是否使用 dmfldr 进行数据导入,默认N。设置 Y 时启用 dmfldr 物理高速装载机制,数据写入性能大幅提升。
  2. TABLE_PARALLEL:为超大表单独设置装载并发线程,配合快速装载进一步提升单表导入速度,仅在FAST_LOAD 为 Y 时有效;如果 CPU 核数为 N 的话,那一般来说 TABLE_PARALLEL 为 N 或者 N+1 最合适。在 MPP 模式下会转换成单线程。

示例:

[dmdba@dm8 dirdump]$ dimp userid=sysdba/Dameng123:5240 file=tables.dmp log=imp_tables.log tables=dmhr.employee fast_load=y table_parallel=4
  1. FLDR_ORDER:使用 dmfldr 时,是否严格按导出顺序来导入数据,默认Y。当设置为N,表示不按照导出顺序来导入,数据的创建为随机生成。

2.2.7 索引导入处理参数

  1. INDEXFILE:用于将表的索引/约束创建信息写入指定的文件。指定该参数时,索引、约束不执行导入,仅将创建信息和属性信息写入指定的文件。
    当存在大表数据导入时,索引和约束的导入非常慢,整体耗时将会增加。指定该参数后导入时仍会导入表数据,只是在导入索引、约束时,不再执行,而是将语句输出到指定的文件中,数据导入完成后,可选择的通过并行的方式进行添加。

示例:

[dmdba@dm8 dirdump]$ dimp userid=sysdba/Dameng123:5240 file=tables.dmp log=imp_tables.log tables=dmhr.employee indexfile=/dirdump/idx_emp.txt 表 DMHR.EMPLOYEE 的数据导入完成,共导入数据:856 行, 大小 87.269 KB [2/8][表: EMPLOYEE]将表的索引/约束信息写入指定的文件 [dmdba@dm8 dirdump]$ cat idx_emp.txt ALTER TABLE "DMHR"."EMPLOYEE" ADD CONSTRAINT "EMP_EMAIL_UK" UNIQUE("EMAIL") ALTER TABLE "DMHR"."EMPLOYEE" ADD CONSTRAINT "EMP_DEPT_FK" FOREIGN KEY("DEPARTMENT_ID") REFERENCES "DEPARTMENT"("DEPARTMENT_ID") ALTER TABLE "DMHR"."EMPLOYEE" ADD CONSTRAINT "EMP_JOB_FK" FOREIGN KEY("JOB_ID") REFERENCES "JOB"("JOB_ID") ALTER TABLE "DMHR"."EMPLOYEE" ADD CONSTRAINT CHECK("SALARY" > 0)
  1. INDEXFIRST=Y/N:设置导入时是否先建索引,默认为N。当设置为 Y 时,先创建索引再导入数据,避免大表数据导入时,长时间卡在索引创建阶段,导致导入整体耗时增加。

2.2.8 建库参数不同处理

  1. IGNORE_INIT_PARA :用于指定源库和目标库之间忽略差异的建库参数,不指定该参数时会进行提醒并交互式输入确认。

该参数取值如下:

  • 0:不忽略;
  • 1:忽略 CASE_SENSITIVE 参数差异;
  • 2:忽略 LENGTH_IN_CHAR 参数差异;
  • 3:忽略 CASE_SENSITIVE、LENGTH_IN_CHAR 参数差异,可选参数。

示例:

##1. 源库敏感,导出 TCASE 模式 [dmdba@dm8 dirdump]$ dexp userid=sysdba/Dameng123:5236 file=schema.dmp log=exp_schema.log schemas=tcase ##2. 目标库不敏感,导入 TCASE 模式,不加 IGNORE_INIT_PARA 参数 [dmdba@dm8 dirdump]$ dimp userid=sysdba/Dameng123:5240 file=schema.dmp log=imp_schema.log schemas=tcase [警告]服务器与文件内数据的 CASE_SENSITIVE 参数不匹配 [警告]可能会有错误发生!!! 是否继续(y/n, 1/0):y <----交互式输入 成功终止导入, 出现1个警告 ##2. 目标库不敏感,导入 TCASE 模式,加 IGNORE_INIT_PARA 参数 [dmdba@dm8 dirdump]$ dimp userid=sysdba/Dameng123:5240 file=schema.dmp log=imp_schema.log schemas=tcase ignore_init_para=1 成功终止导入, 没有出现警告 <----导入时忽略差异,不报告异常

2.3 DEXPDP/DIMPDP工具参数

DM8 逻辑备份工具分为传统工具 dexp/dimp 以及数据泵工具 dexpdp/dimpdp。其中 dexpdp/dimpdp 本质为客户端下发指令,由服务端调度运行 dexp/dimp,因此两类工具大部分参数能够共用。

dexpdp、dimpdp 的参数功能与使用方式,可参照前文 dexp/dimp 的常用参数说明;本节仅介绍二者存在差异的专属参数。

2.3.1 数据库目录

文件存储路径参数,两类工具使用规则不同:传统dexp填写服务器真实物理路径;数据泵dexpdp填写数据库预先创建的DIRECTORY逻辑目录名
两种工具关于数据库目录的影响如下:

  • 使用 dexp 工具时,DIRECTORY 为可选参数,缺省导出到 dexp 所在路径;
  • 使用 dexpdp 工具时,DIRECTORY 为必选参数,并且指定的路径必须是通过 CREATE DIRECTORY 定义的目录名。
  • FILE 和 LOG 中指定的路径,优先级高于 DIRECTORY 中指定的路径。当 FILE 和 LOG 不指定路径时,才使用 DIRECTORY 指定的路径。如果都没有指定路径,则使用系统当前路径。

创建数据库目录,可参考如下语句:

SQL> create directory DIRDUMP as '/dirdump';

示例:

(1)使用 dexp 工具导出 APP_USER 用户

## 1.导出 APP_USER 用户 [dmdba@dm8 dump]$ dexp userid=SYSDBA/xxx file=app_user.dmp log=appuser_exp.log owner=app_user DIRECTORY=/dump ##2. 查看导出的文件 [dmdba@dm8 dump]$ pwd /dump [dmdba@dm8 dump]$ ll 总用量 40 -rw-r--r-- 1 dmdba dinstall 34787 7月 31 10:06 app_user.dmp -rw-r--r-- 1 dmdba dinstall 3018 7月 31 10:06 appuser_exp.log

(2)使用 dexpdp 工具导出 APP_USER 用户

##1. 数据库创建 DIRECTORY 目录 SQL> CREATE OR REPLACE DIRECTORY DIRDUMP AS '/dirdump'; 操作已执行 ##2. 导出 APP_USER 用户 [dmdba@dm8 dump]$ dexpdp userid=SYSDBA/XX file=app_user.dmp log=appuser_exp.log owner=app_user DIRECTORY=DIRDUMP ##3. 查看导出的文件 [dmdba@dm8 dirdump]$ pwd /dirdump [dmdba@dm8 dirdump]$ ll 总用量 40 -rw-r--r-- 1 dmdba dinstall 34787 7月 31 10:02 app_user.dmp -rw-r--r-- 1 dmdba dinstall 3037 7月 31 10:02 appuser_exp.log

(3)FILE 和 LOG中指定文件路径,优先级大于 DIRECTORY 指定的路径

##1. 指定DMP文件和日志的路径 [dmdba@dm8 dump]$ dexpdp userid=SYSDBA/Dameng123 file=/home/dmdba/dump/app_user.dmp log=/home/dmdba/dump/appuser_exp.log owner=app_user DIRECTORY=DIRDUMP ##2. 查看导出的文件 [dmdba@dm8 dump]$ pwd /home/dmdba/dump [dmdba@dm8 dump]$ ll 总用量 40 -rw-r--r-- 1 dmdba dinstall 34787 7月 31 10:10 app_user.dmp -rw-r--r-- 1 dmdba dinstall 3071 7月 31 10:10 appuser_exp.log

2.4 参数文件

PARFILE 为 导出工具 通用参数文件,支持将所有导出、导入命令参数统一写入文本配置文件,执行任务时直接读取配置文件加载参数,无需在命令行堆砌大量参数。生产批量备份、定时任务、标准化迁移场景首选,可大幅简化命令、统一配置、避免参数输错。

2.4.1 数据导出

##1. 编辑 parfile 文件,根据需求加入对应的参数 [dmdba@dm8 dirdump]$ vi expuser.par file=owner_%U.dmp log=exp_owner.log owner=app_user tablespace=y ##2. 后台运行数据导出 [dmdba@dm8 dirdump]$ nohup dexp userid=sysdba/Dameng123:5236 parfile=expuser.par & ##3. 查看导出日志 [dmdba@dm8 dirdump]$ tail -200f nohup.out

2.4.2 数据导入

##1. 编辑 parfile 文件,根据需求加入对应的参数 [dmdba@dm8 dirdump]$ vi impuser.par file=owner.dmp log=imp_owner.log owner=app_user ##2. 后台运行数据导出 [dmdba@dm8 dirdump]$ nohup dimp userid=sysdba/Dameng123:5240 parfile=impuser.par & ##3. 查看导出日志 [dmdba@dm8 dirdump]$ tail -200f nohup.out
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服