Oracle RMAN备份上传到阿里云OSS脚本

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: DBA都知道,备份对于数据库的重要性是不言而喻的。特别是在误删数据的情况,救命用的最多的可能就是备份了。有个客户的环境也比较复杂,单个服务器有三个Oracle实例,而且是部署在不同用户下的。现在的需求是要把不同用户下的Oracle实例全量物理备份上传到阿里云的OSS上,保证备份文件的安全性阿里云OSS了解下:https://help.

DBA都知道,备份对于数据库的重要性是不言而喻的。特别是在误删数据的情况,救命用的最多的可能就是备份了。
有个客户的环境也比较复杂,单个服务器有三个Oracle实例,而且是部署在不同用户下的。现在的需求是要把不同用户下的Oracle实例全量物理备份上传到阿里云的OSS上,保证备份文件的安全性
阿里云OSS了解下:https://help.aliyun.com/product/31815.html?spm=a2c4g.11186623.6.90.OAsRt8
作为阿里云最优秀服务商,自然也有更加强大的云上数据库运维管控平台:https://easydb.dtstack.com

Oracle物理备份的方式自然是使用RMAN,那么脚本在网上随便就可以找得到的。那么怎么保证备份的文件夹能够上传到阿里云的OSS上呢?
那么就需要借助OSS的工具:ossutil
下载和安装的方法不再赘述,参考这个网址即可:https://help.aliyun.com/document_detail/50452.html?spm=a2c4g.11186623.6.1057.D3lBFJ

使用前必须配置bucket的配置文件,具体操作选项:

$./ossutil -h
Usage of ossutil:
Options:
-s --short-format 显示精简格式,如果未指定该选项,默认显示长格式。
--snapshot-path= 该选项用于在某些场景下加速增量上传批量文件(目前,下载和拷贝不支持该选项)。在cp上传文件时使用该选项,ossutil在指定的目录下生成文件记录文件上传的快照信息,在下一次指定该选项上传时,ossutil会读取指定目录下的快照信息进行增量上传。用户指定的snapshot目录必须为本地文件系统上的可写目录,若该目录不存在,ossutil会创建该文件用于记录快照信息,如果该目录已存在,ossutil会读取里面的快照信息,根据快照信息进行增量上传(只上传上次未成功上传的文件和本地进行过修改的文件),并更新快照信息 。注意:因为该选项通过在本地记录成功上传的文件的本地lastModifiedTime,从而在下次上传时通过比较lastModifiedTime来决定是否跳过相同文件的上传,所以在使用该选项时,请确保两次上传期间没有其他用户更改了oss上的对应object。当不满足该场景时,如果想要增量上传批量文件,请使用--update选项。另外,ossutil不会主动删除snapshot-path下的快照信息,为了 避免快照信息过多,当用户确定快照信息无用时,请用户自行清理snapshot-path。
-j --jobs= 多文件操作时的并发任务数,默认值:5,取值范围:1-10000
-v --version 显示ossutil的版本(1.0.0.Beta2)并退出。
--output-dir= 指定输出文件所在的目录,输出文件目前包含:cp命令批量拷贝文件出错时所产生的report文件(关于report文件更多信息,请参考cp命令帮助)。默认值为 :当前目录下的ossutil_output目录。
--parallel= 单文件内部操作的并发任务数,取值范围:1-10000, 默认将由ossutil根据操作类型和文件大小自行决定。
-L --language= 设置ossutil工具的语言,默认值:CH,取值范围:CH/EN
-t --sts-token= 访问oss使用的STSToken(该选项值会覆盖配置文件中的相应设置),非必须设置项。
-m --multipart 指定操作的对象为bucket中未完成的Multipart事件,而非默认情况下的object。
-b --bucket 对bucket进行操作,该选项用于确认操作作用于bucket
--delete 删除操作
-e --endpoint= ossutil工具的基本endpoint配置(该选项值会覆盖配置文件中的相应设置),注意其必须为一个二级域名。
-k --access-key-secret= 访问oss使用的AccessKeySecret(该选项值会覆盖配置文件中的相应设置)。
--bigfile-threshold= 开启大文件断点续传的文件大小阈值,默认值:100M,取值范围:0B-9223372036854775807B
--retry-times= 当错误发生时的重试次数,默认值:3,取值范围:1-500
-a --all-type 指定操作的对象为bucket中的object和未完成的Multipart事件。
-r --recursive 递归进行操作。对于支持该选项的命令,当指定该选项时,命令会对bucket下所有符合条件的objects进行操作,否则只对url中指定的单个object进行操作。
-f --force 强制操作,不进行询问提示。
-u --update 更新操作
-c --config-file= ossutil工具的配置文件路径,ossutil启动时从配置文件读取配置,在config命令中,ossutil将配置写入该文件。
-i --access-key-id= 访问oss使用的AccessKeyID(该选项值会覆盖配置文件中的相应设置)。
--acl= acl信息的配置。
-d --directory 返回当前目录下的文件和子目录,而非递归显示所有子目录下的所有object。
--checkpoint-dir= checkpoint目录的路径(默认值为:.ossutil_checkpoint),断点续传时,操作失败ossutil会自动创建该目录,并在该目录下记录checkpoint信息,操作成功会删除该目录。如果指定了该选项,请确保所指定的目录可以被删除。
--type= 计算的类型, 默认值:crc64, 取值范围: crc64/md5
-h --help Show usage message

