达梦逻辑备份dexp和恢复dimp

逻辑备份是指利用 dexp/dexpdp 导出工具,将指定对象(库级、模式级、表级)的数据导出到文件的备份方式。逻辑备份针对的是数据内容,并不关心这些数据物理存储在什么位置。

逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:

  1. 数据库级(FULL): 导出或导入整个数据库中的所有对象。
  2. 用户级(OWNER): 导出或导入一个或多个用户所拥有的所有对象。
  3. 模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。
  4. 表级(TABLES): 导出或导入一个或多个指定的表或表分区。

达梦数据库SYS用户不能用于用户登录,是系统内置用户。

系统模式有:CTISYS,SYS,SYSAUDITOR,SYSDBA,SYSSSO。创建代理环境后会自动创建SYSJOB模式,安装DEM后会自动创建DEM模式。

在全库导出时,系统模式除了SYSDBA,其他模式都默认不导出,可以指定SCHEMAS参数导出,但不是模式下所有对象都会被导出。其中SYS,SYSJOB模式为内部模式,无法导入导出。

1. 导出全库

导出全库并不会导出所有基表

bash 复制代码
dexp SYSDBA/[email protected]:5236 FILE=/home/dmdba/fullbak.dmp log=/home/dmdba/fullbak.log FULL=Y

USERID参数可以省略

DIRECTORY参数可以省略,直接把导出文件的目录写在FILE参数中

2. 导出用户

导出用户会包含该用户下所有schema

若不指定OWNER,则默认导出当前导出用户同名的schema

bash 复制代码
dexp SYSDBA/[email protected]:5236 OWNER=test1,test2 FILE=/home/dmdba/utest.dmp log=/home/dmdba/utest.log

tips!!!

OWNER参数中写了多个用户且有的用户不存在,在某些版本中,dmp日志不会有告警提示。

3.导出模式

bash 复制代码
dexp SYSDBA/[email protected]:5236 SCHEMAS=test1,test2 FILE=/home/dmdba/stest.dmp log=/home/dmdba/stest.log

4. 导出表

bash 复制代码
#若TABLES参数中没有指定表的schema,则默认表属于当前导出用户同名的schema下
dexp SYSDBA/[email protected]:5236 TABLES=RESOURCES.EMPLOYEE,RESOURCES.DEPARTMENT FILE=/home/dmdba/resources.dmp log=/home/dmdba/resources.log

#模糊匹配
dexp SYSDBA/[email protected]:5236 TABLES=RESOURCES.EMP%,PERSON.PER% FUZZY_MATCH=Y FILE=/home/dmdba/ttest.dmp log=/home/dmdba/ttest.log

#使用include方式做模糊匹配
#不管是写多个INCLUDE参数,还是在INCLUDE参数中写多个like,都会被转and条件
dexp SYSDBA/[email protected]:5236 SCHEMAS=RESOURCES INCLUDE="TABLES:\"LIKE '%D%'\"" FILE=/home/dmdba/ttest.dmp log=/home/dmdba/ttest.log 
dexp SYSDBA/[email protected]:5236 SCHEMAS=RESOURCES INCLUDE="TABLES:\"LIKE '%D%'\",TABLES:\"LIKE '%T%'\"" FILE=/home/dmdba/ttest.dmp log=/home/dmdba/ttest.log

#使用子查询匹配表名
dexp SYSDBA/[email protected]:5236 SCHEMAS=RESOURCES INCLUDE="TABLES:\"IN (SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER= 'RESOURCES' AND (TABLE_NAME LIKE 'D%' OR TABLE_NAME LIKE 'E%'))\"" FILE=/home/dmdba/ttest.dmp log=/home/dmdba/ttest.log

#排除指定表并且不导出约束
dexp SYSDBA/[email protected]:5236 SCHEMAS=RESOURCES EXCLUDE="TABLES:\"IN (SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER= 'RESOURCES' AND (TABLE_NAME LIKE 'D%'))\",TABLES:\"LIKE '%T%'\"",CONSTRAINTS FILE=/home/dmdba/ttest.dmp log=/home/dmdba/ttest.log

5. 并行和压缩

如果CPU核数为N的话,那一般来说PARALLEL为N或者N+1最合适。实测开启并性不会创建多个文件,并行开启后,导出速度会快一倍左右,表并行开启后速度没有明显快。

数据压缩等级 (0-9 默认1),压缩等级越高,压缩比越高。

bash 复制代码
dexp SYSDBA/[email protected]:5236 SCHEMAS=RESOURCES COMPRESS=Y COMPRESS_LEVEL=1 PARALLEL=4 FILE=/home/dmdba/stest.dmp log=/home/dmdba/stest.log

6. 导入数据

不管以什么级别方式导出,导入时,dmp文件中所有表的所属用户在目标库中必须提前创建

bash 复制代码
dimp SYSDBA/[email protected]:5236 FILE=/home/dmdba/utest.dmp LOG=imp_utest.log

如果导出时没有指定TABLESPACE=Y,导入时,表会创建在目标库对应用户的默认表空间下,REMAP_TABLESPACE参数是不生效的。

如果导出时指定了TABLESPACE=Y,导入时,对应的表空间必须提前创建,否则报错,也可以使用REMAP_TABLESPACE参数。

bash 复制代码
dimp SYSDBA/[email protected]:5236 FILE=/home/dmdba/utest.dmp LOG=imp_utest.log remap_tablespace=TBS_TEST:MAIN

7. 关于dexpdp/dimpdp

dexpdp/dimpdp与dexp/dimp语法相同

使用dexp导出时,导出的文件会在当前执行导出命令的环境的指定目录下,而dexpdp的导出文件会在指定的数据库服务器上

8. 定时备份脚本

PATH是系统环境变量的路径,不可随便更改,可以在后面添加自己的路径,否则会有command not find的错误

bash 复制代码
[dmdba@localhost ~]$ cat dexp_utest.sh 
#!/bin/sh
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/dmdbms/bin"
export DM_HOME="/opt/dmdbms"
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool

FILE_PATH="/home/dmdba/"
EXP_FILE="utest_`date +%Y%m%d%H%M%S`.dmp"
LOG_FILE="${EXP_FILE}.log"
cd $FILE_PATH
find $FILE_PATH -mtime +7 -name "utest_*" -exec rm -f {} \;

dexp SYSDBA/[email protected]:5236 OWNER=test FILE=$FILE_PATH$EXP_FILE LOG=$FILE_PATH$LOG_FILE TABLESPACE=Y

允许dmdba用户使用crontab程序

bash 复制代码
[root@localhost ~]# cat /etc/cron.allow
dmdba

配置定时任务

bash 复制代码
[root@localhost ~]# crontab -l -u dmdba
0 2 * * * /home/dmdba/dexp_utest.sh &>/dev/null

达梦社区地址
https://eco.dameng.com

相关推荐
数据智能老司机15 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机16 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿16 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
无名之逆16 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010116 小时前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机16 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
hzulwy17 小时前
Redis常用的数据结构及其使用场景
数据库·redis
程序猿熊跃晖17 小时前
解决 MyBatis-Plus 中 `update.setProcInsId(null)` 不生效的问题
数据库·tomcat·mybatis
Three~stone18 小时前
MySQL学习集--DDL
数据库·sql·学习
Qi妙代码18 小时前
MYSQL基础
数据库·mysql·oracle