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点执行一次。

相关推荐
Yushan Bai3 小时前
ORACLE RAC环境REDO日志量突然增加的分析
数据库·oracle
躺着听Jay3 小时前
Oracle-相关笔记
数据库·笔记·oracle
瀚高PG实验室3 小时前
连接指定数据库时提示not currently accepting connections
运维·数据库
运维成长记4 小时前
mysql数据库-中间件MyCat
数据库·mysql·中间件
尘客.4 小时前
DataX从Mysql导数据到Hive分区表案例
数据库·hive·mysql
TiDB 社区干货传送门5 小时前
从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB
数据库·oracle·中间件·tidb·数据库架构
虾球xz5 小时前
游戏引擎学习第280天:精简化的流式实体sim
数据库·c++·学习·游戏引擎
uwvwko6 小时前
BUUCTF——web刷题第一页题解
android·前端·数据库·php·web·ctf
扶尔魔ocy6 小时前
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
linux·数据库·c++·sqlite
旋风菠萝6 小时前
项目复习(1)
java·数据库·八股·八股文·复习·项目、