执行步骤如下:
1.配置文件
$ /app/ossutil64 config -e endpoint -i access-key-id -k access-key-secret -L ch -c 配置文件存储路径和命名(如:/u01/a.txt)

2.验证是否配置成功
$ /app/ossutil64 --config-file=/u01/a.txt ls oss://bucket

3.建立bucket
$ /app/ossutil64 --config-file=/u01/a.txt mb oss://bucket

4.上传文件到bucket
$ /app/ossutil64 --config-file=/u01/a.txt cp -r /u01/backup/data oss://bucket

性能调优:
在cp命令中,通过--jobs项和--parallel项控制并发数。--jobs项控制多个文件上传/下载/拷贝时,文件间启动的并发数。--parallel制分片上传/下载/拷贝一个大文件时,每一个大文件启动的并发数。
默认情况下,ossutil会根据文件大小来计算parallel个数(该选项对于小文件不起作用,进行分片上传/下载/拷贝的大文件文件阈值可由--bigfile-threshold选项来控制),当进行批量大文件的上传/下载/拷贝时,实际的并发数为jobs个数乘以parallel个数。该两个选项可由用户调整,当ossutil自行设置的默认并发达不到用户的性能需求时,用户可以自行调 整该两个选项来升降性能。

注意:
1.如果并发数调得太大,由于线程间资源切换及抢夺等,ossutil上传/下载/拷贝性能可能会下降,所以请根据实际的机器情况调整这两个选项的数值,如果要进行压测,可以一开始将两个数值调低,慢慢调大寻找最优值。
2.如果--jobs选项和--parallel选项值太大,在机器资源有限的情况下,可能会因为网络传输太慢,产生EOF错误,这个时候请适当降低--jobs选项和--parallel选项值。

最后把脚本贴出来,请多多指正:

#!/bin/bash
. $HOME/.bash_profile
BKDIR="/u01/backup"
DATE="`date '+%Y%m%d'`"
JOB_BEGIN="`date '+%Y%m%d_%H%M'`"
LOGFILE=$BKDIR/log/${JOB_BEGIN}_rmanbak.log
RMANLOGFILE=$BKDIR/log/${JOB_BEGIN}_rmanbak_rman.log
OSSLOG=$BKDIR/oss.log
SYSTEM=""$HOSTNAME"_"$ORACLE_SID"_"$JOB_BEGIN""

echo "$JOB_BEGIN Rman Backup start" >> $LOGFILE
echo "" >> $LOGFILE
echo "$ORACLE_HOME/bin/rman cmdfile=$BKDIR/rman.rcv log=$RMANLOGFILE "  >> $LOGFILE

