ITPub博客

首页 > 数据库 > Oracle > 笔记 备份恢复(4) rman恢复

笔记 备份恢复(4) rman恢复

Oracle 作者:zhongguoren666 时间:2012-12-03 09:25:54 0 删除 编辑

1命令

    转储命令

       resotre database         只能mount

       restore tablespace          只能open

        restore datafile        

       restore controlfile         只能nomount

       restore archivelog

       restore spfile              只能nomount

    恢复命令

       recover database         只能mount

       recover tablespace          只能open

recover datafile                        只能open

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下恢复

       其他表空间可以在open状态下恢复,为了尽快打开数据库,先将问表空间离线,恢复了再上线。

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.不完全恢复

       不完全恢复只能对整个数据库,不能只对某个表空间。针对某个表空间可以使用于“表空间时间点恢复”TSPITR或表空间闪回。

       不完全恢复后用resetlogs打开,resetlogs做以下动作

              归档当前在线重做日志文件,然后清空内容并将日志文件序号重置为1.

              重置控制文件中关于在线日志文件的元数据。

              更新数据文件和在线重做日志文件中的resetlogs scn和重置时间信息。

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’;

}

 

 

#表空间时间点恢复

              recover tablespace users

              until time “to_date(‘2012/11/15 12:02:21’,’yyyy/mm/dd hh24:mi:ss’)”

              auxiliary destination ‘/home/oracle/auxdest’;

 

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显示备份

       SQL>archive log list                --概览

                        v$database

                     v$archived_log          --归档历史信息

                     v$archive_dest           --归档位置

v$loghist 归档历史信息

v$archive_processesARCn进程状态

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';指定数据文件的备份片信息

                     v$bakcup_redolog,归档日志备份集信息。

                     v$backup_set

                     v$bakcup_corruptionbackup命令时所检测到的错块

                     v$copy_corruptioncopy时所检测到的错块

 

 

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天以前的状态。

 

                     restore database preview,查看会用哪些备份集,而不会真的还原。

                     restore database validate;查检备份集是否完全,不会真的还原。

 restore database check logical validate;还原,并查检逻辑讹误,发现讹误并没超过最大值,则记录在v$database_block_corruption中,默认最大为0,通过set maxcorrupt for datafile 1,2,3,4 to 5设置

validate backupset 9;查检指定的备份集

 

 

 

 

恢复目录

元数据可以存放在控制文件,达到control_file_record_keep_time值之后,会被覆盖,恢复目录可以永久保留。另外恢复目录还可以存放存储脚本。

在有恢复目录的情况下,控制文件不是一点数据也不保存,会保存一些。

即使建立了恢复目录并注册上去,如果连接rman时没有连接恢复目录,元数据还是保存在控制文件中。

 

      

      

#一些概念

恢复目录数据库。是专门用于存放恢复目录方案的Oracle数据库。务必将恢复目录存放到独立的恢复目录数据库,而不应该存放到目标数据库中。可以存放多个目标数据库的元数据。恢复目录最好不要放在目标数据库里,会有很大局限,比如控制文件全部丢失时,数据库不能mount,不能mount就不能连到恢复目录,不能连到恢复目录会提示不能找到备份的控制文件,虽然是已经备份了控制文件的。

恢复目录数据库,最好也要备份下,因为很小,exp备份就可以。

恢复目录所有者。是恢复目录数据库的数据库用户,有RECOVERY_CATALOG_OWNER角色,但不能是SYS用户。

恢复目录方案。类似普通“方案”,他由恢复目录所有者建立,create catalog

恢复目录有哪些内容。

数据文件、控制文件、归档日志和SPFILE的,备份集和备份片信息。

数据文件、控制文件、归档日志映像副本的信息。

目标数据库的物理结构信息。

数据库副本的信息()。

RMAN配置信息。

存储脚本的信息。

 

 

#建立恢复目录

恢复目录建立在恢复目录数据库中,然后将目标数据库注册进来。

 

DBCA建个数据库

都在恢复目录数据库做以下操作

              create tablespace rman01 datafile ‘/home/rman01.dbf’ size 15M;

              create user rman identified by rman default tablespace rman;

              grant connect,resource,recovery_catalog_owner to rman;

              rman target sys/adminadmin@ly catalog rman/adminadmin@find

              同时连接到恢复目录服务器和目标数据库

              create catalog;

              register database;

              report schema;--如有内容,则至此成功

              unregister database ly;取消注册

 

             

 

#使用存储脚本

       要求同时连接到目标和恢复目录数据库

create script bak_database{

backup format='/home/oracle/backup/%d_%s.dbf'

database include current controlfile

plus archivelog;

sql 'alter system archive log current';

}

 

       run {execute script bak_database;}或者

       rman catalog rman/adminadmin@cat target sys/adminadmin@ly

script bak_database

 

print script bak_database;--显示

replace script bak_database{--替换

backup database format=’’;

}

delete script bak_database;--删除

list script names;--列出所有

 

#维护恢复目录

              使用恢复目录和目标数据库控制文件保持同步。同步进,RMAN会建立快照控制文件,比较恢复目录和快照控制文件,然后使用快照控制文件信息更新恢复目录,也就是说不是用控制文件真身来比较。执行有些RMAN命令时,如BACKUPDELETE时,会自动重新同步恢复目录。

              resync catalog;

注销目标数据库后,早于controlfile_record_keep_timeRMAN资料库记录会丢失。

              unregister database;

比如如果恢复数据库RMAN版本比目标数据库RMAN版本旧,则要升级恢复目录。

       upgrade catalog

删除恢复目录,执行两次

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博客 ” ,链接:http://blog.itpub.net/10425659/viewspace-1115483/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论