学无止境
分类: Oracle
2013-09-16 15:06:10
一、备份方法:
1.全库备份
全库备份为full备份,在RMAN中检查备份集的TYPE为Full,full备份不能作为增量备份的level 0使用。
可以就使用以下命令备份,备份包括数据文件、控制文件、归档日志文件,控制文件中还包含spfile文件。
RMAN> backup database;
2.表空间备份
RMAN> backup tablespace ldytbs;
3.数据文件备份
RMAN> backup datafile 1,2,3,4 format 'g:\oracle\backup\ora10g_dbbak_%d_%s_%p.dbf';
4.控制文件备份
控制文件的备份,通常在database的SQL下完成,例如:
SQL> alter database backup controlfile to 'g:\oracle\backup\ora10g_ctlbak.ctl';
在rman中可以使用以下命令备份当前控制文件:
RMAN> backup current controlfile;
5.归档日志备份
备份归档日志,并删除已备份的归档日志。
需要注意的是,如果全备的时间点和归档备份时间点相同,脚本里又包含delete input,那么其中一个任务在备份归档日志时,可能会由于归档日志被删除了报错,
RMAN> backup format 'g:\oracle\backup\archbak_%d_%s_%p' archivelog all delete input;
6.增量备份
增量备份有2种,差异增量和累计增量,通常使用累计增量,虽然这种备份方式需要更多的空间。
增量备份具有level,首次备份需要具有一个level 0的备份,level 0并不同于full备份。
RMAN> backup incremental level 0 cumulative database;
基于level 0的备份可以有1级备份,基于1级备份可以有2级备份
RMAN> backup incremental level 1 cumulative database;
在RMAN中检查备份集的TYPE为Incr。
增量备份时,如果数据库有新加入的数据文件或表空间,需要再进行一次level 0备份,否则会找不到新增文件的parent备份。
7.copy备份
通常copy备份用于数据文件或数据库的迁移,例如文件系统迁移到ASM上。
有2个命令:backup as copy和copy。copy只能用于数据文件或归档日志,backup as copy可以用于包括表空间和数据库。
例如迁移表空间到
先将表空间脱机
RMAN> sql 'alter tablespace ldytbs offline';
使用backup as copy命令迁移
RMAN> backup as copy tablespace ldytbs format 'E:\oracle\oradata\ldytbs_%U';
切换表空间
RMAN> switch tablespace ldytbs to copy;
将表空间online
RMAN> sql 'alter tablespace ldytbs online';
类似的方法可以用于datafile,但是需要注意的是做datafile迁移之后,在online之前需要对datafile进行recover,例如:
SQL> recover datafile 5;
8.检查备份以及删除过期备份
检查备份
RMAN> crosscheck backup;
检查归档日志,如果发生了归档日志没有备份就被删除了,需要让rman检查归档日志,才能正常备份。
RMAN> crosscheck archivelog all;
删除不存在的备份
RMAN> delete noprompt expired backup;
删除过期备份
RMAN> delete noprompt obsolete;
二、备份策略
备份策略需要根据实际情况来制定,这里只关注RMAN热备的情况,通常需要关心的内容有:
1.什么时候备份
2.用何种方式备份
3.备份保留时间周期
4.备份到哪里
5.如何避免单点故障造成没有备份
6.备份的IO速率
...
等等内容
一般是写好备份脚本,通过crontab任务自动备份,在大型系统中,使用第三方备份软件进行备份调度。
三、备份脚本
以下是一个备份脚本的例子:
run{
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
backup
incremental level 0 cumulative
filesperset 2
format '/orabak/db_level0_%d_%s_%p'
tag 'level 0'
(database include current controlfile);
sql 'alter system archive log current';
backup
filesperset 5
format '/orabak/arch_%d_%s_%p'
(archivelog all delete input);
release channel d1;
release channel d2;
release channel d3;
release channel d4;
}
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;