基础配置

RMAN> show all;

RMAN configuration parameters for database with db_unique_name XE are:

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
#说明:用来决定备份的有效性,即使失效了,也就是在RMAN目录中标记为丢弃罢了,文件不会被自动删除,仍然可以用来恢复,有三种配置方式
#a. configure retention policy to recovery window of 7days 保持足够的备份,可以将数据库恢复到最近7天内的任意时刻。任何超过7天的数据库备份将被标记为过期Obsolete,配置语句:configure retention policy to recovery window of 7days;
#b.默认,保持可以恢复的最新的5份数据库备份,任何超过最新的5份的备份都将被标记为redundancy(过多、冗余的)。配置语句:configure retention policy to redundancy 5
#c.将禁用备份保留策略,rman此后不会将任何备份集或备份镜像标记为过期Obsolete状态。配置语句:configure retention policy to none; 

CONFIGURE BACKUP OPTIMIZATION ON;
#说明:rman将对备份的数据文件及归档等文件进行一种优化的算法
#配置:configure backup optimization on;

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
#说明:支持的I/O设备有两种,磁带和磁盘,默认为磁盘,如果IO设备发生变化,相关配置项也需要修改configure device type sbt parallelism 1; 
#配置:configure default device type to sbt; # 改为磁带

CONFIGURE CONTROLFILE AUTOBACKUP ON;
#说明:是否开启控制文件自动备份
#配置:configure controlfile autobackup on;

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/mnt/bak/xe/20201209/xe_lev1_202012092200_%F';
#说明:指定备份的控制文件格式和路径
#默认:CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; 

CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
#说明:设置备份的并行度 
#配置:configure device type disk parallelism 2;

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
#说明:设置数据库的每次备份的copy数量,oracle的每一次备份都可以有多份完全相同的拷贝。 

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
#说明:设置数据库的归档日志的存放设备类型

CONFIGURE MAXSETSIZE TO UNLIMITED; # default
#说明:单文件大小的限制

CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
#说明:配置控制文件的快照文件的存放路径和文件名,这个快照是在备份期间产生的,用于控制文件的读一致性

CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
#说明:指定加密算法,还有一个是 ‘AES256'

CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
#说明:定义压缩算法

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
#说明:定义归档删除策略

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_xe.f'; # default
#说明:控制文件快照存放路径,RMAN在使用控制文件备份的时候,备份开始点需要最新的检查点信息以及文件头信息。同时,在整个备份期间需要保证控制文件的一致性。但是对于一个实时更新的数据库系统,这是无法保证的,因为备份期间数据库需要写检查点、切换日志,这些更新都会记录到控制文件中。为了保证控制文件的一致性,RMAN使用snapshot control file,在备份开始时,将控制文件保存一个最新的快照,RMAN使用这个控制文件的快照进行后面的备份。

开启归档

SQL> alter database archivelog;

Database altered.

SQL> archive log list;
Database log mode	       Archive Mode
Automatic archival	       Enabled
Archive destination	       USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     12
Next log sequence to archive   13
Current log sequence	       13

命令

(1)list命令

list可用于查看数据库、表空间、数据文件、参数文件、归档日志文件的备份或镜像拷贝信息,如果希望以概要格式显示备份信息,则可以执行List...Summary命令。

RMAN> list backup by file; 
#按备份类型列出备份 Datafile\Archivelog-\Control File\Spfile

RMAN> list backup; 
#列出详细备份,备份集(Backup Sets),镜像备份(image copies),proxy 
copies的信息

RMAN> list expired backup; 
#列出过期的备份

RMAN> list backup summary; 
#概述可用的备份

RMAN> list expired backup by file;
#按备份类型列出过期备份信息

RMAN> list backupset;
#列出信息备份信息:备份集(Backup Sets),proxy copies信息

RMAN> list copy;
#列出备份的映像副本信息

RMAN> list backup of tablespace users;
#列出表空间的备份

RMAN> list backup of datafile 1; 
#列出数据文件的备份

RMAN> list archivelog all;
#列出归档日志信息

RMAN> list backup of archivelog all; 
#列出归档日志的备份信息

RMAN> list backup of controlfile; 
#列出控制文件的备份信息

RMAN> list backup of spfile;
#列出spfile的备份信息
-------------------------------------------------------

