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

news2025/2/24 5:35:09

💫《博主介绍》:✨又是一天没白过,我是奈斯,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 {} \;      

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


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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YoloV8改进策略:蒸馏改进|CWDLoss|使用蒸馏模型实现YoloV8无损涨点|特征蒸馏

摘要 在本文中&#xff0c;我们成功应用蒸馏策略以实现YoloV8小模型的无损性能提升。我们采用了CWDLoss作为蒸馏方法的核心&#xff0c;通过对比在线和离线两种蒸馏方式&#xff0c;我们发现离线蒸馏在效果上更为出色。因此&#xff0c;为了方便广大读者和研究者应用&#xff…

Kubernetes Service 之原理与 ClusterIP 和 NodePort 用法

Kubernetes Service 之原理与 ClusterIP 和 NodePort 用法 Service 定义 在 Kubernetes 中&#xff0c;由于Pod 是有生命周期的&#xff0c;如果 Pod 重启它的 IP 可能会发生变化以及升级的时候会重建 Pod&#xff0c;我们需要 Service 服务去动态的关联这些 Pod 的 IP 和端口…

六个免费的AI制图网站的介绍

六个免费的AI制图网站的介绍 以下是六个免费的AI制图网站的介绍&#xff0c;包括官网、特点、缺点以及使用时的注意事项&#xff1a; 海鲸AI 官网&#xff1a;AI绘画创作平台 - 海鲸AI | 智能艺术生成器特点&#xff1a;支持PC和移动端&#xff0c;集成了Midjourney AI模型&am…

【Spring】SSM介绍_SSM整合

1、SSM介绍 1.1简介 SSM&#xff08;Spring SpringMVC MyBatis&#xff09;整合是一种流行的Java Web应用程序框架组合&#xff0c;它将Spring框架的核心特性、SpringMVC作为Web层框架和MyBatis作为数据访问层框架结合在一起。这种整合方式提供了从数据访问到业务逻辑处理再…

jmeter之测试计划

一、测试计划作用 测试计划是jmeter的默认控件所有线程组都是测试计划的下级控件测试计划可以配置用户自定义的变量测试计划可以配置线程组的串行或并行 二、查看界面 名称&#xff1a;可以修改自定义的名称注释&#xff1a;解释测试计划是用来做什么的用户自定义的变量&…

【Jmeter】使用Jmeter进行接口测试、跨线程组获取参数

Jmeter接口测试 Jmeter设置成中文实操练习-跨线程组提取参数&#xff0c;使用值HTTP请求默认值&HTTP信息头管理器 相信打算从事测试工程师的同学们&#xff0c;肯定对Jmeter是耳熟能详的。使用Jmeter可以进行接口测试、性能测试、压力测试等等&#xff1b;这个章节介绍如何…

在使用LabVIEW控制多个串口设备进行数据读取时,读取时间过长

在使用LabVIEW控制多个串口设备进行数据读取时&#xff0c;如果发现数据更新时间超过5秒&#xff0c;可以从以下几个方面进行分析和解决&#xff1a; 1. 串口配置与通信参数 确保每个串口的通信参数&#xff08;波特率、数据位、停止位、校验位等&#xff09;配置正确&#x…

百度软件测试面试经历,期望薪资27K

一面 1、 请为百度搜索框设计测试用例&#xff1f; 2、百度设计框上线前需要进行那些测试&#xff1f; 界面测试&#xff0c;功能测试&#xff0c;性能测试&#xff0c;安全性测试&#xff0c;易用性测试&#xff0c;兼容性测试&#xff0c;UI测试。 3、如何查看http状态码…

23. 【Java教程】接口

本小节我们将学习 Java 接口&#xff08;interface&#xff09;&#xff0c;通过本小节的学习&#xff0c;你将了解到什么是接口、为什么需要接口、如何定义和实现接口&#xff0c;以及接口的特点等内容。最后我们也将对比抽象类和接口的区别。 1. 概念 Java 接口是一系列方法的…

感恩父母的短视频:成都科成博通文化传媒公司

