达梦逻辑备份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

相关推荐
好吃的肘子3 分钟前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
weixin_4723394612 分钟前
MySQL MCP 使用案例
数据库·mysql
lqlj22331 小时前
Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
数据库·sql·spark
遗憾皆是温柔2 小时前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
未来之窗软件服务2 小时前
Cacti 未经身份验证SQL注入漏洞
android·数据库·sql·服务器安全
fengye2071612 小时前
在MYSQL中导入cookbook.sql文件
数据库·mysql·adb
Ailovelearning3 小时前
neo4j框架:ubuntu系统中neo4j安装与使用教程
数据库·neo4j
_星辰大海乀4 小时前
表的设计、聚合函数
java·数据结构·数据库·sql·mysql·数据库开发
未来之窗软件服务4 小时前
solidwors插件 开发————仙盟创梦IDE
前端·javascript·数据库·ide·仙盟创梦ide
yc_12244 小时前
SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
数据库·c#