首页 > 数据库 > Oracle > 笔记 备份恢复(4) rman恢复
1命令
recover datafile
recover database noredo
restore自动选择最近的备份来还原,可能选用备份集(优先),映像副本,或两者并用。与现在文件相同,则不会还原(检查数据文件头判断这文件是否最新),也可以force强制还原,没有或者不相同则会还原。
recover,实例恢复(instance recover)也叫崩溃恢复(crash recovery),应用重做日志(包括联机重做日志和归档重做日志),恢复到当前,或指定的恢复点。包括缓存恢复(cache recovery),对已提交但还未写入数据文件的数据写入数据文件,就是前滚,事务恢复(transaction recovery)对未提交但已写入数据文件的数据做撤销,回滚。
如果备份是一致性备份,并且备份后没有再产生日志文件(或者产生了日志文件,但你只希望恢复到备份时的状态就可以),那么恢复时可以不需要进行recover操作。
sql中的recover命令和rman中的recover命令不一样。
2.完全恢复
最坏的情况是所有数据库文件都丢失,这时要先从参数文件恢复开始。
没有参数文件sqlplus下不能启动,rman可以创建个db_name=dummy的临时数据库来启动
restore database check readonly;连只读表空间一起恢复
如果数据文件所在磁盘出现硬件故障。
run{
set newname for datafile 1 to ‘/home/system01.dbf’;为数据文件指定新位置
restore database/restore datafile 1;
switch datafile all/switch datafile 1;--改变控制文件中数据文件的指向
recover database/recver datafile 1;
sql’alter database open’;
}
RMAN> report schema;显示数据文件和表空间
#system表空间只能在mount下恢复
RMAN> run{
startup force mount;
sql ‘alter database datafile 4 offline’;
sql ‘alter database open’;
restore datafile 4;
recover datafile 4;
sql ‘alter database datafile 4 online’;
#archivelog下,新增的数据文件丢失,没有备份,只有全部的归档日志。恢复时新建个数据文件,再应用日志。rman下会自动新建数据文件。
只连目标数据库,不连恢复目录数据库。
恢复没有备份也能恢复数据文件,关键在于,有自创建之时起的所有日志。
run {
startup force mount;
sql ‘alter database datafile 7 offline’;
sql ‘alter database open’;
restore datafile 7;
recover datafile 7;
sql ‘alter database datafile 7 noline’;
#恢复表空间
表空间所有数据文件全部出现介质失败。
run{
sql ‘alter tablespace users offline for recover’;
restore tablespace users;
recover tablespace users;
sql ‘alter tablespace users online’;
}
#映像副本恢复
RMAN> restore (datafile 4) from datafilecopy;
#块恢复
模拟坏块,先关闭数据库
select遇到坏块时,会提示几号文件第几块出现故障
RMAN>blockrecover device type disk
datafile 5 block 21,48,128;
3.不完全恢复
10g之后resetlogs打开数据库之后可以确保归档日志不会被覆盖,从而可以使用早期数据库副本的备份。但还是建议删除早期的所有备份,并重新备份数据库。10g之前执行open resetlogs时不会对当前的online redologs文件归档,导致归档文件断裂,所以之前的备份不再有效,10之后不再有这个问题。
set nls_date_format=yyyy-mm-dd hh24:mi:ss
run{
startup force mount;
set until time=’2012-10-3 17:00:00’;
restore database;
recover database;
sql ‘alter database open resetlogs’;
}
run{
delete noprompt backup;
delete noprompt copy;
backup database format=;
sql ‘alter system archive log current’;
}
基于SCN
select current_scn from v$database;
用logminer确定误操作的SCN
run{
startup force mount;
set until scn=51143;
restore database;
recover database;
sql ‘alter database open resetlogs’;
}
基于日志序列号
假如日志序列号6丢失,在进行完全恢复时会出现下面的错误
no backup of log thread 1 seq 6 lowscn 32543 found to restore
这时可以用基于日志序列号的恢复,恢复到5.
run{
startup force mount;
set until sequence=6;
restore database;
recover database;
sql ‘alter database open resetlogs’;
}
基于备份控制文件
适用于表空间删除。
从alert日志中确定删除时间。
如果没有使用恢复目录,则必须激活控制文件自动备份
[oracle]$set nls_date_format=
RMAN>startup force nomount
RMAN>set dbid=45436546;
RMAN>restore controlfile from autobackup maxseq 6;
RMAN>alter database mount;
run{
set until time=;
restore database;
recover database;
slq ‘alter database open resetlogs’;
}
#表空间时间点恢复
RMAN维护命令
report schema
report need backup incremental 3;
哪些文件恢复时需要3个以上增量备份
report need backup days 3 tablespace users;users
表空间中3天未备份的数据文件
report need backup redundancy 2 database;
备份文件低于2份的所有数据文件。
report need backup recovery window 6 days;
时间窗口内需要备份的文件。
report obsolete redundancy 2;
超过2次的陈旧备份。
report unrecoverable;
数据库的一些变化没有记载到归档日志(如nologging),这些变化就不能恢复
3.5显示备份
v$loghist –归档历史信息
v$archive_processes—ARCn进程状态
v$backup_datafile,控制文件和数据文件的备份集信息
v$bakcup_piece备份片信息
select a.file#,b.handle,a.blocks*a.block_size byte from v$backup_datafile a,v$backup_piece b
where a.set_stamp=b.set_stamp and b.status='A';指定数据文件的备份片信息
list backup of tablespace users;关于表空间users的备份信息。
BS key惟一标识备份集编号。
Type完全还是增量备份
LV增量备份级别
Size占用的备份集空间
BP Key备份片的数字编号
Tag备份片标记
Ckp scn数据文件的检查点SCN值。
list backup of datafile 4;
list backup summary
list backup of controlfile;
list backup of archivelog all;
list backup of spfile;
list backupset 15;
list copy of datafile 5;--列出映象副本
list copy of tablespace users;
list copy of controlfile;
list copy of archivelog all;
S 状态
KEY
list incarnation of database;
list backup by file;列出所有备份集和备份片
list recoverable backup of database;列出适合恢复的备份,状态为AVAILABLE的,当前对应物的,可用于还原数据库的所有备份列表,包括了备份、映像副本和增量备份。也就是能全库还原的备份。
crosscheck;--检查物理信息和RMAN资料库信息是否一致。
有 avaliable,unavaliable,expired三种,expired时,说明被手工删除或损坏。应该用delete命令删除他在RMAN中的信息。
crosscheck backup;所有备份集
crosscheck backup of database;所有数据文件的备份集。
crosscheck backup of tablespace system;
crosscheck backup of datafile 4;
crosscheck backup of controlfile;
crosscheck backup of spfile;
crosscheck backup of archivelog sequence 3;序列号为3的归档日志备份集。
crosscheck archivelog until sequence 443;
crosscheck archivelog like ‘%arc001.log’;
crosscheck copy;所有映像副本。
crosscheck copy of datafile;所有数据文件的副本,试了不能这么执行。
crosscheck copy of datafile 6;
crosscheck copy of tablespace users;
crosscheck copy of controlfile;
crosscheck copy of archivelog sequence 4;
delete 会删除物理文件,将控制文件中相应记录状态改变为delete,从恢复目录中删除备份记录。
delete obsolete;删除多于冗余策略的所有备份,加 noprompt不提示
delete noprompt expired backup;删除状态为expired的备份集
delete noprompt expired copy;删除为expired的映像副本
delete noprompt backupset 19;
delete noprompt backuppiece ‘/backup/fds.bak’;
delete noprompt backup;删除所有备份集
delete noprompt datafilecopy ‘/backup/fds.bak’;删除特定映像副本。
delete noprompt copy;
对于过期的备份片可以直接删除,对于备份集,如果只是备份集中的一个备份片过期,这个备份集不算过期,不能删除。
SQL> system enable restricted session
RMAN>drop database including backups在限制模式下删除数据库和备份
backup archivelog all delete input;备份了归档日志后,其将删除
RMAN可以自动检查备份的状态,但不是很及时,但维护备份设备时可以手工调整备份的状态。
也适用于移动了备份集后对rman信息的修改
change backupset 22 unavailabel;
change backupset 22 availabel;
change backup of tablespace system unavailable;
change datafilecopy ‘/backup/sfd.bak’ unaailable;
list datafilecopy ‘/backup/yo.bak’;
change backupset 143 keep forever logs;--一直有效,前提是有恢复目录
change backupset 24 keep until time ‘sysdate+60’ logs;--保留60天
change backupset 24 nokeep;撤消上面的keep。
手工使用OS命令备份了数据文件、控制文件、归档日志和备份片,RMAN不会记载这此信息,用CATALOG命令将这些元数据追加到RMAN资料库。
catalog datafilecopy ‘/backup/user01.bak’;当执行了用户管理的备份之后,将备份信息注册到RMAN资料库。
catalog controlfilecopy ‘/c100.ctl’
catalog archivelog ‘/oracle/aa.arc’ —list copy
catalog backuppiece ‘/backup/yo.dbf’;当使用了CP命令复制备份片后
catalog start with ‘/backup’;/backup目录下所有文件。
catalog recovery area;对FRA注册,10gR2以后会自动做了
change datafilecopy ‘/backup/ks.bak’ uncatalog;去除注册后,将控制文件中的状态标记为deleted,删除恢复目录的相应记录。(物理文件呢)
change controlfilecopy ‘/backup/ks.bak’ uncatalog;
change backuppiece ‘/backup/ks.bak’ uncatalog;
RMAN复制以oracle块为单位,检验块完整时重新计算奇偶校验,与原值比较,如果一样说明块完整。
configure retention policy to recover window of 6 days;要oracle保证能恢复到6天以前的状态。
validate backupset 9;查检指定的备份集
恢复目录
元数据可以存放在控制文件,达到control_file_record_keep_time值之后,会被覆盖,恢复目录可以永久保留。另外恢复目录还可以存放存储脚本。
在有恢复目录的情况下,控制文件不是一点数据也不保存,会保存一些。
即使建立了恢复目录并注册上去,如果连接rman时没有连接恢复目录,元数据还是保存在控制文件中。
#一些概念
恢复目录数据库。是专门用于存放恢复目录方案的Oracle数据库。务必将恢复目录存放到独立的恢复目录数据库,而不应该存放到目标数据库中。可以存放多个目标数据库的元数据。恢复目录最好不要放在目标数据库里,会有很大局限,比如控制文件全部丢失时,数据库不能mount,不能mount就不能连到恢复目录,不能连到恢复目录会提示不能找到备份的控制文件,虽然是已经备份了控制文件的。
恢复目录数据库,最好也要备份下,因为很小,exp备份就可以。
恢复目录所有者。是恢复目录数据库的数据库用户,有RECOVERY_CATALOG_OWNER角色,但不能是SYS用户。
恢复目录方案。类似普通“方案”,他由恢复目录所有者建立,create catalog
恢复目录有哪些内容。
数据文件、控制文件、归档日志和SPFILE的,备份集和备份片信息。
数据文件、控制文件、归档日志映像副本的信息。
目标数据库的物理结构信息。
数据库副本的信息(?)。
RMAN配置信息。
存储脚本的信息。
#建立恢复目录
恢复目录建立在恢复目录数据库中,然后将目标数据库注册进来。
用DBCA建个数据库
都在恢复目录数据库做以下操作
#使用存储脚本
create script bak_database{
backup format='/home/oracle/backup/%d_%s.dbf'
database include current controlfile
plus archivelog;
sql 'alter system archive log current';
}
script bak_database
print script bak_database;--显示
replace script bak_database{--替换
backup database format=’’;
}
delete script bak_database;--删除
list script names;--列出所有
#维护恢复目录
注销目标数据库后,早于controlfile_record_keep_time的RMAN资料库记录会丢失。
比如如果恢复数据库RMAN版本比目标数据库RMAN版本旧,则要升级恢复目录。
删除恢复目录,执行两次
drop catalog;
如果一会有恢复目录,一会儿不用,再用他时需要同步恢复目录
resync catalog
执行了不完全恢复之后,需要用alter database open resetlogs打开数据库,如果没有恢复目录数据库,会删除之前重做日志,有恢复目录后会保留之前的副本,建立新的副本。可以将数据库恢复到早期副本的状态。
list incarnation of database;--列出所有副本
starup force mount;
reset database to incarnation 2;
run{
startup force nomount;
set until scn=65432;
restore controlfile;
}
然后恢复数据库到早期版本
run{
alter database mount;
restore database;
recover database;
alter database open resetlogs;
}
#查询恢复目录
rc_database—显示在恢复目录中已注册的所有目标数据库信息
rc_tablespace
rc_datafile
rc_stored_script—恢复目录中所有存储脚本。
rc_stored_script_line—恢复目录中所有存储脚本的内容。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10425659/viewspace-1115483/ ,如需转载,请注明出处,否则将追究法律责任。