感恩父母的短视频&#xff1a;情深意重&#xff0c;温馨传递 在这个快节奏、信息化的时代&#xff0c;短视频以其独特的方式&#xff0c;迅速成为了人们表达情感、分享生活的重要工具。成都科成博通文化传媒公司而当我们把镜头对准父母&#xff0c;用短视频的形式记录下对他们…

【面试干货】矩阵对角线元素之和

【面试干货】矩阵对角线元素之和 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、实现思想 创建一个3x3的二维数组来表示输入的矩阵。通过嵌套循环读取输入的矩阵元素&#xff0c;并将其保存到数组中。再次嵌套循…

云端升级,智能适配——LDR6282,USB-C接口显示器的最佳选择

华为MateView USB-C接口显示器技术深度解析与科普 随着科技的飞速发展&#xff0c;终端显示产品也迎来了全新的变革。在众多更新迭代中&#xff0c;华为MateView显示器凭借其独特的USB-C接口设计&#xff0c;为用户带来了前所未有的便捷体验。本文将带您深入探索这款显示器的技…

深度学习500问——Chapter09:图像分割(5)

文章目录 9.12 DenseNet 9.13 图像分割的数据集 9.13.1 PASCAL VOC 9.13.2 MS COCO 9.13.3 Cityscapes 9.14 全景分割 9.12 DenseNet 这篇论文是CVPR2017年的最佳论文。 卷积神经网络结构的设计主要朝着两个方向发展&#xff0c;一个是更宽的网络&#xff08;代表&#xff1a…

vue3之使用图片实现类似于 el-radio 的单选框功能,并且可实现选中和取消选中

背景 我们在工作中常用的一般都是使用类似于 element-plus 中的 el-radio 或者是 el-checkbox 来实现单选或者多选 若有一天我们遇到了一个新的业务需求,需要使用 图片 来实现类似于 el-radio 的功能,并且要求实现第一次点击时处于选中状态,当我们再次点击时处于非选中状态…

vue3的节点靶向更新知识分享

靶向更新的流程 先来看看我画的整个靶向更新的流程&#xff0c;如下图&#xff1a; 整个流程主要分为两个大阶段&#xff1a;编译时和运行时。 编译时阶段找出动态节点&#xff0c;使用patchFlag属性将其标记为动态节点。 运行时阶段分为两块&#xff1a;执行render函数阶段…

vue3 路由跳转 携带参数

实现功能&#xff1a;页面A 跳转到 页面B&#xff0c;携带参数 路由router.ts import { createRouter, createWebHistory } from "vue-router";const routes: RouteRecordRaw[] [{path: "/demo/a",name: "aa",component: () > import(&quo…

RabbitMQ(二)七种工作模式

文章目录 概述:工作模式&#xff08;七种&#xff09;1. "Hello World!"2. Work Queues&#xff08;工作队列模式&#xff09;3. Publish/Subscribe&#xff08;发布订阅模式&#xff09;4. Routing5. Topics6. RPC7. Publisher Confirms 详细1. "Hello World!&…

探秘死锁:原理、发生条件及解决方案

探秘死锁&#xff1a;原理、发生条件及解决方案 死锁是多线程编程中常见的一个问题&#xff0c;它会导致程序停止响应&#xff0c;进而影响系统的稳定性和性能。理解死锁的原理、发生条件以及如何预防和解决死锁是编写健壮并发程序的关键。 1. 死锁的定义 死锁是指两个或多个…

前端 CSS 经典:SVG 描边动画

1. 原理 使用 css 中的 stroke 属性&#xff0c;用来描述描边的样式&#xff0c;其中重要的属性 stroke-dasharray、stroke-dashoffset。理解了这两个属性的原理&#xff0c;才能理解描边动画实现的原理。 stroke-dasharray&#xff1a;将描边线变成虚线、其中实线和虚线部分…

NDIS小端口驱动开发(一)

在四种NDIS相关的驱动中&#xff0c;微型端口驱动(也经常翻译为为小端口驱动)位于驱动栈的底部&#xff0c;一般将它理解为NIC设备的驱动程序&#xff1a; 有几种类型的微型端口驱动程序类型&#xff1a; 无连接微型端口驱动程序用于控制无连接网络媒体 &#xff0c;如以太网的…