linux定时备份Oracle脚本(备份至linux、ftp、nfs等)

先给大家分享一套非常有用的 linux 学习视频,由浅入深,非常精彩,超级适合新手。大家扫码关注一下公众号 智程科技 回复 “linux” 即可免费领取哦

 之前给项目现场写了Oracle自动备份的linux脚本,远程备份至各种存储媒介;我旁边的同事写了一份window脚本,如果有需要私聊我,我找他要去,哈哈。其实思路大相径庭,不多说了,直接看代码

1.远程备份至linux

#!/bin/bash

#数据库远程备份可执行程序 2019-04 chengmeng
#备份文件:OracleBackUp.sh
#配置文件:OracleBackUp.ini
#文件说明:
#   1. 采用expdp备份数据库文件,比exp导出备份文件压缩率提高90%
#   2. 用tar软件进行数据压缩,相比不压缩前文件大小,压缩率提高了75%
#   3. 通过建立本机与备份机信任机制的方式,将备份的dmp文件备份到远程服务器
#   4. 建议与linux的定时任务计划结合使用来实现定期备份
#使用说明:
#   1. 修改OracleBackUp.ini中的配置选项

# 定义函数__readINI [配置文件路径+名称] [节点名] [键值]
function __readINI() {
INIFILE=$1; SECTION=$2; ITEM=$3
_readIni=`awk -F '=' '/\\['$SECTION'\\]/{a=1}a==1&&$1~/'$ITEM'/{print $2;exit}' $INIFILE`
echo ${_readIni}
}

echo 【数据库远程备份】=======【开始】...
echo 【数据库远程备份】=======【读取配置文件开始】...

_PROJECT_MARK=( $( __readINI /home/oracle/sh/OracleBackUp.ini configuration PROJECT_MARK) )
_ORACLE_HOME=( $( __readINI  /home/oracle/sh/OracleBackUp.ini configuration ORACLE_HOME) )
_BACKUP_PATH=( $( __readINI  /home/oracle/sh/OracleBackUp.ini configuration BACKUP_PATH) )
_ORACLE_INFO=( $( __readINI  /home/oracle/sh/OracleBackUp.ini configuration ORACLE_INFO) )
_ORACLE_TEMP=( $( __readINI  /home/oracle/sh/OracleBackUp.ini configuration ORACLE_TEMP) )

_date=$(date +%Y%m%d-%H%M%S)
_dmp_file_nam=${_PROJECT_MARK}.${_date}.dmp
_tar_file_nam=${_PROJECT_MARK}.${_date}.tar.gz
_log_file_nam=${_PROJECT_MARK}.${_date}.log

echo 【数据库远程备份】=======【读取配置文件结束】...
echo 【数据库远程备份】=======【开始导出数据】...

#su - oracle -c "exp   ${_ORACLE_INFO} file=${_ORACLE_HOME}${_dmp_file_nam} full=y"
 su - oracle -c "expdp ${_ORACLE_INFO} dumpfile=${_dmp_file_nam} DIRECTORY=${_ORACLE_TEMP} logfile=${_log_file_nam}"

echo 【数据库远程备份】=======【导出数据结束】...
echo 【数据库远程备份】=======【开始压缩数据】...

tar -zcvf ${_ORACLE_HOME}/${_tar_file_nam}  ${_ORACLE_HOME}${_dmp_file_nam} ${_ORACLE_HOME}${_log_file_nam}

echo 【数据库远程备份】=======【压缩数据结束】...
echo 【数据库远程备份】=======【开始远程备份】...

scp ${_ORACLE_HOME}${_tar_file_nam}  ${_BACKUP_PATH}

echo 【数据库远程备份】=======【远程备份结束】...
echo 【数据库远程备份】=======【开始删除本地文件】...

rm -rf ${_ORACLE_HOME}${_PROJECT_MARK}.${_date}.*

echo 【数据库远程备份】=======【删除本地文件成功】...
echo 【数据库远程备份】=======【结束】...
#数据库 远程备份配置 2019-04 chengmeng
#配置文件:OracleBackUp.ini
#文件说明:
#    1.配置数据库备份执行过程中需要的一些必要参数
#使用说明:
#    1.修改一下几个的配置选项,详见说明

