逻辑备份是指利用 dexp/dexpdp 导出工具,将指定对象(库级、模式级、表级)的数据导出到文件的备份方式。逻辑备份针对的是数据内容,并不关心这些数据物理存储在什么位置。
逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:
- 数据库级(FULL): 导出或导入整个数据库中的所有对象。
- 用户级(OWNER): 导出或导入一个或多个用户所拥有的所有对象。
- 模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。
- 表级(TABLES): 导出或导入一个或多个指定的表或表分区。
达梦数据库SYS用户不能用于用户登录,是系统内置用户。
系统模式有:CTISYS,SYS,SYSAUDITOR,SYSDBA,SYSSSO。创建代理环境后会自动创建SYSJOB模式,安装DEM后会自动创建DEM模式。
在全库导出时,系统模式除了SYSDBA,其他模式都默认不导出,可以指定SCHEMAS参数导出,但不是模式下所有对象都会被导出。其中SYS,SYSJOB模式为内部模式,无法导入导出。
1. 导出全库
导出全库并不会导出所有基表
bash
dexp SYSDBA/SYSDBA@127.0.0.1:5236 FILE=/home/dmdba/fullbak.dmp log=/home/dmdba/fullbak.log FULL=Y
USERID参数可以省略
DIRECTORY参数可以省略,直接把导出文件的目录写在FILE参数中
2. 导出用户
导出用户会包含该用户下所有schema
若不指定OWNER,则默认导出当前导出用户同名的schema
bash
dexp SYSDBA/SYSDBA@127.0.0.1:5236 OWNER=test1,test2 FILE=/home/dmdba/utest.dmp log=/home/dmdba/utest.log
tips!!!
OWNER参数中写了多个用户且有的用户不存在,在某些版本中,dmp日志不会有告警提示。
3.导出模式
bash
dexp SYSDBA/SYSDBA@127.0.0.1:5236 SCHEMAS=test1,test2 FILE=/home/dmdba/stest.dmp log=/home/dmdba/stest.log
4. 导出表
bash
#若TABLES参数中没有指定表的schema,则默认表属于当前导出用户同名的schema下
dexp SYSDBA/SYSDBA@127.0.0.1:5236 TABLES=RESOURCES.EMPLOYEE,RESOURCES.DEPARTMENT FILE=/home/dmdba/resources.dmp log=/home/dmdba/resources.log
#模糊匹配
dexp SYSDBA/SYSDBA@127.0.0.1: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/SYSDBA@127.0.0.1:5236 SCHEMAS=RESOURCES INCLUDE="TABLES:\"LIKE '%D%'\"" FILE=/home/dmdba/ttest.dmp log=/home/dmdba/ttest.log
dexp SYSDBA/SYSDBA@127.0.0.1:5236 SCHEMAS=RESOURCES INCLUDE="TABLES:\"LIKE '%D%'\",TABLES:\"LIKE '%T%'\"" FILE=/home/dmdba/ttest.dmp log=/home/dmdba/ttest.log
#使用子查询匹配表名
dexp SYSDBA/SYSDBA@127.0.0.1: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/SYSDBA@127.0.0.1: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/SYSDBA@127.0.0.1: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/SYSDBA@127.0.0.1:5236 FILE=/home/dmdba/utest.dmp LOG=imp_utest.log
如果导出时没有指定TABLESPACE=Y,导入时,表会创建在目标库对应用户的默认表空间下,REMAP_TABLESPACE参数是不生效的。
如果导出时指定了TABLESPACE=Y,导入时,对应的表空间必须提前创建,否则报错,也可以使用REMAP_TABLESPACE参数。
bash
dimp SYSDBA/SYSDBA@127.0.0.1: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/SYSDBA@127.0.0.1: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