I 定义和介绍 备份的定义及分类: 备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本,从不同的角度分类如下: 从物理与逻辑的角度来分类: 从物理与逻辑的,备份可以分为物理备份和逻辑备份。 物理备份:对数据库操作系统的物理文件(数据文件,控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者是以归档日志的方式对运行的数据库进行备份。可以使用oracle的恢复管理器(RMAN)或操作系统命令进行数据库的物理备份。 逻辑备份:对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的EXP,数据泵(EXPDP),数据库闪回技术等第三方工具,都可以进行数据库的逻辑备份。 从数据库的备份角度分类: 从数据库的备份角度,备份可以分为完全备份和增量备份和差异备份 完全备份:每次对数据库进行完整备份,当发生数据丢失的灾难时,完全备份无需依赖其他信息即可实现100%的数据恢复,其恢复时间最短且操作最方便。 增量备份:只有那些在上次完全备份或增量备份后被修改的文件才会被备份。优点是备份数据量小,需要的时间短,缺点是恢复的时候需要依赖以前备份记录,出问题的风险较大。 差异备份:备份那些自从上次完全备份之后被修改过的文件。从差异备份中恢复数据的时间较短,因此只需要两份数据---最后一次完整备份和最后一次差异备份,缺点是每次备份需要的时间较长。 II 备份必须要开启归档
1 创建归档目录
ORACLE>mkdir /arch
ORACLE>chown oracle.dba /arch
2 开归档
SQL>archive log list; --是否为归档模式
SQL>show parameter arch; --查看归档路径
SQL>alter system set log_archive_dest_1=’location=/arch’; --设置归档路径
SQL>shutdown immediate --关闭数据库
SQL>startup mount ----启动到mount 状态开启归档模式、
SQL>alter database archivelog; --开启归档
SQL>alter database open; --开启数据库
SQL>archive log list; --验证
其他
SQL>alter database noarchivelog; --关闭归档
SQL>alter system archive log current; --手工切归档
III 开始备份
1 创建备份路径
mkdir /home/oracle/rman --创建目录
chown oracle.dba rman --改变属主属组
2 执行备份脚本
rman target /
run{
allocate channel c1 type disk; --多开几个通道
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database format '/home/oracle/rman/full_%d_%t_%s_%p'; --备份的数据文件 到制定文件夹
sql'alter system archive log current'; --切换归档
backup archivelog all format '/home/oracle/rman/arch_%d_%t_%s_%p'; --备份归档日志,到制定文件夹
backup current controlfile format '/home/oracle/rman/ctl_%d_%t_%s_%p'; --备份控制文件 ,到制定文件夹
}
查看备份集
list backup;
3 创建linux脚本(我们总不能每次备份都写备份脚本吧)
a)在oracle用户下创建个.sh的文件
vi backup.sh
b)编辑脚本
source /home/oracle/.bash_profile --最好是加上,不然环境变量可能不成功
rman target / <<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database format '/home/oracle/rman/full_%d_%t_%s_%p';
sql'alter system archive log current';
backup archivelog all format '/home/oracle/rman/arch_%d_%t_%s_%p';
backup current controlfile format '/home/oracle/rman/ctl_%d_%t_%s_%p';
}EOF
c)给文件授权,执行的权限
chmod 755 backup.sh
d)执行脚本./backup.sh
4 创建定时任务(如:我们总不能每周天凌晨0点执行./backup.sh脚本吧)
a)在oracle用户编辑定时任务
crontab –e
crontab –l --查看定时任务
b)分* 时* 日* 月* 周*
00 00 * * * /home/oracle/backup.sh --每天凌晨00点00执行.sh 文件
c)对于备份来讲,会照成备份的冗余,所以
vi backup.sh
source /home/oracle/.bash_profile
riqi=`date +%y%m%d`
mkdir /home/oracle/rman/$riqi
rman target / <<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database format '/home/oracle/rman/$riqi/full_%d_%t_%s_%p';
sql'alter system archive log current';
backup archivelog all format '/home/oracle/rman/$riqi/arch_%d_%t_%s_%p';
backup current controlfile format '/home/oracle/rman/$riqi/ctl_%d_%t_%s_%p';
}
EOF
cd /home/oracle/rman/
zip -r ${riqi}.zip $riqi --执行压缩文件,并把文件夹删除
rm -rf $riqi
d)查看压缩进程
ps –ef|grep zip
e)有的单位可能需要把归档单独备份出来,为避免归档过久,我们可以设置自动删除
--创建归档路径mkdir scripts
--编辑脚本
vi scr.sh
scr=`date +%y%m%d`
mkdir /home/oracle/scripts/$scr
rman target / <<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
sql'alter system archive log current';
backup archivelog all format '/home/oracle/scripts/$scr/arch_%d_%t_%s_%p';
delete noprompt archivelog until time 'sysdate-3'; --删除3天前的归档,不同单位不同要求
}
EOF
--修改scr.sh执行权限
--定时任务 crontab -e ,上面有详解
以上讲的为全部备份,如果数据量大的话,就会给数据库照成压力
IIII 下面讲差异增量、累计增量
1 差异增量
2 累计增量

3 创建3个备份脚本
vi level0.sh --创建一个0级备份脚本
rman target / <<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 0 database format '/home/oracle/level/full_%d_%t_%s_%p';
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/level/arch_%d_%t_%s_%p';
backup current controlfile format '/home/oracle/level/ctl_%d_%t_%s_%p';
}
EOF
vi level2.sh --创建一个2级备份脚本
rman target / <<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 2 database format '/home/oracle/level/full_%d_%t_%s_%p';
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/level/arch_%d_%t_%s_%p';
backup current controlfile format '/home/oracle/level/ctl_%d_%t_%s_%p';
}
EOF
vi level1.sh --创建一个1级备份脚本
rman target / <<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 1 database format '/home/oracle/level/full_%d_%t_%s_%p';
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/level/arch_%d_%t_%s_%p';
backup current controlfile format '/home/oracle/level/ctl_%d_%t_%s_%p';
}
EOF
改变level [0,2,1,0,2,2c,1] 就变成不同的备份方案
4 创建定时任务
crontab –e
00 00 * * 7 /home/oracle/level/level0.sh 周天执行0级全备
00 00 * * 1,2,4,5,6 /home/oracle/level/level2.sh --周1,2,4,5,6执行2级备份
00 00 * * 3 /home/oracle/level/level1.sh --周三执行1级备份
结束,哈哈
附归档、备份脚本
开归档、备份脚本.txt