#配置文件节点,不可更改
[configuration]

#项目标志.示例:LS7.0(必须修改)
PROJECT_MARK=LSDB

#项目名称.示例:LS7.0系统(必须修改)
PROJECT_NAM=中燃集团

#oracle路径,这是oracle安装时确定的路径.示例:/home/oracle/
ORACLE_HOME=/opt/oracle/

#oracle创建的dba_directories的DIRECTORY_NAME
ORACLE_TEMP=DUMP_FILE

#oracle信息 导出用户/密码@数据库名.示例:system/oracle@orcl
ORACLE_INFO=zrsjy/zrsjy@orcl

#备份服务器(请现在备份机建立该文件夹)  用户@IP:备份路径.示例:[email protected]:/root/test/backup
[email protected]:/opt/db_bak

 Linux环境下Oracle自动备份至远程机部署说明
1.部署文件:共2个,包括LiEMSOracleBackUp.ini 和 LiEMSOracleBackUp.sh;
2.部署位置:将两个文件部署在/root/zhongran目录下,没有目录则新建.
注意:如把zhongran改为其它如shenmeihongyang,则LiEMSOracleBackUp.sh中zhongran的地方要更改为shenmeihongyang.
3.建立本机和备份机的信任机制
A.假设本机IP为168.168.1.1,备份机为168.168.1.2;
B.在1.1上执行命令 
a)\t输入: ssh-keygen -t rsa, 连按三次回车;
b)\t输入: scp  /root/.ssh/id_rsa.pub  [email protected]:/root/.ssh/authorized_keys  , 继续输入168.168.1.2的root密码
c)\t此时可用scp命令测试信任机制是否成功建立
4.在oracle数据库中创建备份路径
A.在1.1上执行命令
a)   su - oracle
b)   sqlplus /nolog
c)   conn  /as  sysdba;
d)   select * from dba_directories;
e)   create directory dump_file as '/opt/oracle'; ( 此命令的 /home/oracle 是1.1上Oracle的目录,与 LiEMSOracleBackUp.ini 中的 ORACLE_HOME 要统一 )
f) 给导出用户授权 grant imp_full_database to 导出用户; grant read,write on directory dump_file to 导出用户;
5.进入LiEMSOracleBackUp.ini 文件中,按照格式要求修改配置参数
6.试运行
在1.1上执行命令 sh /root/zhongran/LiEMSOracleBackUp.sh
查看是否可以正常运行,到1.2上的备份文件夹中查找文件并解压检测
7.建立linux定时任务
    在1.1上输入命令 crontab  -e , 
    新增一行     */5 * * * * sh /root/zhongran/OracleBackUp.sh (此为五分钟执行一次)
    例如             0 3 * * * sh /root/zhongran/OracleBackUp.sh(此为每天凌晨3点执行一次)
                       0 23 * * * sh /root/zhongran/OracleBackUp.sh(此为每天晚上11点执行一次)
                       0 6 * * 6 sh /root/zhongran/OracleBackUp.sh(此为每周六早上6点执行一次)
如若成功,将以上定时任务命令改为正常备份时段即可.

2.备份至ftp

#!/bin/bash

# 定义函数__readINI [配置文件路径+名称] [节点名] [键值]
function __readINI() {
INIFILE=$1; SECTION=$2; ITEM=$3
_readIni=`awk -F '=' '/\\['$SECTION'\\]/{a=1}a==1&&$1~/'$ITEM'/{print $2;exit}' $INIFILE`
echo ${_readIni}
}

echo 【数据库远程备份】=======【开始】...
echo 【数据库远程备份】=======【读取配置文件开始】...

