背景
项目通常会部署drman自动备份作业,但这个是基于全库的备份。
有时会需要按用户模式进行备份,因此可以使用dexp来进行逻辑导出。
并且dexp工具支持远程备份,结合drman可以做双重保障。
备份脚本
1、手动创建备份目录
[root@db1 ~]# mkdir -p /dmdata/EXP_BAK/
[root@db1 ~]# chown -R dmdba:dinstall /dmdata/EXP_BAK/
2、创建备份脚本
注意环境变量这里:
通用机一般是 /home/dmdba/dmdbms/bin
cd /dmdata/EXP_BAK/
vi bak.sh
#!/bin/bash
source /etc/profile
export DM_HOME=/home/dmdba/dmdbms
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dmdba/dmdbms/bin
export PATH
#输入参数
DBuser=$1
DBpwd=$2
Host_Port=$3
bak_dir=$4
#时间戳
time=$(date '+%Y%m%d_%H%M%S')
#开始备份
dexp ${DBuser}/${DBpwd}@${Host_Port} owner=${DBuser} directory=${bak_dir} file=${DBuser}_${time}.dmp log=${DBuser}_${time}.log parallel=8 COMPRESS=Y
3、手动执行备份脚本
输入四个参数:
数据库用户名 platform
数据库密码 dameng123
IP地址:端口号 192.168.93.101:6236
备份路径 /dmdata/EXP_BAK
例如:
sh bak.sh platform dameng123 192.168.93.101:6236 /dmdata/EXP_BAK
表示: 备份库 platform/dameng123@192.168.93.101:6236,备份路径 /dmdata/EXP_BAK
查看备份集:
[dmdba@db1 ~]# ls /dmdata/EXP_BAK
[dmdba@db1 ~]# platform_20210525_172713.dmp
[dmdba@db1 ~]# platform_20210525_172713.log
删除脚本
1、创建脚本
vi delete_bak.sh
#!/bin/bash
#输入参数:备份路径 删除天数 文件通配符(用户名)
Delete_Dir=$1
Delete_days=$2
Delete_User=$3
#删除xx天前的备份
find ${Delete_Dir} -mtime +${Delete_days} -name "${Delete_User}_*.dmp" -exec rm -rf {} \;
find ${Delete_Dir} -mtime +${Delete_days} -name "${Delete_User}_*.log" -exec rm -rf {} \;
2、执行脚本
输入三个参数:
备份文件路径
删除天数(整数,即删除多少天以前的文件)
文件名关键字(通常是数据库用户名为前缀的文件)
例如:
sh delete_bak.sh /dmdata/EXP_BAK 5 platform
表示 查找/dmdata/EXP_BAK目录下,删除5天前的,以platform开头的.dmp 和.log 文件。
删除....
platform_20210525_172713.dmp
platform_20210525_172713.log
结合crontab做定时任务
crontab -e
#每隔4小时执行一次备份
0 */4 * * * sh /dmdata/EXP_BAK/bak.sh platform dameng123 192.168.93.101:6236 /dmdata/EXP_BAK
#每天凌晨1点删除7天前的文件
00 01 * * * sh /dmdata/EXP_BAK/delete_bak.sh /dmdata/EXP_BAK 7 platform