Linux 自动备份 Oracle 数据库至阿里云 OSS Shell 脚本

之前发过一篇文章,Linux 自动备份 Oracle 数据库 Shell 脚本,在这里,稍微改良一下,备份好的文件,上传至阿里 OSS(对象存储) 中。

Linux 自动备份 Oracle 数据库 Shell 脚本

我们之前也介绍过,如何在 Linux 备份 MySQL 。 我是备份在本机,所以我采用 Oracle 自带的

这里主要是利用阿里 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 结束

强烈建议:如有需放置生产环境,请在放置前,请自行测试是否可用,如造成文件丢失的,后果自负。

数据库开发

Oracle dba_profiles 配置详解以及创建更改

2020-7-28 10:18:23

数据库开发

Oracle REGEXP_SUBSTR 字符串分割为多列 Sql

2020-10-9 14:45:53

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索