之前发过一篇文章,Linux 自动备份 Oracle 数据库 Shell 脚本,在这里,稍微改良一下,备份好的文件,上传至阿里 OSS(对象存储) 中。
官方网站
Linux 自动备份 Oracle 数据库 Shell 脚本
这里主要是利用阿里 OSSUtil 命令行工具:工具详细描述。官网工具里面有很多详细的操作文档。
安装(Linux操作系统)
wget http://gosspublic.alicdn.com/ossutil/1.6.18/ossutil64 # 下载工具 chmod 755 ossutil64 # 文件可执行权限授权
配置
./ossutil64 config
1:请输入配置文件名,文件名可以带路径(默认为:/root/.ossutilconfig,回车将使用默认配置文件。如果用户设置为其它文件,在使用命令时需要将–config-file选项设置为该文件)
默认即可,我这里路径就是:/root/.ossutilconfig
2:请输入语言(CH/EN,默认为:CH,该配置项将在此次 config 命令成功结束后生效):
默认即可:CH
3:请输入endpoint:oss-cn-shenzhen-internal.aliyuncs.com
地域节点。在 Bucket 基础数据可以查看;
我这里使用的是 VPC 内网,是因为 ECS 服务器 跟 OSS 的 Bucket 都在同一个区域,否则需要使用外网:oss-cn-shenzhen.aliyuncs.com
4:请输入accessKeyID:LT***GK**N***Lhy****paZ7
具体创建教程可查看:创建 AccessKey。
5:请输入accessKeySecret:e***4lM****QZBP****Xe***o138*
创建教程同上:创建 AccessKey。
6:请输入stsToken:
非必配项,若采用STS临时授权方式访问OSS需要配置该项,否则置空即可。stsToken生成方式参见:临时访问凭证。
查看配置文件
cat /root/.ossutilconfig [Credentials] language=CH endpoint=oss-cn-shenzhen-internal.aliyuncs.com accessKeyID=LT***GK**N***Lhy****paZ7 accessKeySecret=e***4lM****QZBP****Xe***o138*
配置完毕
测试上传文件(cp 命令):cp 命令用于上传、下载、拷贝文件。
单个文件上传:
./ossutil cp izpan.txt oss://bucketName/izpan.txt
递归文件夹上传:
./ossutil cp -r izpan/ oss://bucketName/izpan
文件下载:oss 目录与本地目录位置互换
./ossutil cp -r oss://bucketName/izpan.txt izpan/
bucketName 指的是您的 Bucket 名称
更多 cp 命令的用户可查看文档
Oracle Shell 脚本
以上是 OSSUtil 工具的简单使用说明。配合下我们的 Oracle
备份 Shell
脚本,完成自动备份并上传 OSS
的动作
#!/bin/sh export ORACLE_BASE=/mnt/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=orcl export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export ORACLE_DIRECTORY=bakdir # 备份目录 export DATA_DIR=/mnt/backup/bakdir # 当前脚本目录(OSSUtil) export SHELL_DIR=/mnt/backup/bakdir # 删除备份时间 30 天 export DEL_TIME=`date -d "30 days ago" +%Y%m%d` # 备份时间 export BAKUP_TIME=`date +%Y%m%d%H%M%S` # 字符编码 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK # 账号 export db_user="test" # 密码 export db_password="123456" # db schemas export db_schemas="data_schemas" # oss bucket name export OSS_BUCKET_NAME="izpan-database-bak" mkdir -p $DATA_DIR echo "-- $(date +'%Y%m%d%H%M%S') 自动备份数据库并压缩开始 " >> $DATA_DIR/BAK_LOG.txt; echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt; echo "-- $(date +'%Y%m%d%H%M%S') 开始备份的文件名:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp" >> $DATA_DIR/BAK_LOG.txt; echo "Bakup file path $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp" expdp $db_user/$db_password@$ORACLE_SID schemas=$db_schemas directory=$ORACLE_DIRECTORY dumpfile=${ORACLE_SID}_${BAKUP_TIME}.dmp logfile=${ORACLE_SID}_${BAKUP_TIME}.log echo "-- $(date +'%Y%m%d%H%M%S') 备份成功:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp" >> $DATA_DIR/BAK_LOG.txt; echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt; echo "-- $(date +'%Y%m%d%H%M%S') 开始进行压缩:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp -> tar.gz" >> $DATA_DIR/BAK_LOG.txt; cd $DATA_DIR && tar -czvf ${ORACLE_SID}_${BAKUP_TIME}.tar.gz ${ORACLE_SID}_${BAKUP_TIME}.dmp ${ORACLE_SID}_${BAKUP_TIME}.log echo "-- $(date +'%Y%m%d%H%M%S') 压缩成功:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.tar.gz" >> $DATA_DIR/BAK_LOG.txt; echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt; echo "-- $(date +'%Y%m%d%H%M%S') 开始删除30天前备份记录文件:$DATA_DIR/${ORACLE_SID}_${DEL_TIME}.dmp" >> $DATA_DIR/BAK_LOG.txt; rm -rf $DATA_DIR/${ORACLE_SID}_${DEL_TIME}* echo "-- $(date +'%Y%m%d%H%M%S') 删除30天前备份记录文件:$DATA_DIR/${ORACLE_SID}_${DEL_TIME}.dmp 结束" >> $DATA_DIR/BAK_LOG.txt; echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt; echo "-- $(date +'%Y%m%d%H%M%S') 开始删除当前备份记录文件:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp" >> $DATA_DIR/BAK_LOG.txt; rm -rf $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.log echo "-- $(date +'%Y%m%d%H%M%S') 删除当前备份记录文件$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp 成功" >> $DATA_DIR/BAK_LOG.txt; echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt; echo "-- $(date +'%Y%m%d%H%M%S') 自动备份数据库并压缩完毕 " >> $DATA_DIR/BAK_LOG.txt; echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt; echo "-- $(date +'%Y%m%d%H%M%S') 自动上传压缩包至阿里 OSS 开始 " >> $DATA_DIR/BAK_LOG.txt; echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt; echo "-- $(date +'%Y%m%d%H%M%S') 开始上传当前备份记录文件:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.tar.gz " >> $DATA_DIR/BAK_LOG.txt; cd $SHELL_DIR && ./ossutil64 cp $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.tar.gz oss://${OSS_BUCKET_NAME}/${ORACLE_SID}_${BAKUP_TIME}.tar.gz rm -rf $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.tar.gz echo "-- $(date +'%Y%m%d%H%M%S') 上传当前备份记录文件 $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.tar.gz 成功" >> $DATA_DIR/BAK_LOG.txt; echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt; echo "-- $(date +'%Y%m%d%H%M%S') 自动上传压缩包至阿里 OSS 结束 " >> $DATA_DIR/BAK_LOG.txt; echo " " >> $DATA_DIR/BAK_LOG.txt; echo " " >> $DATA_DIR/BAK_LOG.txt;
脚本输出
-- 20200730122522 自动备份数据库并压缩开始 ------------------------------------------------------------------ -- 20200730122522 开始备份的文件名:/mnt/backup/bakdir/orcl_20200730122522.dmp -- 20200730122528 备份成功:/mnt/backup/bakdir/orcl_20200730122522.dmp ------------------------------------------------------------------ -- 20200730122528 开始进行压缩:/mnt/backup/bakdir/orcl_20200730122522.dmp -> tar.gz -- 20200730122528 压缩成功:/mnt/backup/bakdir/orcl_20200730122522.tar.gz ------------------------------------------------------------------ -- 20200730122528 开始删除30天前备份记录文件:/mnt/backup/bakdir/orcl_20200630.dmp -- 20200730122528 删除30天前备份记录文件:/mnt/backup/bakdir/orcl_20200630.dmp 结束 ------------------------------------------------------------------ -- 20200730122528 开始删除当前备份记录文件:/mnt/backup/bakdir/orcl_20200730122522.dmp -- 20200730122528 删除当前备份记录文件/mnt/backup/bakdir/orcl_20200730122522.dmp 成功 ------------------------------------------------------------------ -- 20200730122528 自动备份数据库并压缩完毕 ------------------------------------------------------------------ -- 20200730122528 自动上传压缩包至阿里 OSS 开始 ------------------------------------------------------------------ -- 20200730122528 开始上传当前备份记录文件:/mnt/backup/bakdir/orcl_20200730122522.tar.gz -- 20200730122528 上传当前备份记录文件 /mnt/backup/bakdir/orcl_20200730122522.tar.gz 成功 ------------------------------------------------------------------ -- 20200730122528 自动上传压缩包至阿里 OSS 结束
强烈建议:如有需放置生产环境,请在放置前,请自行测试是否可用,如造成文件丢失的,后果自负。