暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

达梦篇-dexp&dimp遇见expdp&impdp

原创 布衣 2023-12-19
1971

dexp 与 dimp简介

  逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,联机方式是指数据库服务器正常运行过程中进行的备份和还原。dexp 和 dimp 是 DM 数据库自带的工具,只要安装了 DM 数据库,就可以在安装目录/dmdbms/bin 中找到。
  逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。

  • 四种级别独立互斥,不能同时存在。四种级别所提供的功能:
  1. 数据库级(FULL):导出或导入整个数据库中的所有对象。
  2. 用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象。
  3. 模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。
  4. 表级(TABLES):导出或导入一个或多个指定的表或表分区

下面列举一些常用的操作命令对比,大家感觉一下相关操作的差距:

逻辑导出

  • DM 导出全库:
dexp USERID=SYSDBA/oracle123  FULL=Y FILE=db_str.dmp DIRECTORY=/home/dmdba LOG=db_str.log
  • Oracle 导出全库
expdp system/manager DIRECTORY=DP_DIR DUMPFILE=full.dmp FULL=y;
  • DM 导出用户:two
dexp USERID=two/two  OWNER=two FILE=two.dmp DIRECTORY=/home/dmdba LOG=two.log 
  • Oracle 导出用户:two
expdp two/'two' directory=dp_dir dumpfile=two.dmp 
  • DM 导出表:
# 导出表:t
[dmdba@localhost ~]$ dexp USERID=two/two  TABLES=t FILE=t.dmp DIRECTORY=/home/dmdba LOG=t.log 
# 导出表:t、t1   
dexp USERID=two/two  TABLES=t,t1 FILE=t.dmp DIRECTORY=/home/dmdba LOG=t.log     
# 导出分区表:callinfo,分区:p1,参数说明:TABLE_PARALLEL=3 线程数为 3
dexp USERID=two/two  TABLES=callinfo:p1 FILE=callinfo_p1.dmp DIRECTORY=/home/dmdba LOG=callinfo_p1.log TABLE_PARALLEL=3

  • 导出分区表示列:
-- 创建分区语句: SQL> 2 CREATE TABLE callinfo( 3 caller CHAR(15), 4 callee CHAR(15), 5 time DATETIME, 6 duration INT 7 ) 8 PARTITION BY RANGE(time)( 9 PARTITION p1 VALUES LESS THAN ('2010-04-01'), 10 PARTITION p2 VALUES LESS THAN ('2010-07-01'), 11 PARTITION p3 VALUES LESS THAN ('2010-10-01'), 12 PARTITION p4 VALUES EQU OR LESS THAN (MAXVALUE) 13 ); 操作已执行 已用时间: 16.777(毫秒). 执行号:5206.

image.png

  • Oracle 导出表
# 导出表
expdp two/'two' directory=dp_dir  dumpfile=t.dmp tables=t
# 导出分区表
expdp two/'two' directory=dp_dir  dumpfile=t_p1.dmp tables=t1:p1

逻辑导入

  • DM 全库导入
dimp USERID=SYSDBA/oracle123  FULL=Y FILE=db_str.dmp DIRECTORY=/home/dmdba LOG=db_str.log
  • Oracle 全库导入
impdp system/manager DIRECTORY=DP_DIR DUMPFILE=full.dmp FULL=y;
  • DM 按用户导入
dimp USERID=two/two  OWNER=two FILE=two.dmp DIRECTORY=/home/dmdba LOG=two.log 
  • Oracle 导入用户:two
impdp two/'two' directory=dp_dir dumpfile=two.dmp 
  • DM 按表导入
dimp USERID=two/two   TABLES=t,t1 FILE=t.dmp DIRECTORY=/home/dmdba LOG=t.log 
  • Oracle 按表导入
impdp two/'two' directory=dp_dir  dumpfile=t.dmp tables=t
  • 示例:按表导入
    image.png
  • DM TABLE_EXISTS_ACTION
    TABLE_EXISTS_ACTION 用于要导入的表已经存在时的处理方式。默认为直接报错。
    语法如下:
    TABLE_EXISTS_ACTION=[SKIP | APPEND | TRUNCATE | REPLACE]
    SKIP:跳过此表。
    APPEND:直接向现有表中导入数据
    TRUNCATE:先删除现有表中的数据,再向表中导入数据
    REPLACE:先删除现有表,再导数据
  • Oracle 相关参数说明及操作
#SKIP:默认操作:跳过此表
impdp system/sys directory=expdp_dir dumpfile=t.dmp logfile=t.log TABLE_EXISTS_ACTION=SKIP
#APPEND:在原来数据的基础上增加数据
impdp system/sys directory=expdp_dir dumpfile=t.dmp logfile=t.log TABLE_EXISTS_ACTION=APPEND
#REPLACE:先drop表,然后创建表,最后插入数据
impdp system/sys directory=expdp_dir dumpfile=t.dmp logfile=t.log TABLE_EXISTS_ACTION=REPLACE
#TRUNCATE:先truncate,然后再插入数据
impdp system/sys directory=expdp_dir dumpfile=t.dmp logfile=t.log TABLE_EXISTS_ACTION=TRUNCATE

远程dexp 与 dimp

  • dexp
[dmdba@localhost ~]$ dexp two/two@192.168.5.137:5236 FILE=two.dmp LOG=two.log DIRECTORY=/home/dmdba FULL=Y 
  • dimp
[dmdba@dm206 ~]$ dimp two/two@192.168.5.137:5236 FILE=two.dmp LOG=two.log DIRECTORY=/home/dmdba FULL=Y 

dexpdp与dimpdp

  • dimpdp、dexpdp与dexp、dixp 语法相同。
  • 唯一的区别在于,dexp 导出的文件必须存放在客户端,dexpdp 导出的文件必须存放在服务器端。dimpdp同理
--先连接上远程的数据库服务器 192.168.60
disql SYSDBA/oracle123@192.168.5.137
--在远程服务器上创建目录
CREATE OR REPLACE DIRECTORY "GYFDIR" AS '/home/dmdba';
--使用 dexpdp 导出文件
dexpdp USERID=two/two@192.168.5.137:5236 FILE=two.dmp LOG=two.log FULL=Y DIRECTORY=GYFDIR

备份脚本

  • 简单写了个导出脚本供参考:
#!/bin/sh source /home/dmdba/.bash_profile #清除备份文件 if [ -f /home/dmdba/two.dmp ];then rm -rf /home/dmdba/two.dmp fi #导出命令 dexp USERID=two/two OWNER=two FILE=two.dmp DIRECTORY=/home/dmdba LOG=two.log #清除昨天的备份文件 y_dir=`date +%Y-%m-%d -d "1 day ago"` if [ -d /home/dmdba/$y_dir ];then rm -rf /home/dmdba/$y_dir fi #生成今天的备份目录 f_dir=`date +%Y-%m-%d` if [ -d /home/dmdba/$f_dir ];then rm -rf /home/dmdba/$f_dir mkdir /home/dmdba/$f_dir else mkdir /home/dmdba/$f_dir fi #打包: tar -zcvPf /home/dmdba/two.tar.gz /home/dmdba/two* #删除 rm -rf /home/dmdba/two.dmp #迁移到今天的备份目录 mv /home/dmdba/two* /home/dmdba/$f_dir

总结

  达梦的(dexp/dimp)与Oracle的(exp/imp)的命令操作非常相似,操作也是比较简单。

最后修改时间:2023-12-28 22:30:45
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论