mkdir -p /u01/backup/data/$JOB_BEGIN
$ORACLE_HOME/bin/rman log=$RMANLOGFILE >>$LOGFILE <<EOF  
connect target /
run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
backup as compressed backupset incremental level 0 database format '/u01/backup/data/$JOB_BEGIN/DB_level0_%d_%T_%s_%p_%u.bak'tag='level 0' include current controlfile;
sql 'alter system archive log current';
backup as compressed backupset archivelog all format '/u01/backup/data/$JOB_BEGIN/ARCHIVE_Log_%d_%T_%s_%p_%u.bak' delete all input;
release channel d1;
release channel d2;
release channel d3;
release channel d4;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
exit;
EOF

echo "Done @`date '+%Y%m%d_%H%M'`" >> $LOGFILE
echo "" >> $LOGFILE

JOB_END="`date '+%Y%m%d_%H%M'`"
echo "$JOB_END Rman Backup end." >> $RMANLOGFILE

#/app/ossutil64 config -e  -i  -k  -L ch -c /u01/a.txt
/app/ossutil64 --config-file=/u01/a.txt mb oss://test-yuelei/$SYSTEM >> $OSSLOG
/app/ossutil64 --config-file=/u01/a.txt cp -r /u01/backup/data/$JOB_BEGIN oss://test-yuelei/$SYSTEM >> $OSSLOG
echo "/app/ossutil64 --config-file=/u01/a.txt cp -r /u01/backup/data/$JOB_BEGIN oss://test-yuelei/$SYSTEM" >> $LOGFILE

OSS_END="`date '+%Y%m%d_%H%M'`"
echo "$OSS_END OSS Backup end." >> $OSSLOG
echo "" >> $OSSLOG
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
1月前
|
Java API 开发工具
如何用阿里云 oss 下载文件
阿里云对象存储服务(OSS)提供了多种方式下载文件,以下讲解下各种方式的下载方法
747 1
|
27天前
|
存储 安全 对象存储
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
本文详细介绍了怎样帮助新手小白从注册,购买阿里云OSS,到一步一步配置OSS做为图床,和PicGo、Typora软件连接,配置好关联之后,在使用Typora写文章时,如果需要插入图片,只需要将图片复制粘贴到Typora的编辑区域,就会自动通过PicGo上传到指定图床,自动复制外网能访问的URL并展示,简直不要太方便,极大的解决了编辑文章时复制处理图片链接的痛点。
147 2
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
|
30天前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
|
7天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
29 5
|
3天前
|
存储 Java API
阿里云oss简介和使用流程
本文档介绍了如何准备阿里云OSS(对象存储服务)并开始使用它。首先,需要注册阿里云账号并进行实名认证,然后购买OSS资源包。在阿里云控制台中,可以创建和管理OSS存储空间(称为“Bucket”)。接着,文章简要介绍了阿里云OSS,它是一个基于云端的对象存储服务,提供高可靠性、高性能、低成本和易于使用的特性。 在阿里云OSS控制台,用户可以进行文件的上传和下载操作。通过API,开发者可以使用各种编程语言(如Java)来创建、删除Bucket以及上传、下载和删除文件。例如,Java代码示例展示了如何创建Bucket、上传文件、删除文件以及下载文件到本地的操作。
|
10天前
|
开发工具 对象存储
阿里云OSS文件上传
阿里云OSS文件上传
51 0
|
10天前
|
存储 缓存 Java
阿里云OSS实战从入门到大神
说起阿里云OSS,那作用和功能都是非常强大的,它可以存放图片,音频,视频等资源文件,这些资源文件,你不必存放到服务器的硬盘里,这样既可以节省服务器硬盘空间,又可以降低服务器的读写压力,非常适合大并发的架构。
51 0
|
1月前
|
存储 域名解析 应用服务中间件
阿里云OSS对象存储,实现内网访问,免流量费用
阿里云OSS对象存储,实现内网访问,免流量费用
414 1
|
2月前
|
存储 Oracle 关系型数据库
Typora+PicGo+super-prefix+阿里云OSS设置图床
Typora+PicGo+super-prefix+阿里云OSS设置图床
|
2月前
|
数据库 对象存储 数据安全/隐私保护
在oceanbase数据库中,有没有遇到备份到oss环境,备份进度到98%就一直卡着的问题?
在oceanbase数据库中,有没有遇到备份到oss环境,备份进度到98%就一直卡着的问题?
27 6

热门文章

最新文章

推荐镜像

更多