RMAN> list backup of archivelog all;
RMAN> list backup of archivelog from scn 32727821345;
RMAN> list backup of archivelog until scn 32724513567;
RMAN> list backup of archivelog from scn 32723731113 until scn 22727268951;
RMAN> list backup of archivelog from logseq 45732;
RMAN> list backup of archivelog until logseq 55932;
RMAN> list backup of archivelog from logseq 56426 until logseq 67428;
#查看已备份的归档日志信息

(2)report命令

report主要对数据库以及现有的备份进行分析,以确定哪些数据文件需要备份。

RMAN> report schema;         
#模式指的是数据库的物理结构,包括数据文件名、数据文件号、为这些数据文件指派的表空间、数据文件大小、以及数据文件是否含有回滚段

#也可以列出过去数据库的结构信息
RMAN>report schema at time 'sysdate-1';
RMAN>report schema at scn 500;
RMAN>report schema at sequence 20 thread 1;

RMAN>report need backup days =2; 
#报告最近2天没有备份过的数据文件
 
RMAN>report need backup days 2 tablespace users;  
#报告最近2天在USERS表空间上未备份的数据文件;

RMAN>report need backup incremental  3;
#报告增量备份超过3次的文件
 
RMAN>report need backup redundancy = 2; 
#报告备份文件低于2份的文件

RMAN>report need backup recovery window of 2 days; 
#报告文件报表的恢复需要超过2天的归档日志的文件

RMAN>report unrecoveable; 
#报告数据库中不可恢复的数据文件

RMAN>report obsolete redunndancy 2; 
#报告备份次数超过2次的陈旧备份;

RMAN>report obsolete; 
#报告多余的备份

(3)crosscheck命令

crosscheck 的目的是检查RMAN 的目录以及物理文件,如果物理文件不存在于介质上,将标记为Expired。如果物理文件存在,将维持Available。如果原先标记为Expired的备份集再次存在于备份介质上(如恢复了损坏的磁盘驱动器后),
crosscheck将把状态重新从Expired标记回Available.
Available:RMAN认为该项存在于备份介质上
Expired:备份存在于控制文件或恢复目录中,但是并没有物理存在于备份介质上

RMAN> crosscheck backup;   
#核对所有备份,一次备份会有很多备份集,每个备份集可能包含多个备份片      

RMAN> crosscheck backup of database;  
#核对所有数据文件的备份集    

RMAN> crosscheck backupset 2567;  
#核对编号是2567的备份集
    
RMAN> crosscheck backuppiece 1789;  
#核对编号是1789的备份片

RMAN> crosscheck backup of tablespace users;   
#核对特定表空间的备份集      

RMAN> crosscheck backup of datafile 4;   
#核对特定数据文件的备份集       

RMAN> crosscheck backup of controlfile;   
#核对控制文件的备份集 

RMAN> crosscheck backup of spfile;   
#核对SPFILE的备份集       

RMAN> crosscheck  archivelog all;   
#对归档日志文件进行验证

RMAN> crosscheck  archivelog '/u01/arch/xxxx.log';   
#对归档日志文件进行验证

RMAN> crosscheck  archivelog scn between 1000 and 2000;   
#对归档日志文件进行验证

RMAN> crosscheck  archivelog from time 'sysdate-7' until time 'sysdate';   
#对归档日志文件进行验证

RMAN> crosscheck backup of archivelog sequence 1;   
#核对归档日志的备份集  

RMAN> crosscheck copy;        
#核对所有映像副本       

RMAN> crosscheck copy of database;   
#核对所有数据文件的映像副本  

RMAN> crosscheck copy of tablespace users;        
#核对特定表空间的映像副本       

RMAN> crosscheck copy of datafile 6;   
#核对特定数据文件的映像副本       

RMAN> crosscheck copy of archivelog sequence 4;   
#核对归档日志的映像副本       

RMAN> crosscheck copy of controlfile;
#核对控制文件的映像副本         

(4)validate命令

通过validate可以对数据库中的数据文件进行校验,以及对备份文件、归档日志文件进行校验,以保证这样的文件可以用于数据恢复。

可以针对全库、控制文件、参数文件等进行验证
RMAN> validate database;
#校验全库恢复

RMAN> validate tablespace users;
#验证表空间USERS恢复

RMAN> validate spfile;
#验证参数文件恢复

RMAN> validate datafile 1;
#验证数据文件1恢复

RMAN> validate archivelog all;
#验证归档日志

