当前位置: > 数据库 > Oracle >

rman 备份

时间:2015-02-01 21:52来源:linux.it.net.cn 作者:IT

rman 备份


登陆rman
1.使用不带恢复目录的RMAN
  设置目标数据库的 ORACLE_SID ,执行:
$ rman nocatalog
RMAN> connect target

RMAN> connect target internal/<password>@his

2.使用带恢复目录的RMAN
$ rman rman_tsrman/rman@rman
RMAN> connect target

$ rman rman_tsrman/rman@rmantarget internal/<password>@his
其中rman_ts是目录数据库中的表空间名

目录数据库必须打开,目标数据库最少处于unmount状态,且为归档模式

rman target /
rman>shutdown immediate
ramn>startup
rman>host
rman>sql'alter system archivelog'

rman>show all
rman>show channel
rman>show device type
 
rman>backup database
rman>backup tablespace "TEST"
rman>backup datafile n
rman>backup current controlfile
rman>backup database include current controlfile
rman>backup archivelog all

备份数据库和归档日志并删除已备份的归档日志
rman>backup database plus archivelog DELETE ALL INPUT
参数区别:
delete input 表示备份结束后删除归档日志
delete all input 表示备份结束后删除所有归档日志目录文件
 
rman>list backup of database;
rman>list copy of tablespace "TEST";
rman>list backup of databafile 15;

rman>delete backupset 1;
rman>delete backuppiece 'd:/dbbak/a_11.bak'
rman>delete backup
rman>delete copy
rman>delete archivelog all delete input
rman>delete backupset 22 format='d:/dbbak/u%.bak' delete input

rman>delete obsole;
rman>delete expired backup;
rman>delete expired copy;

当手工删除了归档日志以后,Rman备份会检测到日志缺失,从而无法进一步继续执行。
所以此时需要手工执行crosscheck过程,之后Rman备份可以恢复正常。
RMAN>crosscheck archivelog all;
再使用delete expired archivelog all 命令删除所有过期归档日志:
RMAN> delete expired archivelog all;
-----------------------------------------------------------
 
执行脚本几种方法
c:>rman target / @backup.rman
rman>@backup.rman
rman>run {execute script. backup_whole_db}
c:>rman cmdfile=backup_db.rman
 
设置为自动备份控制文件,在任何备份操作就会自动备份控制文件
rman>configure controlfile autobackup on
 
-----------------------------------------------------------
累积备份
rman>backup incremental level=0 database
rman>backup incremental level=1 tablespace "TEST"
rman>backup incremental level=2 cumulative database
rman>backup copies 3 database

rman>run{set backup copies 2; backup device type disk format 'd:/dbbak/%u','e:/bak/%u' tablespace "TEST","TT"}

rman>configure default device type to disk; --disk磁盘,sbt磁带

下述命令将disk设置上数据文件与归档文件的拷备数量设置为2,当再执行BACKUP DATABASE备份时,即会自动生成2份数据文件的备

份集。
rman>configure datafile backup copies for device type disk to 2;
rman>configure archivelog backup copies for device type disk to 2;

查看废弃状态的备份
rman>REPORT obsolete
rman>delete obsolete

obsolete与retention policy相关。
在操作系统层删除备份集后,用crosscheck 检测后就标志为X(expired),通常指丢失(被删除)的备份。delete expired删除的

是那些本来RMAN以为存在但是实际上在磁盘或者磁带上已经被删除了的信息,删除的只是RMAN资料库中的记录。

obsolete是指备份已经不会再被使用的,已经过期的。
比如你设置恢复窗口为7天,今天10号,那2号之前(包括2号)的都被认为是”过期的“。
delete obsolete则删除旧于备份保留策略定义的备份数据同时也更新RMAN资料库以及控制文件。
 

设置基于时间的备份保留策略,保留n天的备份
rman>configure retention policy to recovery window of n days; --n>0
不采用任何备份保留策略
rman>configure retention policy to none
打开备份优化设置
rman>configure backup optimization on;
恢复参数默认值
rman>configure 参数 clear
设置并行设备,2个通道
rman>configure device type disk parallelism 2
设置备份集的最大尺寸
rman>configure maxsetsize 2g
 
V$ARCHIVED_LOG:包含所有归档重做日志文件的创建情况,备份情况以及其他信息。
V$BACKUP_CORRUPTION:显示RMAN在哪些备份集中发现损坏的数据坏。在你使用BACKUP VALIDATE命令对备份集进行检查时如果发现损

坏的数据块,RMAN将在这个视图中写入记录。
V$COPY_CORRUPTIO:显示哪些镜像复制备份文件已经被损坏。
V$BACKUP_DATAFILE:通常用来获取每个数据文件中非空白数据块的数量,从而帮助你创建出大小基本相等的备份集。另外,在视图

中也包含数据文件中损坏的数据块的信息。
V$BACKUP_REDOLOG:显示在现有的备份集中饮食有哪些归档重做日志文件。
V$BACKUP_SET:显示已经创建的备份集的信息。
V$BACKUP_PIECE:显示已经创建的备份片段的信息。

