Oracle RMAN备份脚本

来源:互联网 发布:涉密网络三员 编辑:程序博客网 时间:2024/05/19 12:36
一、单独备份
1、经典整库备份:backup as compressed backupset database include current controlfile plus archivelog delete all input;
2、tablespace:backup tablespace 名字;
3、数据文件:backup datafile n; (n:具体的数据文件编号select file_name,file_id,tablespace_name from dba_data_files;)
4、控制文件:backup current controlfile;或者backup database include current controlfile;
5、日志文件:backup archivelog all;或者 database plus archivelog;
6、参数文件:backup spfile;
二,备份实战
备份策略
1,小型库一般都是每周做一次全备,周天晚上12点。
2,每半年6月1号晚上0点做一个数据库的全备份(包括所有的数据和只读表空间) 
     每一个月1号晚上0点做一次零级备份(不包含只读表空间)
     每个星期三晚上0点做一次一级备份
     每天晚上0点做一次二级备份
备份前准备,查看环境。
RMAN> show all;

RMAN configuration parameters for database with db_unique_name TEST are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
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
CONFIGURE COMPRESSION ALGORITHM 'BZIP2'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/TEST/db/tech_st/11.1.0/dbs/snapcf_TEST.f'; # default
1,小型库全备:
[oracle@hand ~]$ mkdir orazabbix_rman
[oracle@hand ~]$ cd orazabbix_rman/
[oracle@hand orazabbix_rman]$ mkdir scripts
在/home/oracle/orazabbix_rman/scripts下创建如下脚本(注意这里orazabbix_rman命名规范)
脚本命名为backup.rcv
run {
  # Hot database level 0 whole backup
  allocate channel t1 type disk;
  backup
      incremental level 0
      skip inaccessible
      format '/orabak/orazabbix_rman/backupfiles/lev0/back_%s_%p_%T_%d'
  #AS COMPRESSED backupset
      database plus archivelog
      format '/orabak/orazabbix_rman/backupfiles/lev0/arclogback_%s_%p_%t_%d'
  delete input;
  delete obsolete;
  release CHANNEL t1 ;
}
这里阐述0级增加备份和全备份的区别,level 0级的就是一个full backup。
1,全备份备份了used and unused block
2,0级增量备份只备份了used block
设置小库全备执行脚本注意本地化
[oracle@hand ~]$ echo $ORACLE_SID
ams
[oracle@hand ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/dbhome_1
命名为orazabbix_backup.sh

#!/bin/sh

export ORACLE_SID=ams

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

export TIMESTAMP=`date +'%Y_%m_%d_%H:%M'`

rman target / nocatalog cmdfile=/home/oracle/orazabbix_rman/scripts/backup.rcv log=/orabak/orazabbix_rman/logs/log_hecprod_${TIMESTAMP}.log

编辑完成之后授予执行权限
[oracle@hand scripts]$ chmod +x orazabbix_backup.sh
使用oracle用户执行如下命令,在crontab中配置定时任务。
[oracle@hand ~]$ crontab -e
0 0 * * 0 /home/oracle/orazabbix_rman/scripts/orazabbix_backup.sh
小型库一般都是每周做一次全备,周天晚上0点。
2,大库全备:
全库备份
备份脚本all_backup.rcv
 run{
    configure retention policy to recovery window of 200 days;            #设置两百天备份过期              
  configure controlfile autobackup on;
    configure controlfile autobackup format for device type disk to '/orabak/orazabbix_rman/backupfiles/all/%F.bak';
   allocate channel c1 type disk;
    allocate channel c2 type disk;
    allocate channel c3 type disk;
    backup full tag 'dbfull' format '/orabak/orazabbix_rman/backupfiles/all/full%u_%s_%p' database;
    sql 'alter system archive log current';
    backup filesperset 3 format '/orabak/orazabbix_rman/backupfiles/all/arch%u_%s_%p'
    archivelog all delete input;                                #备份归档可选,可以单独定期备份
    crosscheck backup;
    delete noprompt expired backup;
    report obsolete;
    delete noprompt obsolete;
     release channel c1;
     release channel c2;
     release channel c3;
    }
全库备份执行脚本all_backup.sh

#!/bin/sh

export ORACLE_SID=ams

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

export TIMESTAMP=`date +'%Y_%m_%d_%H:%M'`

rman target / nocatalog cmdfile=/home/oracle/orazabbix_rman/scripts/all_backup.rcv log=/orabak/orazabbix_rman/logs/log_all_${TIMESTAMP}.log

编辑完成之后授予执行权限
[oracle@hand scripts]$ chmod +x all_backup.sh
使用oracle用户执行如下命令,在crontab中配置定时任务。
[oracle@hand ~]$ crontab -e
0 0 1 6,12 0 /home/oracle/orazabbix_rman/scripts/orazabbix_backup.sh
每半年6或12月1号晚上0点做一个数据库的全备份(包括所有的数据和只读表空间)
0级增量备份:
备份脚本level0_backup.rcv如下
run {
  # Hot database level 0 whole backup
 configure retention policy to recovery window of 180 days;
    configure controlfile autobackup on;
    configure controlfile autobackup format for device type disk to '/orabak/orazabbix_rman/backupfiles/lev0/%F.bak';
  allocate channel t1 type disk;
  allocate channel t2 type disk;
  allocate channel t3 type disk;
  backup as compressed backupset
      incremental level 0 tag 'orazabbix_level0'
      skip inaccessible
      format '/orabak/orazabbix_rman/backupfiles/lev0/bak_%d_%T_%s_%p_db_level0'
  #AS COMPRESSED backupset
  database
  plus archivelog
  format '/orabak/orazabbix_rman/backupfiles/lev0/arclogback_%s_%p_%t_%d'
  delete input;
   crosscheck backup; 
    delete noprompt expired backup;
    report obsolete;
  delete noprompt obsolete;
  release channel t1;
  release channel t2;
  release channel t3;
}
0级增量备份执行脚本orazabbix_level0_backup.sh

#!/bin/sh

export ORACLE_SID=ams

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

export TIMESTAMP=`date +'%Y_%m_%d_%H:%M'`

rman target / nocatalog cmdfile=/home/oracle/orazabbix_rman/scripts/level0_backup.rcv log=/orabak/orazabbix_rman/logs/log_lev0_${TIMESTAMP}.log

编辑完成之后授予执行权限
[oracle@hand scripts]$ chmod +x orazabbix_level0_backup.sh
使用oracle用户执行如下命令,在crontab中配置定时任务。
[oracle@hand ~]$ crontab -e
0 0 1 * 0 /home/oracle/orazabbix_rman/scripts/orazabbix_level0_backup.sh
每一个月1号晚上0点做一次零级备份(不包含只读表空间)
1级增量备份:
备份脚本level1_backup.rcv
run {
  # Hot database level 1 whole backup
 configure retention policy to recovery window of 180 days;
    configure controlfile autobackup on;
    configure controlfile autobackup format for device type disk to '/orabak/orazabbix_rman/backupfiles/lev1/%F.bak';
  allocate channel t1 type disk;
  allocate channel t2 type disk;
  allocate channel t3 type disk;
  backup as compressed backupset
      incremental level 1 tag 'subsdb_level1'
      skip inaccessible
      format '/orabak/orazabbix_rman/backupfiles/lev1/bak_%d_%T_%s_%p_db_level1'
  #AS COMPRESSED backupset
  database plus archivelog
  format '/orabak/orazabbix_rman/backupfiles/lev1/arclogback_%s_%p_%t_%d'
  delete input;
  crosscheck backup;
    delete noprompt expired backup;
    report obsolete;
  delete noprompt obsolete;
  release channel t1;
  release channel t2;
  release channel t3;
}
1级增量备份执行脚本orazabbix_level1_backup.sh

#!/bin/sh

export ORACLE_SID=ams

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

export TIMESTAMP=`date +'%Y_%m_%d_%H:%M'`

rman target / nocatalog cmdfile=/home/oracle/orazabbix_rman/scripts/level1_backup.rcv log=/orabak/orazabbix_rman/logs/log_lev1_${TIMESTAMP}.log

编辑完成之后授予执行权限
[oracle@hand scripts]$ chmod +x orazabbix_level1_backup.sh
使用oracle用户执行如下命令,在crontab中配置定时任务。
[oracle@hand ~]$ crontab -e
0 0 * * 3 /home/oracle/orazabbix_rman/scripts/orazabbix_level1_backup.sh
每个星期三晚上0点做一次一级备份(都是压缩备份)
2级增量备份:
备份脚本level2_backup.rcv
run {
  # Hot database level 2 whole backup
 configure retention policy to recovery window of 180 days;
    configure controlfile autobackup on;
    configure controlfile autobackup format for device type disk to '/orabak/orazabbix_rman/backupfiles/lev2/%F.bak';
  allocate channel t1 type disk;
  allocate channel t2 type disk;
  allocate channel t3 type disk;
  backup as compressed backupset
      incremental level 2 tag 'subsdb_level2'
      skip inaccessible
      format '/orabak/orazabbix_rman/backupfiles/lev2/bak_%d_%T_%s_%p_db_level2'
  #AS COMPRESSED backupset
  database
  plus archivelog
  format '/orabak/orazabbix_rman/backupfiles/lev2/arclogback_%s_%p_%t_%d'
  delete input;
  backup current controlfile format '/orabak/orazabbix_rman/backupfiles/lev2/bak_%d_%T_%s_ctl.ctl';
crosscheck backup;
    delete noprompt expired backup;
    report obsolete;
  delete noprompt obsolete;
  release channel t1;
  release channel t2;
  release channel t3;
}
2级增量备份执行脚本orazabbix_level2_backup.sh

#!/bin/sh

export ORACLE_SID=ams

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

export TIMESTAMP=`date +'%Y_%m_%d_%H:%M'`

rman target / nocatalog cmdfile=/home/oracle/orazabbix_rman/scripts/level2_backup.rcv log=/orabak/orazabbix_rman/logs/log_lev2_${TIMESTAMP}.log

编辑完成之后授予执行权限
[oracle@hand scripts]$ chmod +x orazabbix_level2_backup.sh
使用oracle用户执行如下命令,在crontab中配置定时任务。
[oracle@hand ~]$ crontab -e
0 0 * * * /home/oracle/orazabbix_rman/scripts/orazabbix_level2_backup.sh
 每天晚上0点做一次二级备份(都是压缩备份)
归档日志备份:
备份脚本log_backup.rcv
run {
 configure retention policy to recovery window of 180 days; 
  allocate channel t1 type disk;
  backup
    skip inaccessible
    format '/orabak/orazabbix_rman/backupfiles/log/arclogback_%s_%p_%t_%d'
    #AS COMPRESSED backupset
   (archivelog all delete input);
  report obsolete;
  delete noprompt obsolete;
  release CHANNEL t1 ;
}
归档日志备份执行脚本orazabbix_log_backup.sh

#!/bin/sh

export ORACLE_SID=ams

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

export TIMESTAMP=`date +'%Y_%m_%d_%H:%M'`

rman target / nocatalog cmdfile=/home/oracle/orazabbix_rman/scripts/log_backup.rcv log=/orabak/orazabbix_rman/logs/log_log_${TIMESTAMP}.log

编辑完成之后授予执行权限
[oracle@hand scripts]$ chmod +x orazabbix_log_backup.sh
使用oracle用户执行如下命令,在crontab中配置定时任务。
[oracle@hand ~]$ crontab -e
0 0 1 6,12 * /home/oracle/orazabbix_rman/scripts/orazabbix_log_backup.sh
 每年6月12月1日0点做一次归档日志(不是压缩备份)
0 0
原创粉丝点击