RMAN> validate datafile 1 block 8;  
#验证数据文件单个数据块block是否损坏

RMAN> validate backupset 20;
#验证备份集20是否可用

#validate可以作为restore的子命令对备份文件进行校验
RMAN>restore tablespace users validate;
RMAN>restore database validate;
RMAN>restore archivelog all validate;
RMAN>restore archivelog scn between 1 abd 1000 validate;

(5)delete命令

delete expired会删除RMAN以为存在但是实际上在磁盘或者磁带上已经被删除的备份;delete obsolete则删除旧于备份保留策略定义的备份。

RMAN>delete backup;
#删除所有备份

RMAN>delete datafilecopy all(或指定文件'/u01/data/xxx.bak');
#删除所有数据文件副本

RMAN>delete noprompt archivelog all;
#使用noprompt后删除时不需要确认

#删除备份集
RMAN>delete backupset;
RMAN>delete backupset of datafile 1;
RMAN>delete backupset of tablespace users;
RMAN>delete backupset of controlfile/spfile;

#删除映像拷贝文件
RMAN>delete copy;
RMAN>delete copy of datafile 1;
RMAN>delete copy of tablespace users;
RMAN>delete copy of controlfile/spfile;

#删除归档日志命令
RMAN>delete archivelog all;
RMAN>delete archivelog until sequence xxx;
RMAN>delete archivelog from sequence xxx until  sequence xxx;
RMAN>delete archivelog all completed before 'sysdate-1';
RMAN>delete force archivelog all completed before 'sysdate-1';
#force强制删除
RMAN>delete archivelog from time 'sysdate-20' until time 'sysdate-2';
RMAN>delete archivelog from time 'sysdate-1';

RMAN>delete obsolete;
#删除过期备份   

#删除无效备份(物理文件受损或不存在)
RMAN>delete expired backup;
RMAN>delete expired archivelog all;
RMAN>delete expired copy;
RMAN>delete expired backup of tablespace users;

(6)backup命令

备份有两种方式:
备份集:不会包括空闲块,如果一个块从未被写入数据,则RMAN在进行的时候,会忽略这些空块,能够进行增量备份
映像拷贝:就是平时的复制,不同的是这个过程由RMAN完成,在资料库中记录复制的情况。生成镜像副本的好处在于恢复时速度相对备份集来说要更快 ,恢复时可以不用拷贝,指定新位置即可。

RMAN>backup database; 
#备份整个数据库

RMAN>backup database include current controlfile; 
#备份整个数据库还包括现在的controlfile

RMAN>backup database plus archivelog all; 
#备份整个数据库还包括全部的archivelog

RMAN>backup as compressed backupset full database; 
#压缩备份

RMAN>backup database plus archivelog all delete input; 
#备份归档文件后删除第一个归档目录下的归档文件

RMAN>backup database plus archivelog all delete all input; 
#备份归档文件后删除所有路径下的归档

RMAN>backup as compressed backupset full database include current controlfile plus archivelog delete all input;
#全库备份,备份完成后删除所有归档文件

RMAN>backup tablespace users; 
#备份users表空间

RMAN>backup datafile 1; 
#备份指定的数据文件1

RMAN>backup spfile; 
#备份初始化参数文件

RMAN>backup current controlfile; 
#备份当前的控制文件

RMAN>backup archivelog all; 
#备份所有的归档日志

RMAN>backup incremental level 0 database fotmat '/u01/backup/db_0_%T_%U';
#0级备份
-----------------------------

#备份映像文件
RMAN>backup as copy datafile 1 format '/u01/data/system.dbf';
RMAN>backup as copy controlfile/spfile format '/u01/data/xxxx';

(7)restore命令

从备份中还原数据

RMAN>restore database;
RMAN>restore tablespace users;
RMAN>restore controlfile from '/data/xxxx';
RMAN>restore all datafiles;
RMAN>restore datafile 1;
RMAN>restore archivelog;  

(8)recover命令

会自动应用归档日志进行恢复

RMAN>recover database; 
RMAN>recover tablespace users; 
RMAN>recover datafile 1;

(9)目前在用的备份和删除脚本

a.增量备份脚本
##======================================================================
##  db_bak_rman.sh
##  usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>
##         BACKUP_LEVEL:
##                    F: full backup
##                    0: level 0
##                    1: level 1
##======================================================================
#!/bin/bash
# User specific environment and startup programs