-------------------
把如下内容保存成一个文件,如dbbak_test.rman
run {
 configure retention policy to recovery window of 7 days;
 configure controlfile autobackup on;
 configure controlfile autobackup format for device type disk to 'd:/backup/%f';
 allocate channel ch1 device type disk format 'd:/backup/%u';
 backup database skip inaccessible filesperset 10
   plus archivelog filesperset 20
   delete all input;
 release channel ch1;
 }
 allocate channel for maintenance device type disk;
 crosscheck backupset;
 delete noprompt obsolete;
然后执行
C:/>rman target / msglog d:/%date:~0,10%.lgo cmdfile=d:/dbbak_test.rman
-------------------
 

1、差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式
累积增量:是备份上级备份以来所有变化的块
因为累积增量是备份上级备份以来所有变化的数据块,所以累积增量需要更多的备份时间,同时需要较小的恢复时间;
而差异增量正好相反,它可以备份同级备份以来 变化的数据块。所以会减少备份时间,但需要更多的恢复时间.
在oracle 9中增量备份需要通过扫描整个数据库的数据块才能知道哪些数据块发生了变化,这是一个代价很大,时间很长的过程,
而且由于增量备份形成多个不同的备份集, 使恢复变得更加不可靠,所以增量备份在版本9中仍然不被推荐使用;
在10g中,增量备份作了很大的改进,不需要再扫描所有数据块就能得知哪些数据块发生变 化,从而大大提升备份效率。
但这些却以牺牲磁盘i/o为代价,所以在oltp事务系统中还得衡量是否愿意以i/o为代价来保证安全及高可用性。
10g还支 持增量合并,增量备份可支持7级增量。

2、备份策略及恢复

以rman多级增量备份来作为备份策略例子:
增量备份都需要一个0级备份来作为基础,0级备份与全备份的区别在于0级可以用来增量恢复,而全备份则不可以。

备份策略:
eg:我们对一星期的做如下的备份策略

    星期 差异增量 累积增量
    星期天 0级 0级
    星期一 2级 2级
    星期二 2级 2级
    星期三 1级 1级
    星期四 2级 2级
    星期五 2级 2级
    星期六 2级 2级
    星期天 0级 0级

    这样如果数据库在星期五down掉,那么差异增量只需要使用星期天的0级,星期三的一级,星期四、五的二级就可以恢复,累积

增量则需要星期天的0级,星期五的二级即可进行恢复。以上是一个星期的备份策略,如果做长期的备份策略则只需要把备份的时间延

长即可得到新的备份策略,具体需要看自己备份及恢复能够接受的程度而顶,见最后的备份策略典型案例。

备份命令如下:

零级备份
backup incremental level 0 database;
一级差异增量
backup incremental level 1 database;
一级累计增量
backup incremental level 1 cumulative database;

备份策略典型案例:

每半年做一个数据库的全备份(包括所有的数据和只读表空间)
每一个月做一次零级备份(不包含只读表空间)
每个星期做一次一级备份
每天做一次二级备份

任何数据库的更改需要重新同步CATALOG目录并重新备份(如添加数据文件)或重新备份(如修改表空间为只读)
建议备份一段时间归档日志和定期备份归档到到磁带上

全库备份脚本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup full tag 'dbfull' format '/u01/oradata/backup/full%u_%s_%p' database
include current controlfile;
sql 'alter system archive log current';
backup fileaperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
archivelog all delete input; #备份归档可选,可以单独定期备份
release channel c1;
release channel c2;
release channel c3;
}

零级备份脚本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 0 tag 'db0' format '/u01/oradata/backup/db0%u_%s_%p'
database skip readonly;
sql 'alter system archive log current';
backup fileaperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
archivelog all delete input; #备份归档可选,可以单独定期备份
release channel c1;
release channel c2;
release channel c3;
}


一级备份脚本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 1 tag 'db1' format '/u01/oradata/backup/db1%u_%s_%p'
database skip readonly;
sql 'alter system archive log current';
backup fileaperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
archivelog all delete input; #备份归档可选,可以单独定期备份
release channel c1;
release channel c2;
release channel c3;
}

二级备份脚本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 2 tag 'db2' format '/u01/oradata/backup/db2%u_%s_%p'
database skip readonly ;
sql 'alter system archive log current';
backup fileaperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
archivelog all delete input; #备份归档可选,可以单独定期备份
release channel c1;
release channel c2;
release channel c3;
}

如 果按照以上备份策略,则每天的所需要备份的数据量只有一天的改变量。
而做恢复时最多要恢复当月的一个零级备份+三个一级备份+6个二级备份+当天的归档文 件。
如果不能接受这样的恢复时间,可以减少零级备份之间的时间间隔。
在每次备份后,原则上在该备份点之前的归档日志就可以删除掉了,
但是为了进一步的安全 以及日后需要(如使用LOGMNR查找所需信息),
建议有条件的话,归档日志保存到能够接受的时间点,可以保存在磁带等廉价存取设备上。

(责任编辑:IT)
------分隔线----------------------------