_PROJECT_MARK=( $( __readINI /home/oracle/sh/OracleBackUp.ini configuration PROJECT_MARK) )
_ORACLE_HOME=( $( __readINI  /home/oracle/sh/OracleBackUp.ini configuration ORACLE_HOME) )
_BACKUP_PATH=( $( __readINI  /home/oracle/sh/OracleBackUp.ini configuration BACKUP_PATH) )
_ORACLE_INFO=( $( __readINI  /home/oracle/sh/OracleBackUp.ini configuration ORACLE_INFO) )
_ORACLE_TEMP=( $( __readINI  /home/oracle/sh/OracleBackUp.ini configuration ORACLE_TEMP) )
_FTP_IP=( $( __readINI  /home/oracle/sh/LiEMSOracleBackUp.ini configuration FTP_IP) )
_FTP_USER=( $( __readINI  /home/oracle/sh/LiEMSOracleBackUp.ini configuration FTP_USER) )
_FTP_PWD=( $( __readINI  /home/oracle/sh/LiEMSOracleBackUp.ini configuration FTP_PWD) )

_date=$(date +%Y%m%d-%H%M%S)
_dmp_file_nam=${_PROJECT_MARK}.${_date}.dmp
_tar_file_nam=${_PROJECT_MARK}.${_date}.tar.gz
_log_file_nam=${_PROJECT_MARK}.${_date}.log

echo 【数据库远程备份】=======【读取配置文件结束】...
echo 【数据库远程备份】=======【开始导出数据】...

#su - oracle -c "exp   ${_ORACLE_INFO} file=${_ORACLE_HOME}${_dmp_file_nam} full=y"
 su - oracle -c "expdp ${_ORACLE_INFO} dumpfile=${_dmp_file_nam} DIRECTORY=${_ORACLE_TEMP} logfile=${_log_file_nam}"

echo 【数据库远程备份】=======【导出数据结束】...
echo 【数据库远程备份】=======【开始压缩数据】...

tar -zcvf ${_ORACLE_HOME}/${_tar_file_nam}  ${_ORACLE_HOME}${_dmp_file_nam} ${_ORACLE_HOME}${_log_file_nam}

echo 【数据库远程备份】=======【压缩数据结束】...
echo 【数据库远程备份】=======【开始远程备份】...

#scp ${_ORACLE_HOME}${_tar_file_nam}  ${_BACKUP_PATH}
ftp -n<<!
open ${_FTP_IP}
user ${_FTP_USER} ${_FTP_PWD}
binary
put ${_ORACLE_HOME}${_tar_file_nam} ${_BACKUP_PATH}${_tar_file_nam}
prompt
close
bye
!

echo 【数据库远程备份】=======【远程备份结束】...
echo 【数据库远程备份】=======【开始删除本地文件】...

rm -rf ${_ORACLE_HOME}${_PROJECT_MARK}.${_date}.*

echo 【数据库远程备份】=======【删除本地文件成功】...
echo 【数据库远程备份】=======【结束】...
#LiEMS 数据库 远程备份配置 2019-04 chengmeng
#配置文件:OracleBackUp.ini
#文件说明:
#    1.配置数据库备份执行过程中需要的一些必要参数
#使用说明:
#    1.修改一下几个的配置选项,详见说明

#配置文件节点,不可更改
[configuration]

#项目标志.示例:LS7.0(必须修改)
PROJECT_MARK=LSDB

#项目名称.示例:LS7.0系统(必须修改)
PROJECT_NAM=中燃集团设计管理项目

#oracle路径,这是oracle安装时确定的路径.示例:/home/oracle/
ORACLE_HOME=/opt/oracle/

#oracle创建的dba_directories的DIRECTORY_NAME
ORACLE_TEMP=DUMP_FILE

#oracle信息 导出用户/密码@数据库名.示例:system/oracle@orcl
ORACLE_INFO=zrsjy/zrsjy@orcl

#备份服务器(请先在备份机建立该文件夹) FTP 服务的IP,用户名,密码及备份文件夹路径
FTP_IP=168.168.10.49
FTP_USER=dev
FTP_PWD=dev
BACKUP_PATH=/zhongranOracleBackUp/

Linux环境下Oracle自动备份至FTP部署说明
安装FTP服务
若未安装,可执行: yum -y install ftp ,回车
测试安装成功:
执行: ftp 168.168.10.43 ,回车,按提示输入FTP服务的用户名和密码
执行: put /root/6.txt 6.txt ,回车,看FTP文件夹是否有此文件

3.其它备份方式

比如远程备份至NFS,当成本地文件夹来转移文件就行了。

猜你喜欢

转载自blog.csdn.net/weixin_38316944/article/details/114384300