Oracle逻辑备份脚本【生产环境适用】

1 说明

从Oracle10g开始,引入了数据泵(Data Pump),是一种高效的数据传输工具,它通过导出(Export)和导入(Import)的方式帮助用户迁移数据。

在Oracle的产品设计中,数据泵(Data Pump)主要用于数据迁移。尽管它可以用于恢复特定时间点的数据库状态,但它并不提供在指定时间段内的灵活恢复点选择功能。因此,从严格意义上讲,数据泵备份并不是一种全面的数据保护解决方案,而更多地被视为一种临时性的最低限度保护措施。为了达到更好的数据保护效果,建议将数据泵与RMAN(Recovery Manager)结合使用。

下面介绍生产中一个常用的逻辑备份脚本。

2 准备工作

准备工作主要有备份空间分配、脚本路径创建等。

2.1 备份空间分配

数据泵主要在Server端工作,导出的文件需要写入到Server端本地目录,需要在数据库中创建一个DIRECTORY,对应的是Server端的路径。

逻辑备份由于是生成在本地,在生产环境中,建议DIRECTORY创建在非数据路径下,最好使用一个独立的磁盘挂载,可以保障当磁盘发生故障时,数据文件和备份文件不会同时损坏。

最保险的方式是,将备份文件拷贝到网络盘中,相当于异机备份

2.1.1 创建备份目录

root@oracle11g \~\]# mkdir /expdp \[root@oracle11g \~\]# chown oracle:oinstall /expdp/ \[root@oracle11g \~\]# ll / \| grep expdp drwxr-xr-x 2 oracle oinstall 4096 Sep 25 00:07 expdp 路径需要预留足够大的空间。 #### 2.1.2 创建一个DIRECTORY 登录数据库创建: ```sql SQL> create or replace directory expdp as '/expdp'; Directory created. ``` 查看创建结果: ```sql SQL> set lines 200 col DIRECTORY_PATH for a70 select * from dba_directories where directory_name = 'EXPDP'; OWNER DIRECTORY_NAME DIRECTORY_PATH ------------------------------ ------------------------------ ---------------------------------------------------------------------- SYS EXPDP /expdp ``` ### 2.2 脚本路径创建 使用oracle用户创建: ```bash $ su - oracle $ cd /u01/app/oracle $ mkdir -p expdp/src $ mkdir -p expdp/log $ tree expdp expdp |-- log `-- src 2 directories, 0 files ``` src目录用于存放备份脚本,log目录用于存放备份日志。 ## 3 脚本部署 ### 3.1 说明 * 此脚主要用于导出schemas参数指定的模式,本例中为LU9UP、SCOTT; * 备份文件和日志临时存放至 ${DMP_BASE}/${DATE}目录; * 备份文件和备份过程日志最终打包存放至仓库EXPDP目录/expdp下; * 压缩后删除临时目录${DATE}; * 最后清理七天前的压缩文件。 日志长期保存的路径位于/u01/app/oracle/expdp/log。 ### 3.2 部署脚本 oracle用户进入/u01/app/oracle/expdp/src目录,编辑脚本: ```bash $ cd /u01/app/oracle/expdp/src $ vi expdp_schemas.sh ``` 脚本内容如下,请根据实际情况修改参数值: ```bash #!/bin/bash # ## environment variables # export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss' DBNAME=orcl SCP_BASE=/u01/app/oracle/expdp DMP_LOGDIR=${SCP_BASE}/log DMP_BASE=/expdp if [ -f $HOME/.bash_profile ]; then export ORAENV_ASK=NO . $HOME/.bash_profile fi # ## command # DATE=`date +'%Y%m%d%H'` cd $DMP_BASE RUN_LOG=${DATE}_${DBNAME}_SCHEMAS.log expdp "'/ as sysdba'" \ directory=EXPDP \ dumpfile=${DATE}_SCHEMAS%U.dmp \ schemas=LU9UP,SCOTT \ parallel=4 \ logfile=${RUN_LOG} \ flashback_time=\"to_timestamp\(to_char\(sysdate, \'yyyy-mm-dd hh24:mi:ss\'\),\'yyyy-mm-dd hh24:mi:ss\'\)\" # ## deleted 7 days ago files # echo -e "\n\n******************************************************************************" >> ${RUN_LOG} echo -e "## deleted 7 days ago compressed file" >> ${RUN_LOG} echo -e "******************************************************************************" >> ${RUN_LOG} echo -e `find ${DMP_BASE} -type f -name "*.tar.gz" -mtime +7` >> ${RUN_LOG} find ${DMP_BASE} -type f -name "*.tar.gz" -mtime +7 -exec rm -f {} \; # ## compress # CURENTDIR=${DMP_BASE}/${DATE} if [ ! -d ${CURENTDIR} ]; then mkdir ${CURENTDIR} fi cd ${DMP_BASE} mv ${DATE}_SCHEMAS*.dmp ${DATE} cp ${RUN_LOG} ${DMP_LOGDIR} mv ${RUN_LOG} ${DATE} tar -zcvf ${DATE}.tar.gz ${DATE} rm -rf ${DATE} sleep 5 ``` 保存并退出,赋执行权限: ```bash $ chmod +x expdp_schemas.sh ``` ## 4 脚本试运行 ### 4.1 执行脚本 ```bash $ cd /u01/app/oracle/expdp/src $ ./expdp_schemas.sh ``` ![image.png](https://img-blog.csdnimg.cn/img_convert/027a253e2e4398fcb6bf0173f5b56229.png) ### 4.2 检查备份日志 ```bash $ tail -20 /u01/app/oracle/expdp/log/2024092502_orcl_SCHEMAS.log ``` ![image.png](https://img-blog.csdnimg.cn/img_convert/919480e8367fa91a0758fcbbcbf46736.png) ### 4.3 查看备份文件 ```bash $ ll /expdp total 3116 -rw-r--r-- 1 oracle oinstall 3186906 Sep 25 02:47 2024092502.tar.gz ``` ## 5 配置定时任务 添加如下任务: ```bash [oracle@oracle11g ~]$ crontab -l #DB Logical Backup 0 1 * * * sh /u01/app/oracle/expdp/src/expdp_schemas.sh >/dev/null 2>&1 ``` 每天凌晨1点执行一次。

相关推荐
异世界贤狼转生码农2 小时前
MongoDB Windows 系统实战手册:从配置到数据处理入门
数据库·mongodb
QuZhengRong2 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
码农阿豪2 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
时序数据说7 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.11 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)11 小时前
KINGBASE集群日常维护管理命令总结
数据库·database
妖灵翎幺11 小时前
Java应届生求职八股(2)---Mysql篇
数据库·mysql
HMBBLOVEPDX11 小时前
MySQL的事务日志:
数据库·mysql
weixin_4196583113 小时前
MySQL数据库备份与恢复
数据库·mysql
专注API从业者15 小时前
基于 Flink 的淘宝实时数据管道设计:商品详情流式处理与异构存储
大数据·前端·数据库·数据挖掘·flink