【Oracle篇】rman标准化全库备份策略:完整备份or增量备份(第三篇,总共八篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨

💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️

💖💖💖大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注💖💖💖

    距离上一次写博客都是上一次了,那么今天作为rman正统传承的第三篇章,又和大家见面了。rman是物理备份工具,那么 通过rman脚本+crontab实现定时备份 这才是最重要的,所以今天今天的文章就讲讲怎么实现rman脚本+crontab实现定时全库备份。

   删过库跑过路的小伙伴都知道有备份是多么的重要😄,全库备份将作为最后的恢复手段。不是执行一个rman备份命令就完事了,rman备份需要备份哪些内容,rman输出的备份片名称应该怎么命名这些都是非常有讲究的,不能执行了一个全库备份命令,生成的备份片没有命名,而是rman自己内部命名的,这让一个刚上手的小伙伴会感觉的很蒙蔽,不知道应该从那个备份片开始恢复。所以今天就带着这些疑问开始今天的内容吧。

    然而,RMAN所涉及的内容之广、之深,使得难以在单篇文章中全面涵盖。所以我将理论、命令、备份策略、异机恢复、坏块处理等分成八篇文章去讲,即使分为八篇也有不少内容没有涵盖到,所以这八篇文章都是精华,看完这八篇就可以解决95%以上的RMAN相关工作内容了。八篇文章的内容分别如下:

  • 第一篇:rman物理备份工具的基础理论概述
  • 第二篇:rman工具实用指南:常用命令详解与实践
  • 第三篇:rman标准化全库备份策略:完整备份or增量备份(当前篇)
  • 第四篇:rman全库异机恢复:从RAC环境到单机测试环境的转移
  • 第五篇:rman全库异机恢复:从单机环境到RAC测试环境的转移
  • 第六篇:rman时间点异机恢复:从单机环境到单机测试环境的转移
  • 第七篇:Oracle数据库物理坏块处理:rman修复坏块实践与案例分析
  • 第八篇:逻辑备份工具expdp(exp)/impdp(imp)和物理备份工具rman的区别和各自的使用场景总汇

                   

目录

1、rman的备份分类

1.1 rman完整备份:

案例一:对Oracle实例进行rman全库备份。保留4份rman完整备份

1.2 rman增量备份(基本、差异、累计增量备份的总称):


                     

      

rman全库备份应该哪些内容:

  • 备份内容一:参数文件。参数作为Oracle启动时第一步就干的事情,备份他有多重要那么就不言而喻了。
  • 备份内容二:控制文件。控制文件作为Oracle启动后的第二步就是需要打开控制文件,验证里面的内容,备份他有多重要那么就不言而喻了。
  • 备份内容三:数据文件、undo文件、temp文件。打开控制文件后,第三步就是打开数据文件、undo文件、temp文件,只有文件和控制文件的scn一致数据库才会启动到open状态,备份他有多重要那么就不言而喻了。
  • 备份内容四:归档日志。所谓归档日志就是redo日志切换后生成的,记录了数据库中所有的操作,包括DML、DDL等等。对于rman全库备份来说,全库数据量这么大只能好几天才备份一次,那么从上一次到下一次全库备份之间的数据就是缺失的,所以需要备份归档日志来进行追数据,备份他有多重要那么就不言而喻了(其实可以通过差异增量备份替代归档日志备份,但是差异增量备份是不能用logminer进行分析,而备份的归档日志可以通过logminer进行分析)

上面我说了四个重要,所以rman全库备份少了那一个都不行滴!

                      

1、rman的备份分类

rman完整备份:

    一个或多个数据文件的完整副本,包括从备份开始的所有级的数据块。

rman增量备份(基本、差异、累计增量备份的总称):

从基本备份以来被修改过或增加过的数据块。增量备份分为0级增量基本备份、1级差异增量备份、1级累积增量备份,增量备份支持归档和非归档模式,并且只能使用rman才可以实现增量备份。 

  • 基本增量(backup incremental level=0 database):基本备份的增量级别为0,执行增量备份操作时,首先需要的是增量基本备份(incremental base backup),以后所有的增量备份都基于这个基本备份。如果没有生成基本备份就尝试执行增量备份操作,RMAN 会自动执行基本备份操作。
  • 差异增量(backup incremental level=1 database):差异备份的增量级别为1,对于差异增量备份来说,第一次是基本备份以来所有变化的数据块,之后RMAN会备份自上次同级或者低级差异增量备份以来所发生变化的数据块,差异备份是RMAN生成的增量备份的默认类型。差异增量是根据上一次备份后,备份有变化的数据。这种备份把全库数据分为一小段一小段的,节省了空间,但在恢复时会很麻烦需要逐个恢复。所以不建议使用 

  • 累积增量(backup incremental level =1 cumulative database):累计备份的增量级别为1 cumulative,对于累计增量备份来说,累计增量是根据上一次备份后,备份最开始到生产的所有数据,占用了空间,在恢复时只需恢复一个即可。累计增量适用于数据量小的数据库,如果数据量很大也不建议使用差异增量备份,在backup 命令中使用cumulative关键字

               

1.1 rman完整备份:

    一个或多个数据文件的完整副本,包括从备份开始的所有级的数据块。

全库备份脚本:包括数据文件(数据文件、undo文件、temp文件)、控制文件、参数文件

备注:如果在系统的oracle用户下执行就必须带有ORACLE_SID和ORACLE_HOME等变量,因为定时任务执行时是不执行变量的,所以需要在脚本中定义,如果是在系统的root用户下执行,那么可以在定时任务加“-”用于执行变量(-:切换用户并允许环境变量.bash_profile),或者在定时任务不加“-”,还是将变量放在脚本中定义。
   系统oracle用户下定义定时任务:* * * * * 脚本
   系统root用户下定义定时任务:* * * * * su - oracle -c脚本
          
export BAKDATE=`date +%Y%m%d`
export ORACLE_SID=实例ID
export ORACLE_HOME=数据库home路径

$ORACLE_HOME/bin/rman target / log=/路径/rman_full_orcl_backup$BAKDATE.log  << EOF      #按照日志生成不同的备份日志,便于排查在备份过程的问题

run
{
CONFIGURE RETENTION POLICY TO NONE;                   #none可以把使备份保持策略失效,此时REPORT OBSOLETE和DELETE OBSOLETE将不把任何备份文件视为废弃。测试过备份策略保留4份(CONFIGURE RETENTION POLICY TO REDUNDANCY 4;),备份策略中包括了全备、参数文件、控制文件、归档文件的备份,但在实际第4次运行时发现,删除了第一个和第二次的参数文件和控制文件,非常的奇怪,所以不采用备份策略(CONFIGURE RETENTION POLICY TO NONE;),采用linux的rm -rf实现删除备份,服务器上没有的备份介质,通过crosscheck backup;和delete noprompt expired backup;删除rman的备份相关信息

crosscheck backup;
delete noprompt expired backup;                 #删除过期的备份集。因为采用linux的rm -rf实现删除备份,服务器上没有的备份介质,所以通过crosscheck backup;和delete noprompt expired backup;删除rman的备份相关信息
crosscheck copy;
delete noprompt expired copy;                   #删除过期的备份。同上
crosscheck archivelog all;
delete noprompt expired archivelog all;         #删除过期的归档备份。同上
}

run {                                                     #rman工具内部命令 
allocate channel d1 type disk;                             #分配通道d1,类型为磁盘
allocate channel d2 type disk;                             #分配通道d2,类型为磁盘(生产上结合io的处理并发的能力,按需分配通道,2个通道同时进行)
setlimit channel d1 kbytes 204800000 maxopenfiles 32 readrate 200;      #限制通道d1的一个备份集最大为204800000kb(200G),最大打开文件数为32个,每秒向缓存读200M。
setlimit channel d2 kbytes 204800000 maxopenfiles 32 readrate 200;      #限制通道d1的一个备份集最大为204800000kb(200G),最大打开文件数为32个,每秒向缓存读200M。(为优化参数,2个通道同时进行,也就是以400M/s存到缓存向磁盘写入。生产上结合io的处理并发的能力)

sql 'alter system archive log current';                        #会对数据库中所有实例执行日志切换,进行归档

backup
	AS COMPRESSED BACKUPSET                         #压缩备份压缩是为了节省空间,但压缩时cpu会飙升,性能换空间。压缩后的备份集为实际数据量的30%左右
#incremental level 0                                #增量0级备份也叫增量基本备份,必须有基本备份才能够执行其他类型的增量备份(差异、累计)操作。如果不考虑增量备份可以忽略此命令(当然全备就是0级别的增量基本备份)
#skip inaccessible                                  #备份时跳过不可读的的文件,不可读的文件就算备份过来也恢复不了。使用SKIP INACCESSIBLE选项可能会导致备份不完整,因此建议在使用该选项之前仔细考虑其影响
	tag orcl_full                                       #tag是将备份集命名      
	format '/路径/orcl_full_%s_%p_%t'         #备份文件的保存路径,默认保存在闪回路径下。    
	(database);                                        #database表示全库备份(全备)
release channel d1;                                     #释放通道d1
release channel d2;                                     #释放通道d2

allocate channel d3 type disk;                           
backup
tag orcl_ctl
format '/路径/orcl_ctl_%s_%p_%t' current controlfile;        #备份当前控制文件,并指定保存路径
release channel d3;             
 
allocate channel d4 type disk;     
backup 
tag orcl_spfile 
format '/路径/orcl_spfile_%s_%p_%t' spfile;      #备份当前参数文件,并指定保存路径
release channel d4; 
}                       
exit
EOF

find /路径 -name "orcl_*" -mtime +天数 -exec rm -rf {} \;      

       

归档备份脚本:备份归档日志

    归档备份需要单独放一个脚本,如果将归档备份放在全备中,全备一般数据较大那么就是每星期备份1到2次,以每星期一和星期五全备和包含归档备份为例,如果是rac环境,星期四发生ASM整个都坏了包括在ASM的归档日志,那么只能用星期一的全备和归档进行恢复,丢失了星期二、星期三、星期四的数据。

    本地归档日志保留2天内的,并且每天进行一次定时任务的归档全备,根据全备的策略(每周一和每周五进行全备,保留4份全备),需要保留14次的归档全备定时任务。本地归档日志保留2天内是因为需要保证dg库万一断了,那么本地还有2天的归档,那么还可以通过FAL进程将本地归档传输过去。而保留14次的归档全备定时任务就是保留了14次的归档全备,每次归档全备中都有2天的归档,这样其实每次归档全备都有重复的归档日志,这样没有办法,因为又要保证本地有2天内的归档,又要保证14天前的全备有归档可以恢复,可以最大程度减少数据的丢失,确保异常时可以使用上一次的全备+覆盖之内的归档进行完全恢复。

备注:如果在系统的oracle用户下执行就必须带有ORACLE_SID和ORACLE_HOME等变量,因为定时任务执行时是不执行变量的,所以需要在脚本中定义,如果是在系统的root用户下执行,那么可以在定时任务加“-”用于执行变量(-:切换用户并允许环境变量.bash_profile),或者在定时任务不加“-”,还是将变量放在脚本中定义。
   系统oracle用户下定义定时任务:* * * * * 脚本
   系统root用户下定义定时任务:* * * * * su - oracle -c脚本
export BAKDATE=`date +%Y%m%d`
export ORACLE_SID=实例ID
export ORACLE_HOME=数据库home路径

$ORACLE_HOME/bin/rman target / log=/路径/rman_arch_backup$BAKDATE.log  << EOF      #按照日志生成不同的备份日志,便于排查在备份过程的问题

run
{
crosscheck archivelog all;                                 #验证实例所有的归档,根据的是archive log list
delete noprompt expired archivelog all;                     #删除rman里面显示过期的归档记录。上面的操作是物理删除,但rman的记录还在
delete noprompt force archivelog until time "sysdate-2";       #删除2天前的归档,就是从当前日期开始保留2天内的。加上force参数,解决:RMAN-08138: WARNING: archived log not deleted - must create more backups。原因为CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 10 TIMES TO 'SBT_TAPE';删除的归档日志不符合删除日志之前所需的用户指定的归档日志删除策略数量的备份
}

run
{
allocate channel d5 type disk;                              
backup
AS COMPRESSED BACKUPSET                                       #压缩备份压缩是为了节省空间,但压缩时cpu会飙升,性能换空间。
tag orcl_arch 
format '/路径/orcl_arch_%s_%p_%t' archivelog all;      #备份当前归档,并指定保存路径
release channel d5;                                           #释放通道d5。用于备份归档。如果单独写一个归档备份脚本,即脚本有CONFIGURE RETENTION POLICY TO REDUNDANCY 2,经过测试也不会保留2份归档备份集,而是一直进行备份。如果将备份语句写到全备里面,经过测试可以实现只保留2份归档备份
}
exit
EOF

find /路径 -name "orcl_arch_*" -mtime +14 -exec rm -rf {} \;     

        

案例一:对Oracle实例进行rman全库备份。保留4份rman完整备份

数据量1TB,每天的归档50GB:

第一步:rman全备(归档模式):每周一和每周五全备,保留4份。分配4T的rman备份空间

第二步:备份归档:保留14天的归档(归档备份需要单独放一个脚本,如果将归档备份放在全备中,全备一般数据较大那么就是每星期备份1到2次,以每星期一和星期五全备和包含归档备份为例,如果是rac环境,星期四发生ASM整个都坏了包括在ASM的归档日志,那么只能用星期一的全备和归档进行恢复,丢失了星期二、星期三、星期四的数据。本地归档日志保留2天内的,并且每天进行一次定时任务的归档全备,根据全备的策略(每周一和每周五进行全备,保留4份全备),需要保留14次的归档全备定时任务。本地归档日志保留2天内是因为需要保证dg库万一断了,那么本地还有2天的归档,那么还可以通过FAL进程将本地归档传输过去。而保留14次的归档全备定时任务就是保留了14次的归档全备,每次归档全备中都有2天的归档,这样其实每次归档全备都有重复的归档日志,这样没有办法,因为又要保证本地有2天内的归档,又要保证14天前的全备有归档可以恢复,可以最大程度减少数据的丢失,确保异常时可以使用上一次的全备+覆盖之内的归档进行完全恢复)分配1T的归档备份空间

一、数据备份的路径规划:/backup(通过存储挂到本机目录下,权限oracle用户)

oracle用户:
[oracle@lf ~]$ mkdir /backup
[oracle@lf ~]$ cd /backup
[oracle@lf backup]$ mkdir full
[oracle@lf backup]$ mkdir script
[oracle@lf backup]# mkdir logs
[root@lf /]# chown oracle:oinstall /backup/
###子目录:full(rman全备的数据)、script(备份脚本)、logs(备份日志)

二、归档的保存目录

sql> archive log list;

三、使用nocatalog保存实例的备份信息,增加时长

sql> alter system set control_file_record_keep_time=31 scope=both sid='*';  
###当使用rman nocatalog方式备份时,备份controlfile是非常重要的。建议将参数文件中的control_file_record_keep_time值加大(缺省为7天) ,参数在$oracle_home/dbs/initsid.ora中。超过这个期限就会删除备份信息,这样对数据库还原恢复有影响,调整为31天

四、调整rman策略

RMAN> show all;    ---详细的介绍参考“rman理论(跨版本迁移、block tracking、DRA)、catalog”文档

下面是重要的几个策略,策略的后面有“# default”表示为默认的策略没有被修改过
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default        #备份保存策略。按照全备脚本修改
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default              #备份时是否自动备份控制文件。按照默认的关闭即可,因为全备脚本有单独备份控制文件和参数文件
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default      #归档删除策略。按照默认的不配置,因为归档备份脚本有配置策略
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/app/oracle/product/11.2.0/db_1/dbs/snapcf_rmanbackup.f'; # default    #配置RMAN 备份时的快照控制文件的位置。快照控制文件(snapshot control file)是 RMAN 在进行备份时创建的一个临时性的控制文件副本,用于记录备份操作的元数据信息。每次进行备份时,RMAN 都会生成一个新的快照控制文件,并在备份完成后自动删除。因此不需要担心每次备份都会生成新的snapcf_rmanbackup.f文件,因为这个文件只是一个临时的副本,其目的是为了确保备份的一致性和完整性。RMAN 会自动管理这个过程,包括创建和清理快照控制文件,只需关注备份策略和相关的配置即可。单机环境使用FS文件系统,如果是rac环境必须使用ASM存储快照控制文件的位置:CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+磁盘组/实例名/snapcf_实例名.f'; ,rac环境不配置到ASM环境的话就会导致在全备时报错ORA-19606: Cannot copy or restore to snapshot control file

五、脚本一:全库备份,每周一和每周五进行全备,保留4份全备。包括数据文件、控制文件、参数文件

[oracle@lf backup]$ cd script/
[oracle@lf script]$ vi  rman_full_orcl_backup.sh

备注:如果在系统的oracle用户下执行就必须带有ORACLE_SID和ORACLE_HOME等变量,因为定时任务执行时是不执行变量的,所以需要在脚本中定义,如果是在系统的root用户下执行,那么可以在定时任务加“-”用于执行变量(-:切换用户并允许环境变量.bash_profile),或者在定时任务不加“-”,还是将变量放在脚本中定义。
   系统oracle用户下定义定时任务:* * * * * 脚本
   系统root用户下定义定时任务:* * * * * su - oracle -c脚本

export BAKDATE=`date +%Y%m%d`
export ORACLE_SID=orcl1
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
    
$ORACLE_HOME/bin/rman target / log=/backup/logs/rman_full_orcl_backup$BAKDATE.log  << EOF      #按照日志生成不同的备份日志,便于排查在备份过程的问题

run
{
CONFIGURE RETENTION POLICY TO NONE;                   #none可以把使备份保持策略失效,此时REPORT OBSOLETE和DELETE OBSOLETE将不把任何备份文件视为废弃。测试过备份策略保留4份(CONFIGURE RETENTION POLICY TO REDUNDANCY 4;),备份策略中包括了全备、参数文件、控制文件、归档文件的备份,但在实际第4次运行时发现,删除了第一个和第二次的参数文件和控制文件,非常的奇怪,所以不采用备份策略(CONFIGURE RETENTION POLICY TO NONE;),采用linux的rm -rf实现删除备份,服务器上没有的备份介质,通过crosscheck backup;和delete noprompt expired backup;删除rman的备份相关信息
     
crosscheck backup;
delete noprompt expired backup;                 #删除过期的备份集。因为采用linux的rm -rf实现删除备份,服务器上没有的备份介质,所以通过crosscheck backup;和delete noprompt expired backup;删除rman的备份相关信息
crosscheck copy;
delete noprompt expired copy;                   #删除过期的备份。同上
crosscheck archivelog all;
delete noprompt expired archivelog all;            #删除过期的归档备份。同上
}

run {                                                   #rman工具内部命令 
allocate channel d1 type disk;                             #分配通道d1,类型为磁盘
allocate channel d2 type disk;                             #分配通道d2,类型为磁盘(生产上结合io的处理并发的能力,按需分配通道,2个通道同时进行)
setlimit channel d1 kbytes 204800000 maxopenfiles 32 readrate 200;      #限制通道d1的一个备份集最大为204800000kb(200G),最大打开文件数为32个,每秒向缓存读200M。
setlimit channel d2 kbytes 204800000 maxopenfiles 32 readrate 200;      #限制通道d1的一个备份集最大为204800000kb(200G),最大打开文件数为32个,每秒向缓存读200M。(为优化参数,2个通道同时进行,也就是以400M/s存到缓存向磁盘写入。生产上结合io的处理并发的能力)

sql 'alter system archive log current';                        #会对数据库中所有实例执行日志切换,进行归档

backup
	AS COMPRESSED BACKUPSET                         #压缩备份压缩是为了节省空间,但压缩时cpu会飙升,性能换空间。压缩后的备份集为实际数据量的30%左右
#incremental level 0                                #增量0级备份也叫增量基本备份,必须有基本备份才能够执行其他类型的增量备份(差异、累计)操作。如果不考虑增量备份可以忽略此命令(当然全备就是0级别的增量基本备份)
#skip inaccessible                                  #备份时跳过不可读的的文件,不可读的文件就算备份过来也恢复不了。使用SKIP INACCESSIBLE选项可能会导致备份不完整,因此建议在使用该选项之前仔细考虑其影响
	tag orcl_full                                       #tag是将备份集命名      
	format '/backup/full/orcl_full_%s_%p_%t'         #备份文件的保存路径,默认保存在闪回路径下。    
	(database);                                        #database表示全库备份(全备)
release channel d1;                                     #释放通道d1
release channel d2;                                     #释放通道d2

allocate channel d3 type disk;                           
backup
tag orcl_ctl
format '/backup/full/orcl_ctl_%s_%p_%t' current controlfile;        #备份当前控制文件,并指定保存路径
release channel d3;             
 
allocate channel d4 type disk;     
backup 
tag orcl_spfile 
format '/backup/full/orcl_spfile_%s_%p_%t' spfile;      #备份当前参数文件,并指定保存路径
release channel d4; 
}                       
exit
EOF

find /backup/full -name "orcl_*" -mtime +14 -exec rm -rf {} \;              #-mtime +14 -exec rm -rf {} \; 表示删除目录下14天之前被修改过的文件。写为mtine是因为默认输入ls -l(ll)命令输出的内容中就是最后修改时间 (mtime)。rman 进行crosscheck就会把所有的备份片访问一遍,那么如果写-atime(被访问过的文件)就不是实际之前的文件了,从而导致删除失效。因为计划任务是每周一和每周五执行,所以find查出14天之前的进行rm删除,也就是保留14天内的4份。备注:目前采用find这种方式最保险,因为测试过备份策略的方式有问题,参考上面“CONFIGURE RETENTION POLICY TO NONE;”的备注。

六、脚本二:归档备份,每天进行一次归档全备和保留,根据全备的策略,需要保留14天归档备份

    归档备份需要单独放一个脚本,如果将归档备份放在全备中,全备一般数据较大那么就是每星期备份1到2次,以每星期一和星期五全备和包含归档备份为例,如果是rac环境,星期四发生ASM整个都坏了包括在ASM的归档日志,那么只能用星期一的全备和归档进行恢复,丢失了星期二、星期三、星期四的数据。

    本地归档日志保留2天内的,并且每天进行一次定时任务的归档全备,根据全备的策略(每周一和每周五进行全备,保留4份全备),需要保留14次的归档全备定时任务。本地归档日志保留2天内是因为需要保证dg库万一断了,那么本地还有2天的归档,那么还可以通过FAL进程将本地归档传输过去。而保留14次的归档全备定时任务就是保留了14次的归档全备,每次归档全备中都有2天的归档,这样其实每次归档全备都有重复的归档日志,这样没有办法,因为又要保证本地有2天内的归档,又要保证14天前的全备有归档可以恢复,可以最大程度减少数据的丢失,确保异常时可以使用上一次的全备+覆盖之内的归档进行完全恢复。

[oracle@lf backup]$ cd script/
[oracle@lf script]$ vi  rman_arch_orcl_backup.sh
   
备注:如果在系统的oracle用户下执行就必须带有ORACLE_SID和ORACLE_HOME等变量,因为定时任务执行时是不执行变量的,所以需要在脚本中定义,如果是在系统的root用户下执行,那么可以在定时任务加“-”用于执行变量(-:切换用户并允许环境变量.bash_profile),或者在定时任务不加“-”,还是将变量放在脚本中定义。
    系统oracle用户下定义定时任务:* * * * * 脚本
    系统root用户下定义定时任务:* * * * * su - oracle -c脚本
    
export BAKDATE=`date +%Y%m%d`
export ORACLE_SID=orcl1
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

$ORACLE_HOME/bin/rman target / log=/backup/logs/rman_arch_backup$BAKDATE.log  << EOF      #按照日志生成不同的备份日志,便于排查在备份过程的问题

run
{
crosscheck archivelog all;                                 #验证实例所有的归档,根据的是archive log list
delete noprompt expired archivelog all;                     #删除rman里面显示过期的归档记录。上面的操作是物理删除,但rman的记录还在
delete noprompt force archivelog until time "sysdate-2";       #删除2天前的归档,就是从当前日期开始保留2天内的。加上force参数,解决:RMAN-08138: WARNING: archived log not deleted - must create more backups。原因为CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 10 TIMES TO 'SBT_TAPE';删除的归档日志不符合删除日志之前所需的用户指定的归档日志删除策略数量的备份
}

run
{
allocate channel d5 type disk;                              
backup 
AS COMPRESSED BACKUPSET                                       #压缩备份压缩是为了节省空间,但压缩时cpu会飙升,性能换空间。
tag orcl_arch 
format '/backup/full/orcl_arch_%s_%p_%t' archivelog all;      #备份当前归档,并指定保存路径
release channel d5;                                           #释放通道d5。用于备份归档。如果单独写一个归档备份脚本,即脚本有CONFIGURE RETENTION POLICY TO REDUNDANCY 2,经过测试也不会保留2份归档备份集,而是一直进行备份。如果将备份语句写到全备里面,经过测试可以实现只保留2份归档备份
}
exit
EOF

find /backup/full -name "orcl_arch_*" -mtime +14 -exec rm -rf {} \;          #-mtime +14 -exec rm -rf {} \; 表示删除目录下14天之前被修改过的文件。写为mtine是因为默认输入ls -l(ll)命令输出的内容中就是最后修改时间 (mtime)。rman 进行crosscheck就会把所有的备份片访问一遍,那么如果写-atime(被访问过的文件)就不是实际之前的文件了,从而导致删除失效。本地归档日志保留2天内的,并且每天进行一次定时任务的归档全备,根据全备的策略(每周一和每周五进行全备,保留4份全备),需要保留14次的归档全备定时任务。本地归档日志保留2天内是因为需要保证dg库万一断了,那么本地还有2天的归档,那么还可以通过FAL进程将本地归档传输过去。而保留14次的归档全备定时任务就是保留了14次的归档全备,每次归档全备中都有2天的归档,这样其实每次归档全备都有重复的归档日志,这样没有办法,因为又要保证本地有2天内的归档,又要保证14天前的全备有归档可以恢复,可以最大程度减少数据的丢失,确保异常时可以使用上一次的全备+覆盖之内的归档进行完全恢复。所以find查出14天之前的进行rm删除,也就是保留14天内的14份。

七、在oracle用户下执行rman全备和归档备份的计划任务

[oracle@lf script]# chmod 775 /backup/script/*.sh   --确保root用户有执行权限
[oracle@lf script]# crontab -e
备注:如果在系统的oracle用户下执行就必须带有ORACLE_SID和ORACLE_HOME等变量,因为定时任务执行时是不执行变量的,所以需要在脚本中定义,如果是在系统的root用户下执行,那么可以在定时任务加“-”用于执行变量(-:切换用户并允许环境变量.bash_profile),或者在定时任务不加“-”,还是将变量放在脚本中定义。
   系统oracle用户下定义定时任务:* * * * * 脚本
   系统root用户下定义定时任务:* * * * * su - oracle -c脚本
    
#rman_full
00 23 * * 1,5 sh /backup/script/rman_full_orcl_backup.sh      #每周一和周五执行一次全备,保留4份

#rman_arch
00 02 * * * sh /backup/script/rman_arch_orcl_backup.sh       #每天凌晨进行归档全备,保留14天

八、oracle用户下测试脚本可用性,并查看日志

[oracle@lf script]# sh /backup/script/rman_full_orcl_backup.sh
[oracle@lf script]# sh /backup/script/rman_arch_orcl_backup.sh

[oracle@lf logs]$ tail -200f  /backup/logs/rman_arch_backup20231106.log
[oracle@lf logs]$ tail -200f  /backup/logs/rman_full_orcl_backup20231106.log

     

               

1.2 rman增量备份(基本、差异、累计增量备份的总称):

            

RMAN的块跟踪(增量的时候必须开,在RAC环境中,change tracking file需要放在共享存储上):

Block change tracking 记录自从上一次备份以来数据块的变化,并把这些信息记录在跟踪文件中。RMAN使用这个文件判断增量备份中需要备份的变更数据。这极大的促进了备份性能,RMAN可以不再扫描整个文件以查找变更数据。为此Oracle引入了一个新的后台进程,CTWR,其全称为Change Tracking Writer,用于记录变化的块并将变化写入相应的日志文件中。

开启|关闭rman block tracking块跟踪。增量的时候必须开。在使用RMAN增量备份的情况下,启动block change tracking,在做增量备份时会缩短RMAN备份的时间, 因为不用扫描整个data file。 但是block tracking也会带来其他的一些开销。所以要根据实际情况决定是否启用block change tracking

开启:
SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/home/oracle/block.trc'; 
SQL> select status,filename from v$block_change_tracking; 
   
禁用: 
SQL>alter database disable block change tracking;

             

增量备份(基本、差异、累计增量备份的总称):

    从基本备份以来被修改过或增加过的数据块。增量备份分为0级增量基本备份、1级差异增量备份、1级累积增量备份,增量备份支持归档和非归档模式,并且只能使用rman才可以实现增量备份。 

  • 基本增量(backup incremental level=0 database):基本备份的增量级别为0,执行增量备份操作时,首先需要的是增量基本备份(incremental base backup),以后所有的增量备份都基于这个基本备份。如果没有生成基本备份就尝试执行增量备份操作,RMAN 会自动执行基本备份操作。
  • 差异增量(backup incremental level=1 database):差异备份的增量级别为1,对于差异增量备份来说,第一次是基本备份以来所有变化的数据块,之后RMAN会备份自上次同级或者低级差异增量备份以来所发生变化的数据块,差异备份是RMAN生成的增量备份的默认类型。差异增量是根据上一次备份后,备份有变化的数据。这种备份把全库数据分为一小段一小段的,节省了空间,但在恢复时会很麻烦需要逐个恢复。所以不建议使用 

  • 累积增量(backup incremental level =1 cumulative database):累计备份的增量级别为1 cumulative,对于累计增量备份来说,累计增量是根据上一次备份后,备份最开始到生产的所有数据,占用了空间,在恢复时只需恢复一个即可。累计增量适用于数据量小的数据库,如果数据量很大也不建议使用差异增量备份,在backup 命令中使用cumulative关键字

         

基本增量备份脚本:包括数据文件(数据文件、undo文件、temp文件)、控制文件、参数文件

备注:如果在系统的oracle用户下执行就必须带有ORACLE_SID和ORACLE_HOME等变量,因为定时任务执行时是不执行变量的,所以需要在脚本中定义,如果是在系统的root用户下执行,那么可以在定时任务加“-”用于执行变量(-:切换用户并允许环境变量.bash_profile),或者在定时任务不加“-”,还是将变量放在脚本中定义。
   系统oracle用户下定义定时任务:* * * * * 脚本
   系统root用户下定义定时任务:* * * * * su - oracle -c脚本
          
export BAKDATE=`date +%Y%m%d`
export ORACLE_SID=实例ID
export ORACLE_HOME=数据库home路径

$ORACLE_HOME/bin/rman target / log=/路径/rman_full_orcl_backup$BAKDATE.log  << EOF      #按照日志生成不同的备份日志,便于排查在备份过程的问题

run
{
CONFIGURE RETENTION POLICY TO NONE;                   #none可以把使备份保持策略失效,此时REPORT OBSOLETE和DELETE OBSOLETE将不把任何备份文件视为废弃。测试过备份策略保留4份(CONFIGURE RETENTION POLICY TO REDUNDANCY 4;),备份策略中包括了全备、参数文件、控制文件、归档文件的备份,但在实际第4次运行时发现,删除了第一个和第二次的参数文件和控制文件,非常的奇怪,所以不采用备份策略(CONFIGURE RETENTION POLICY TO NONE;),采用linux的rm -rf实现删除备份,服务器上没有的备份介质,通过crosscheck backup;和delete noprompt expired backup;删除rman的备份相关信息

crosscheck backup;
delete noprompt expired backup;                 #删除过期的备份集。因为采用linux的rm -rf实现删除备份,服务器上没有的备份介质,所以通过crosscheck backup;和delete noprompt expired backup;删除rman的备份相关信息
crosscheck copy;
delete noprompt expired copy;                   #删除过期的备份。同上
crosscheck archivelog all;
delete noprompt expired archivelog all;         #删除过期的归档备份。同上
}

run {                                                     #rman工具内部命令 
allocate channel d1 type disk;                             #分配通道d1,类型为磁盘
allocate channel d2 type disk;                             #分配通道d2,类型为磁盘(生产上结合io的处理并发的能力,按需分配通道,2个通道同时进行)
setlimit channel d1 kbytes 204800000 maxopenfiles 32 readrate 200;      #限制通道d1的一个备份集最大为204800000kb(200G),最大打开文件数为32个,每秒向缓存读200M。
setlimit channel d2 kbytes 204800000 maxopenfiles 32 readrate 200;      #限制通道d1的一个备份集最大为204800000kb(200G),最大打开文件数为32个,每秒向缓存读200M。(为优化参数,2个通道同时进行,也就是以400M/s存到缓存向磁盘写入。生产上结合io的处理并发的能力)

sql 'alter system archive log current';                        #会对数据库中所有实例执行日志切换,进行归档

backup
	incremental level 0        #如果没有生成基本备份就尝试执行增量备份操作,RMAN会自动执行基本备份操作。差异增量备份第一次备份必须需要incremental level 0先生成基本备份,然后差异备份incremental level 1根据基本备份只备份有变化的数据。但是在生产中不可能先写一条incremental level 0再写一条incremental level 1,所以直接写incremental level 1在第一次RMAN会自动执行基本备份
	AS COMPRESSED BACKUPSET                         #压缩备份压缩是为了节省空间,但压缩时cpu会飙升,性能换空间。压缩后的备份集为实际数据量的30%左右
#skip inaccessible                                  #备份时跳过不可读的的文件,不可读的文件就算备份过来也恢复不了。使用SKIP INACCESSIBLE选项可能会导致备份不完整,因此建议在使用该选项之前仔细考虑其影响
	tag orcl_full                                       #tag是将备份集命名      
	format '/路径/orcl_full_%s_%p_%t'         #备份文件的保存路径,默认保存在闪回路径下。    
	(database);                                        #database表示全库备份(全备)
release channel d1;                                     #释放通道d1
release channel d2;                                     #释放通道d2

allocate channel d3 type disk;                           
backup
tag orcl_ctl
format '/路径/orcl_ctl_%s_%p_%t' current controlfile;        #备份当前控制文件,并指定保存路径
release channel d3;             
 
allocate channel d4 type disk;     
backup 
tag orcl_spfile 
format '/路径/orcl_spfile_%s_%p_%t' spfile;      #备份当前参数文件,并指定保存路径
release channel d4; 
}                       
exit
EOF

find /路径 -name "orcl_*" -mtime +天数 -exec rm -rf {} \;      

           

差异增量备份脚本:包括数据文件(数据文件、undo文件、temp文件)、控制文件、参数文件

备注:如果在系统的oracle用户下执行就必须带有ORACLE_SID和ORACLE_HOME等变量,因为定时任务执行时是不执行变量的,所以需要在脚本中定义,如果是在系统的root用户下执行,那么可以在定时任务加“-”用于执行变量(-:切换用户并允许环境变量.bash_profile),或者在定时任务不加“-”,还是将变量放在脚本中定义。
   系统oracle用户下定义定时任务:* * * * * 脚本
   系统root用户下定义定时任务:* * * * * su - oracle -c脚本
          
export BAKDATE=`date +%Y%m%d`
export ORACLE_SID=实例ID
export ORACLE_HOME=数据库home路径

$ORACLE_HOME/bin/rman target / log=/路径/rman_full_orcl_backup$BAKDATE.log  << EOF      #按照日志生成不同的备份日志,便于排查在备份过程的问题

run
{
CONFIGURE RETENTION POLICY TO NONE;                   #none可以把使备份保持策略失效,此时REPORT OBSOLETE和DELETE OBSOLETE将不把任何备份文件视为废弃。测试过备份策略保留4份(CONFIGURE RETENTION POLICY TO REDUNDANCY 4;),备份策略中包括了全备、参数文件、控制文件、归档文件的备份,但在实际第4次运行时发现,删除了第一个和第二次的参数文件和控制文件,非常的奇怪,所以不采用备份策略(CONFIGURE RETENTION POLICY TO NONE;),采用linux的rm -rf实现删除备份,服务器上没有的备份介质,通过crosscheck backup;和delete noprompt expired backup;删除rman的备份相关信息

crosscheck backup;
delete noprompt expired backup;                 #删除过期的备份集。因为采用linux的rm -rf实现删除备份,服务器上没有的备份介质,所以通过crosscheck backup;和delete noprompt expired backup;删除rman的备份相关信息
crosscheck copy;
delete noprompt expired copy;                   #删除过期的备份。同上
crosscheck archivelog all;
delete noprompt expired archivelog all;         #删除过期的归档备份。同上
}

run {                                                     #rman工具内部命令 
allocate channel d1 type disk;                             #分配通道d1,类型为磁盘
allocate channel d2 type disk;                             #分配通道d2,类型为磁盘(生产上结合io的处理并发的能力,按需分配通道,2个通道同时进行)
setlimit channel d1 kbytes 204800000 maxopenfiles 32 readrate 200;      #限制通道d1的一个备份集最大为204800000kb(200G),最大打开文件数为32个,每秒向缓存读200M。
setlimit channel d2 kbytes 204800000 maxopenfiles 32 readrate 200;      #限制通道d1的一个备份集最大为204800000kb(200G),最大打开文件数为32个,每秒向缓存读200M。(为优化参数,2个通道同时进行,也就是以400M/s存到缓存向磁盘写入。生产上结合io的处理并发的能力)

sql 'alter system archive log current';                        #会对数据库中所有实例执行日志切换,进行归档

backup
	incremental level 1        #如果没有生成基本备份就尝试执行增量备份操作,RMAN会自动执行基本备份操作。差异增量备份第一次备份必须需要incremental level 0先生成基本备份,然后差异备份incremental level 1根据基本备份只备份有变化的数据。但是在生产中不可能先写一条incremental level 0再写一条incremental level 1,所以直接写incremental level 1在第一次RMAN会自动执行基本备份
	AS COMPRESSED BACKUPSET                         #压缩备份压缩是为了节省空间,但压缩时cpu会飙升,性能换空间。压缩后的备份集为实际数据量的30%左右
#skip inaccessible                                  #备份时跳过不可读的的文件,不可读的文件就算备份过来也恢复不了。使用SKIP INACCESSIBLE选项可能会导致备份不完整,因此建议在使用该选项之前仔细考虑其影响
	tag orcl_full                                       #tag是将备份集命名      
	format '/路径/orcl_full_%s_%p_%t'         #备份文件的保存路径,默认保存在闪回路径下。    
	(database);                                        #database表示全库备份(全备)
release channel d1;                                     #释放通道d1
release channel d2;                                     #释放通道d2

allocate channel d3 type disk;                           
backup
tag orcl_ctl
format '/路径/orcl_ctl_%s_%p_%t' current controlfile;        #备份当前控制文件,并指定保存路径
release channel d3;             
 
allocate channel d4 type disk;     
backup 
tag orcl_spfile 
format '/路径/orcl_spfile_%s_%p_%t' spfile;      #备份当前参数文件,并指定保存路径
release channel d4; 
}                       
exit
EOF

find /路径 -name "orcl_*" -mtime +天数 -exec rm -rf {} \;      

    各位小伙伴增量备份我就不做演示了,因为各位小伙伴可以自行测试。


    兄弟们,今天关于备份的内容已经全面展开。由于涉及到的命令较多,如果在执行过程中遇到问题,欢迎随时与我取得联系。那么备份的知识我们已经掌握得差不多了,接下来,我们将开始探讨数据恢复的相关内容。敬请期待下篇文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/638898.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA 转 Golang——速通 Golang 基础

文章目录 1. 前言&#xff1a;2. go的下载与配置3. Golang 目录结构4. Golang 的基础语法4.1. 变量声明4.2. 输入输出4.3. 条件控制4.4. 数组和切片4.5. 映射表 1. 前言&#xff1a; 根据鼠鼠的实习投递经历&#xff0c;由于越来越多中大型公司都使用 Golang&#xff0c;在现在…

《暮色将尽》跨越世纪的历程,慢慢走向并完善自我

《暮色将尽》跨越世纪的历程&#xff0c;慢慢走向并完善自我 戴安娜阿西尔&#xff08;1917-2019&#xff09;&#xff0c;英国知名文学编辑、作家。著有《暮色将尽》《昨日清晨》《未经删节》《长书当诉》等。 曾嵘 译 文章目录 《暮色将尽》跨越世纪的历程&#xff0c;慢慢走…

从零开始搭建SpringCloud Alibaba微服务架构

Spring Cloud Alibaba是Spring Cloud的一个拓展项目&#xff0c;它用于构建基于阿里巴巴的微服务应用。它提供了多个阿里巴巴的开源组件&#xff0c;如Nacos、Sentinel、Dubbo等&#xff0c;用于解决微服务架构中的服务注册、配置管理、流量控制等问题。 Spring Cloud Alibaba…

GPIO模拟spi时序点亮数码管

目录 spi.h spi.c main.c 实验效果 spi.h #ifndef __SPI_H__ #define __SPI_H__#include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h"//spi初始化 void spi_init(); //spi写入数据 void spi_write(unsigned char data);#endif spi.c #include…

P2P服务端模型配合 Tool.net P2pServerAsync 类使用

Tool.Net 支持的 P2P 服务器模型实例 说明服务器部分相关代码相关调用实例Tcp版本Udp版本 最后附一张思维图 说明 当前文章&#xff0c;仅是Tool.Net 开源库的一个缩影。本次更新V5.0版本以上提供支持。可以提供简单实现P2P功能用于业务开发。 服务器部分相关代码 完整代码&…

SpringCloud微服务03-微服务保护-分布式事务-MQ基础-MQ高级

一、微服务保护 1.雪崩问题 如何做好后备方案就是后续&#xff1a; 2.雪崩解决方案 某一个服务的线程是固定的&#xff0c;出现故障线程占满后&#xff0c;就不会让取调用这个服务&#xff0c;对其他服务就没有影响。 3.Sentinel ①初识Sentinel 配置过程&#xff1a;day05-服…

核心四:线程的一生

4、核心四&#xff1a;线程的一生&#x1f49f; 4.1 New 已创建但还未启动的新线程。 我们new Thread之后&#xff0c;线程已经实现了一些准备工作。但没有运行run方法&#xff0c;因为没有使用start来开启线程。此时&#xff0c;线程处于New状态。 4.2 Runnable&#xff08…

element-ui的Form 表单有些项的参数校验

项目场景&#xff1a; 提示&#xff1a;项目相关背景&#xff1a; 项目场景&#xff1a;有时候自己的Form 表单中的某几项引入的一些项不好去校验 这样的咋去校验呢&#xff1f; 解决方案&#xff1a; 提示&#xff1a;问题的具体解决方案&#xff1a; 例如&#xff1a;写一…

将Surface的分辨率减半以省电(二合一本\笔记本电脑适用)

【完全自定义分辨率教程】这篇教程用于将Surface之类的高分屏&#xff08;高分辨率&#xff09;的二合一本或笔记本等的分辨率调整为原来的一半&#xff0c;以实现省电等目的。 下载CRU&#xff08;Custom Resolution Utility&#xff09;解压后&#xff0c;打开CRU.exe选择当…

【每日刷题】Day48

【每日刷题】Day48 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 872. 叶子相似的树 - 力扣&#xff08;LeetCode&#xff09; 2. 114. 二叉树展开为链表 - 力扣&…

每日一题《leetcode--382.链表随机结点》

https://leetcode.cn/problems/linked-list-random-node/ 这道题我们首先看到题目中的要求&#xff1a;在单链表中随机选取一个链表中的结点&#xff0c;要使每个结点被选取的概率是一样的。 当我们看到随机这两个字时&#xff0c;应该就会想起rand()这个函数。接着我们把使用这…

Rhinoceros v7.5 解锁版安装教程 (3D三维造型软件)

前言 Rhinoceros 中文名称犀牛是一款超强的三维建模工具&#xff0c;全称Rhinoceros&#xff0c;Rhino是美国Robert McNeel & Assoc开发的PC上强大的专业3D造型软件&#xff0c;它可以广泛地应用于三维动画制作、工业制造、科学研究以及机械设计等领域。它能轻易整合3DS M…

SpringFramework实战指南

二、SpringFramework实战指南 目录 一、技术体系结构 1.1 总体技术体系1.2 框架概念和理解 二、SpringFramework介绍 2.1 Spring 和 SpringFramework概念2.2 SpringFramework主要功能模块2.3 SpringFramework 主要优势 三、Spring IoC容器和核心概念 3.1 组件和组件管理概念3…

element-ui手机区号+手机号

需求场景 项目开发中对方要求手机号带上全球区号 需求分析 项目使用的是若依前端框架&#xff0c;element-ui的框架。尝试使用已经网上的组件vue-country-intl等发现不怎么适配element-ui的样式等。这还不是关键的&#xff0c;关键的是弹窗中使用这些组件发现区号的下拉展示框…

面试框架【面试准备】

前言 2023-9-12 12:12:04 2023-09-14 16:13:04 公开发布于 2024-5-22 00:16:21 以下内容源自《【面试准备】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://blog.csdn.net/qq_51625007 禁止其他平…

文件流下载优化:由表单提交方式修改为Ajax请求

如果想直接看怎么写的可以跳转到 解决方法 节&#xff01; 需求描述 目前我们系统导出文件时&#xff0c;都是通过表单提交后&#xff0c;接收文件流自动下载。但由于在表单提交时没有相关调用前和调用后的回调函数&#xff0c;所以我们存在的问题&#xff0c;假如导出数据需…

idea上传git命令

git init git remote add origin git add . git commit -m "标题" git push -u origin master

《Fundamentals of Power Electronics》——开关电源环路稳定性分析(中)

7.传递函数 传递函数&#xff0c;简单的理解就是输入和输出之间的关系。通过传递函数可以知道这个系统对不同频率信号响应&#xff0c;而这些响应通过画出传递函数的波特图又能知道传递函数在某点频率的相位和增益。一个系统要稳定可靠&#xff0c;那就需要一定的相位裕度和增…

基础3 探索JAVA图形编程桌面:逻辑图形组件实现

在一个宽敞明亮的培训教室里&#xff0c;阳光透过窗户柔和地洒在地上&#xff0c;教室里摆放着整齐的桌椅。卧龙站在讲台上&#xff0c;面带微笑&#xff0c;手里拿着激光笔&#xff0c;他的眼神中充满了热情和期待。他的声音清晰而洪亮&#xff0c;传遍了整个教室&#xff1a;…

【嵌入式芯片开发】不使用MicroLib的串口重定向万能预编译配置(适用于ARMCC、AC6等不同的编译器及版本)

【嵌入式芯片开发】不使用MicroLib的串口重定向万能预编译配置&#xff08;适用于ARMCC、AC6等不同的编译器及版本&#xff09; 文章目录 基本的串口重定向接收中断与scanf不能同时工作重定向卡死、低功耗一直唤醒 串口重定向万能预编译配置附录&#xff1a;Cortex-M架构的Sys…