if [ -f ~/.bash_profile ];
then
  . ~/.bash_profile
fi

ORACLE_SID=${1};                           export ORACLE_SID
RMAN_LEVEL=${2};                           export RMAN_LEVEL
TIMESTAMP=`date +%Y%m%d%H%M`;              export TIMESTAMP
DATE=`date +%Y%m%d`;                       export DATE
#RMAN_DIR=/backup_db_rman/rman;            export RMAN_DIR  #marked by elaine 160603
RMAN_DIR=/mnt/bak/${1};                         export RMAN_DIR
RMAN_DATA=${RMAN_DIR}/${DATE};             export RMAN_DATA
#RMAN_LOG=/backup_db_rman/rman/log;        export RMAN_LOG  #marked by elaine 160603
RMAN_LOG=${RMAN_DIR}/${DATE};                     export RMAN_LOG

# check rman level
#=======================================================================

if [ "$RMAN_LEVEL" == "F" ];
then
  unset INCR_LVL
  BACKUP_TYPE=full
else
  INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}"
  BACKUP_TYPE=lev${RMAN_LEVEL}
fi

RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP};    export RMAN_FILE
SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log;   export SSH_LOG

MAXPIECESIZE=2G;                                                     export MAXPIECESIZE

#check RMAN Backup Path
#=======================================================================

if ! test -d ${RMAN_DATA}
then
  mkdir -p ${RMAN_DATA}
fi

echo "------------------------------------" >>${SSH_LOG}
echo "      " >>${SSH_LOG}
echo "Rman Begin to Working .............." >>${SSH_LOG}
echo "Begin time at:" `date` -- `date +%Y%m%d%H%M` >>${SSH_LOG}

#Startup rman to backup
#=======================================================================
$ORACLE_HOME/bin/rman log=${RMAN_FILE}.log <<EOF

connect target /
run {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${RMAN_FILE}_%F';
ALLOCATE CHANNEL ch1 TYPE DISK;
ALLOCATE CHANNEL ch2 TYPE DISK;
#set limit channel ch1 readrate=10240;
#set limit channel ch1 kbytes=4096000;
#set limit channel ch2 readrate=10240;
#set limit channel ch2 kbytes=4096000;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
BACKUP ${INCR_LVL} DATABASE FORMAT '${RMAN_FILE}_%U' TAG '${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL FORMAT '${RMAN_FILE}_arc_%U' TAG '${ORACLE_SID}_arc_${TIMESTAMP}'
DELETE INPUT;
#DELETE NOPROMPT OBSOLETE;
DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7'; 
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
}

sql "alter database backup controlfile to ''${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak''";

exit;
EOF
RC=$?

cat ${RMAN_FILE}.log >>${SSH_LOG}

echo "Rman Stop working @ time:"`date` `date +%Y%m%d%H%M` >>${SSH_LOG}

echo >>${SSH_LOG}
echo "----------------------------------------" >>${SSH_LOG}
echo "------------------ Disk Space ----------" >>${SSH_LOG}
df -h >>${SSH_LOG}

echo >>${SSH_LOG}

if [ $RC -ne "0" ]; then
  echo "-------------------- error --------------------" >>${SSH_LOG}
else
  echo "------ no error found during RMAN backup period --------" >>${SSH_LOG}
  rm -rf ${RMAN_FILE}.log
fi

#Remove old backup than 5 days
#===========================================================================================
RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d "7 days ago"`;        export RMDIR
echo >>${SSH_LOG}
echo -e "---------------Remove old backup than 7 days -------------\n" >>${SSH_LOG}

if test -d ${RMDIR}
then
  rm -rf ${RMDIR}
  RC=$?
fi

echo >>${SSH_LOG}

if [ $RC -ne "0" ]; then
  echo -e "----------- Remove old backup exception-------------- \n" >>${SSH_LOG}
else
  echo -e "----------- no error found during remove old backup set period------ \n" >>${SSH_LOG}
fi

exit

b.清理备份及归档脚本
#!/bin/bash
export  ORACLE_SID=xxx
$ORACLE_HOME/bin/rman target username/passwd@xx<<EOF
crosscheck archivelog all;
delete NOPROMPT expired archivelog all;
delete noprompt archivelog all completed before 'sysdate -7';
posted on 2022-05-16 18:11  xc川  阅读(0)  评论(0)    收藏  举报