Linux下expdp自动备份

Oracle 数据泵备份脚本
本文介绍了一个用于 Oracle 数据库的自动备份脚本,通过数据泵导出指定模式的数据,并设置了压缩选项以节省存储空间。此外,脚本还包含了清理旧备份的功能。

创建sh脚本

[oracle@localhost backup]$ vi logicbackup.sh

添加脚本内容

复制代码
#!/bin/sh
# ##################################################################
#             Powered by Ironfo
# ##################################################################
# Oracle Environment settings 
ORACLE_BASE=/usr/local/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1;  export ORACLE_HOME 
PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/ccs/bin:$PATH:/usr/sbin
export PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/product/jlib ; export CLASSPATH
backup_dir=$ORACLE_BASE/admin/orcl/dpdump
#可以创建数据泵目录directory,这里指定默认的目录
#SQL>CREATE DIRECTORY expnc_dd as '/u01/oradata/dump_backup_dir';
#SQL>grant read,write on directory dump_backup_dir to user;  
DMP_FILE=PH_$(date +%Y%m%d_%H%M%S).dmp
LOG_FILE=PH_$(date +%Y%m%d_%H%M%S).log
#
#  Let's start with an export of the database 
expdp user/pwd@orcl schemas=schema_name DUMPFILE=$DMP_FILE logfile=$LOG_FILE compression=all;
#expdp user/pwd@orcl schemas=schema_name DIRECTORY=expnc_dd DUMPFILE=$DMP_FILE logfile=$LOG_FILE compression=all parallel=3;
# 这里的2个说明,用户名和密码换成自己的,我这里是备份表空间。
# parallel 这个参数是控制并行度的,默认是1,但对于数据库比较大的时候,可以设置parallel,这样可以较少备份的
#时间,但是设置并行会耗CPU 资源,如果CPU 资源比较紧张的话,就不要设了。
#
# Just to be safe (with space), we'll compress the export file
# 压缩dmp 文件,较少对空间的占用
#compress *.dmp

#
# Let's delete the backups and logs that are more than 1 days old
# 删除2天前PH_开头的dmp文件
# 
cd /app/backup
find $backup_dir -mtime +2 -name "PH_*"  -exec rm -f {} \;
# That's all
复制代码

:wq 保存并退出

设置权限

[oracle@localhost ~]$ chmod 777 ./logicbackup.sh 

添加定时任务

[oracle@localhost ~]$ crontab -e
#每天20:00执行备份 错误信息将输出到 tmp/expdp.log 文件中
0 20 * * * /app/backup/logicbackup.sh > /app/backup/expdp.log 2>&1

 

重启crond(不重启也行)

#service crond restart

查看任务

[oracle@localhost ~]$ crontab -l
* */6 * * * /home/oracle/logicbackup.sh > /tmp/expdp.log 2>&1
[oracle@localhost ~]$ 
crontab -r 删除定时任务

crontab 前面5个*参数的意义:
0~59 表示分 
1~23 表示小时 
1~31 表示日 
1~12 表示月份 
0~6 表示星期(其中0表示星期日)

转载于:https://www.cnblogs.com/liuguosong/p/6066899.html

### Oracle expdp 自动备份数据库配置方法 #### 背景介绍 Oracle 的 `expdp` 工具是一种强大的数据泵导出功能,可以用于高效地备份整个数据库或特定的 schema。通过创建自动化脚本并结合操作系统级别的调度工具(如 Linux/Unix 中的 cron 或 Windows 中的任务计划程序),可以实现定期自动化的数据库备份。 以下是关于如何使用 `expdp` 实现自动备份的具体说明: --- #### 1. 准备工作 在执行自动备份之前,需要完成以下准备工作: - **确认用户权限** 确保备份使用的用户具有足够的权限来运行 `expdp` 命令,并能够访问目标存储位置[^1]。 - **创建目录对象** 在数据库中定义一个目录对象,指向实际的物理路径作为备份文件的存储位置。例如: ```sql CREATE DIRECTORY backup AS '/backup'; GRANT READ, WRITE ON DIRECTORY backup TO system; ``` 上述命令会创建名为 `backup` 的目录对象,并授予 `system` 用户对该目录的读写权限[^1]。 --- #### 2. 编写备份脚本 为了实现自动化,通常会在操作系统的 shell 脚本中封装 `expdp` 命令。下面是一个典型的备份脚本示例: ```bash #!/bin/bash # 定义变量 export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH BAK_DATE=$(date +"%Y%m%d") DUMP_FILE="db_backup_$BAK_DATE.dmp" LOG_FILE="db_backup_$BAK_DATE.log" # 执行 expdp 备份 expdp helowin/helowin \ SCHEMAS=helowin \ DIRECtORY=data_dir \ DUMPFILE=$DUMP_FILE \ LOGFILE=$LOG_FILE \ COMPRESSION=ALL ``` 上述脚本的功能如下: - 设置环境变量以确保 `expdp` 可正常运行。 - 动态生成基于当前日期的备份文件名和日志文件名。 - 使用 `expdp` 导出指定用户的 Schema 并启用压缩功能[^4]。 --- #### 3. 配置定时任务 在类 Unix 系统上,可以通过 `cron` 来安排该脚本的周期性执行。具体步骤如下: - 编辑 crontab 文件: ```bash crontab -e ``` - 添加一条记录以每天凌晨 2 点触发备份脚本: ```bash 0 2 * * * /path/to/expdpbak.sh >> /var/log/expdp_cron.log 2>&1 ``` 这将使系统每日按时运行备份脚本并将输出保存到 `/var/log/expdp_cron.log` 日志文件中。 --- #### 4. 清理旧备份 为了避免磁盘空间被过多的历史备份占用,可以在脚本中加入清理逻辑。例如,在每次新备份完成后删除超过一定天数的老备份文件: ```bash FIND_PATH="/backup" KEEP_DAYS=7 find $FIND_PATH -type f -name "*.dmp" -mtime +$KEEP_DAYS -exec rm -f {} \; find $FIND_PATH -type f -name "*.log" -mtime +$KEEP_DAYS -exec rm -f {} \; ``` 此部分代码利用 `find` 命令查找超出保留期限的 `.dmp` 和 `.log` 文件并将其删除[^2]。 --- #### 注意事项 - **安全性** 如果脚本中包含敏感信息(如用户名和密码),建议采用更安全的方式传递参数,或者考虑使用 Oracle Wallet 技术加密凭证[^3]。 - **监控与告警** 对于生产环境中重要的备份作业,应建立完善的监控机制,及时发现失败情况并向管理员发送通知。 --- ### 总结 通过以上步骤,可以成功构建一套基于 `expdp` 的 Oracle 数据库自动备份方案。这种方法不仅简单易行,而且灵活性高,适合大多数企业级应用场景。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值