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

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的配置文件,具体操作选项:

 
  1. $./ossutil -h

  2. Usage of ossutil:

  3. Options:

  4. -s --short-format 显示精简格式,如果未指定该选项,默认显示长格式。

  5. --snapshot-path= 该选项用于在某些场景下加速增量上传批量文件(目前,下载和拷贝不支持该选项)。在cp上传文件时使用该选项,ossutil在指定的目录下生成文件记录文件上传的快照信息,在下一次指定该选项上传时,ossutil会读取指定目录下的快照信息进行增量上传。用户指定的snapshot目录必须为本地文件系统上的可写目录,若该目录不存在,ossutil会创建该文件用于记录快照信息,如果该目录已存在,ossutil会读取里面的快照信息,根据快照信息进行增量上传(只上传上次未成功上传的文件和本地进行过修改的文件),并更新快照信息 。注意:因为该选项通过在本地记录成功上传的文件的本地lastModifiedTime,从而在下次上传时通过比较lastModifiedTime来决定是否跳过相同文件的上传,所以在使用该选项时,请确保两次上传期间没有其他用户更改了oss上的对应object。当不满足该场景时,如果想要增量上传批量文件,请使用--update选项。另外,ossutil不会主动删除snapshot-path下的快照信息,为了 避免快照信息过多,当用户确定快照信息无用时,请用户自行清理snapshot-path。

  6. -j --jobs= 多文件操作时的并发任务数,默认值:5,取值范围:1-10000

  7. -v --version 显示ossutil的版本(1.0.0.Beta2)并退出。

  8. --output-dir= 指定输出文件所在的目录,输出文件目前包含:cp命令批量拷贝文件出错时所产生的report文件(关于report文件更多信息,请参考cp命令帮助)。默认值为 :当前目录下的ossutil_output目录。

  9. --parallel= 单文件内部操作的并发任务数,取值范围:1-10000, 默认将由ossutil根据操作类型和文件大小自行决定。

  10. -L --language= 设置ossutil工具的语言,默认值:CH,取值范围:CH/EN

  11. -t --sts-token= 访问oss使用的STSToken(该选项值会覆盖配置文件中的相应设置),非必须设置项。

  12. -m --multipart 指定操作的对象为bucket中未完成的Multipart事件,而非默认情况下的object。

  13. -b --bucket 对bucket进行操作,该选项用于确认操作作用于bucket

  14. --delete 删除操作

  15. -e --endpoint= ossutil工具的基本endpoint配置(该选项值会覆盖配置文件中的相应设置),注意其必须为一个二级域名。

  16. -k --access-key-secret= 访问oss使用的AccessKeySecret(该选项值会覆盖配置文件中的相应设置)。

  17. --bigfile-threshold= 开启大文件断点续传的文件大小阈值,默认值:100M,取值范围:0B-9223372036854775807B

  18. --retry-times= 当错误发生时的重试次数,默认值:3,取值范围:1-500

  19. -a --all-type 指定操作的对象为bucket中的object和未完成的Multipart事件。

  20. -r --recursive 递归进行操作。对于支持该选项的命令,当指定该选项时,命令会对bucket下所有符合条件的objects进行操作,否则只对url中指定的单个object进行操作。

  21. -f --force 强制操作,不进行询问提示。

  22. -u --update 更新操作

  23. -c --config-file= ossutil工具的配置文件路径,ossutil启动时从配置文件读取配置,在config命令中,ossutil将配置写入该文件。

  24. -i --access-key-id= 访问oss使用的AccessKeyID(该选项值会覆盖配置文件中的相应设置)。

  25. --acl= acl信息的配置。

  26. -d --directory 返回当前目录下的文件和子目录,而非递归显示所有子目录下的所有object。

  27. --checkpoint-dir= checkpoint目录的路径(默认值为:.ossutil_checkpoint),断点续传时,操作失败ossutil会自动创建该目录,并在该目录下记录checkpoint信息,操作成功会删除该目录。如果指定了该选项,请确保所指定的目录可以被删除。

  28. --type= 计算的类型, 默认值:crc64, 取值范围: crc64/md5

  29. -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选项值。

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

 
  1. #!/bin/bash

  2. . $HOME/.bash_profile

  3. BKDIR="/u01/backup"

  4. DATE="`date '+%Y%m%d'`"

  5. JOB_BEGIN="`date '+%Y%m%d_%H%M'`"

  6. LOGFILE=$BKDIR/log/${JOB_BEGIN}_rmanbak.log

  7. RMANLOGFILE=$BKDIR/log/${JOB_BEGIN}_rmanbak_rman.log

  8. OSSLOG=$BKDIR/oss.log

  9. SYSTEM=""$HOSTNAME"_"$ORACLE_SID"_"$JOB_BEGIN""

  10.  
  11. echo "$JOB_BEGIN Rman Backup start" >> $LOGFILE

  12. echo "" >> $LOGFILE

  13. echo "$ORACLE_HOME/bin/rman cmdfile=$BKDIR/rman.rcv log=$RMANLOGFILE " >> $LOGFILE

  14.  
  15. mkdir -p /u01/backup/data/$JOB_BEGIN

  16. $ORACLE_HOME/bin/rman log=$RMANLOGFILE >>$LOGFILE <<EOF

  17. connect target /

  18. run {

  19. allocate channel d1 type disk;

  20. allocate channel d2 type disk;

  21. allocate channel d3 type disk;

  22. allocate channel d4 type disk;

  23. 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;

  24. sql 'alter system archive log current';

  25. backup as compressed backupset archivelog all format '/u01/backup/data/$JOB_BEGIN/ARCHIVE_Log_%d_%T_%s_%p_%u.bak' delete all input;

  26. release channel d1;

  27. release channel d2;

  28. release channel d3;

  29. release channel d4;

  30. }

  31. crosscheck backup;

  32. delete noprompt expired backup;

  33. delete noprompt obsolete;

  34. exit;

  35. EOF

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

  38. echo "" >> $LOGFILE

  39.  
  40. JOB_END="`date '+%Y%m%d_%H%M'`"

  41. echo "$JOB_END Rman Backup end." >> $RMANLOGFILE

  42.  
  43. #/app/ossutil64 config -e -i -k -L ch -c /u01/a.txt

  44. /app/ossutil64 --config-file=/u01/a.txt mb oss://test-yuelei/$SYSTEM >> $OSSLOG

  45. /app/ossutil64 --config-file=/u01/a.txt cp -r /u01/backup/data/$JOB_BEGIN oss://test-yuelei/$SYSTEM >> $OSSLOG

  46. echo "/app/ossutil64 --config-file=/u01/a.txt cp -r /u01/backup/data/$JOB_BEGIN oss://test-yuelei/$SYSTEM" >> $LOGFILE

  47.  
  48. OSS_END="`date '+%Y%m%d_%H%M'`"

  49. echo "$OSS_END OSS Backup end." >> $OSSLOG

  50. echo "" >> $OSSLOG

 

转载至https://blog.csdn.net/weixin_34390105/article/details/89726629?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值