wordpress models,广告优化,济南网站制作报价,招聘h5是什么意思为什么80%的码农都做不了架构师#xff1f; -- -- RMAN 还原与恢复 -- 在Oracle中#xff0c;三大文件即控制文件#xff0c;数据文件#xff0c;日志文件的丢失与破坏都将需要使用还原或恢复来使数据库正常化。而RMAN还原与恢复 是实现数据库完整性、可靠性… 为什么80%的码农都做不了架构师 -- -- RMAN 还原与恢复 -- 在Oracle中三大文件即控制文件数据文件日志文件的丢失与破坏都将需要使用还原或恢复来使数据库正常化。而RMAN还原与恢复 是实现数据库完整性、可靠性必不可少的手段之一。还原简言之即是将所需的文件从备份中复制到原来文件所在的路径。还原通常可以包括 数据库、表空间、数据文件级别的还原。通常还原后的内容会滞后于最新的数据库SCN因此将归档日志、联机重做日志文件中的内容更新到 还原的数据文件中这个过程称之为恢复。 恢复的几种情形 1.在mount 或open 阶段完成的灾难恢复 非系统表空间undo表空间所有的数据文件 2.在nomount 阶段完成的灾难恢复 控制文件(controlfile) 3.在mount 阶段完成的灾难恢复 系统表空间联机重做日志文件 有关恢复、介质恢复、一致性或非一致性恢复的详细概念请参考Oracle 基于用户管理恢复的处理 一、RMAN在归档模式下的还原与恢复的简化例子 RMAN connect target / RMAN startup mount; RMAN restore database; RMAN recover database; RMAN alter database open; 二、使用RMAN进行还原与恢复(非catalog方式) 1.数据文件丢失的恢复处理 --设定客户端环境变量并连接到数据库 C:/set NLS_LANGAMERICAN_AMERICA.AL32UTF8 C:/rman target sys/redhatdedicated nocatalog --对数据库做全备 RMAN backup as backupset 2 format /u01/bk/rmbk/wb_%U 3 tagWhole_bak database; RMAN sql alter system archive log current; --对数据库做级增量备份 RMAN run{ 2 allocate channel ch1 type disk; 3 backup incremental level 0 database 4 format /u01/bk/rmbk/Inc_0_%U 5 tagInc_0; 6 release channel ch1;} --对表插入新记录并切换日志 SQL select * from tb2; ID NAME ---------- --------------------------------------------- 1 Robinson 2 Henry SQL insert into tb2 select 3,Danny from dual; SQL commit; SQL alter system checkpoint; SQL alter system switch logfile; --对数据库做级增量备份 RMAN run{ 2 allocate channel ch1 type disk; 3 backup incremental level 1 database 4 format /u01/bk/rmbk/Inc_1%U 5 tagInc_1; 6 release channel ch1;} SQL shutdown immediate; --关闭数据库 SQL ho rm $ORACLE_BASE/oradata/orcl/*.dbf --删除所有的数据文件 */ SQL startup mount --使用RMAN连接到未mount状态的数据库 RMAN connect target sys/redhatdedicated connected to target database: ORCL (DBID1257415066, not open) --执行数据库还原 --注意当存在完整备份也同时存在级增量备份时Oracle会自动使用级增量备份来还原数据库 RMAN restore database; piece handle/u01/bk/rmbk/Inc_0_0alqu132_1_1 tagINC_0 --下面可以看出还原的数据来自级增量备份 --执行数据库恢复 RMAN recover database; piece handle/u01/bk/rmbk/Inc_10clqu1fe_1_1 tagINC_1 --打开数据库验证恢复 RMAN alter database open; SQL select * from bk.tb2; ID NAME ---------- --------------------------------------------- 1 Robinson 2 Henry 3 Danny 2.磁盘损坏导致数据文件无法恢复到原始位置或不想恢复到原始位置的处理 使用set newname 命令将数据文件还原到新路径 set newname for datafile 1 to newdir/system01.dbf; --为恢复的数据文件指定新路径或重命名 使用switch命令将变更更新到控制文件 switch datafile n | all ; --等同于alter database rename file命令该命令将恢复的数据文件重命名更新到控制文件 --下面的示例首先删除tbs01.dbf接下来将其恢复到oradata目录中 SQL ho rm $ORACLE_BASE/oradata/orcl/tbs01.dbf SQL startup mount force; RMAN connect target sys/redhatdedicated connected to target database: ORCL (DBID1257415066, not open) RMAN run{ 2 set newname for datafile 6 to /u01/app/oracle/oradata/tbs01.dbf; 3 restore database; 4 switch datafile all; 5 recover database; 6 alter database open;} SQL select file#,name,status from v$datafile where file#6; FILE# NAME STATUS ---------- -------------------------------------------------- ------- 6 /u01/app/oracle/oradata/tbs01.dbf ONLINE SQL select count(1) from bk.tb2; --表tb2位于tbs01.dbf内 COUNT(1) ---------- 3 3.恢复表空间 --删除表空间内的数据文件删除后在针对位于该表空间的表进行插入记录以及实施检查点进程 SQL ho rm $ORACLE_BASE/oradata/tbs01.dbf SQL insert into bk.tb2 select 4,Jackson from dual; SQL commit; SQL alter system checkpoint; --强制检查点后告警日志出现错误提示视图v$recover_file给出了故障数据文件 [oracleoradb ~]$ tail -n 50 $ORACLE_BASE/admin/orcl/bdump/alert_orcl.log Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_ckpt_4724.trc: ORA-01110: data file 6: /u01/app/oracle/oradata/tbs01.dbf ORA-01116: error in opening database file 6 ORA-01110: data file 6: /u01/app/oracle/oradata/tbs01.dbf ORA-27041: unable to open file Linux Error: 2: No such file or directory SQL select * from v$recover_file; FILE# ONLINE ONLINE_ ERROR CHANGE# TIME ---------- ------- ------- ------------------ ---------- --------- 6 OFFLINE OFFLINE FILE NOT FOUND SQL select name,status from v$datafile where file#6; NAME STATUS -------------------------------------------------- ------- /u01/app/oracle/oradata/tbs01.dbf RECOVER --使用RMAN命令恢复数据文件此时数据库处于OPEN状态因此首先需要将表空间脱机恢复完成之后再将其联机 RMAN run{ 2 sql alter tablespace tbs1 offline immediate; 3 set newname for datafile 6 to /u01/app/oracle/oradata/orcl/tbs01.dbf; 4 restore tablespace tbs1; 5 switch datafile all; 6 recover tablespace tbs1; 7 sql alter tablespace tbs1 online;} SQL select name,status from v$datafile where file#6; --位置变动到orcl子目录下状态变为online NAME STATUS -------------------------------------------------- ------- /u01/app/oracle/oradata/orcl/tbs01.dbf ONLINE --也可以使用下面的命令完成同样的功能 --注意如果表空间内有多个数据文件而仅有单个数据文件损坏则采用下面的方式处理更为妥当 RMAN run{ 2 sql alter database datafile 6 offline immediate; 3 set newname for datafile 6 to /u01/app/oracle/oradata/tbs01.dbf; 4 restore datafile 6; 5 switch datafile all; 6 recover datafile 6; 7 sql alter databaes datafile 6 online;} 4.RMAN实现不完全恢复 对于RMAN的不完全恢复使用Oracle的闪回特性的处理有更多的优势。关于闪回请参考Oracle 闪回特性 步骤 a.加载数据到mount状态(建议恢复前先做备份) b.为高并发分配多个通道 c.还原所有(所需)的数据文件 d.使用until time,until sequence,until scn来恢复数据库 e.使用resetlogs打开数据库 f.全备数据库 演示RMAN基于until time的例子 SQL show user; USER is BK SQL create table tb1(id int,name varchar2(10)); SQL insert into tb1 select 1,Lancy from dual; SQL ho strings $ORACLE_BASE/oradata/orcl/redo02.log | grep Lancy --查看联机日志文件中不存在刚刚插入的记录 SQL commit; --注意commit是将日志缓冲内容写入到日志文件 SQL ho strings $ORACLE_BASE/oradata/orcl/redo02.log | grep Lancy --提交后联机日志文件中才有新增的记录 Lancy SQL alter system switch logfile; SQL ho ls $ORACLE_BASE/oradata/arch log_1_1_732989230.arc log_1_1_732989889.arc RMAN run{ 2 allocate channel ch1 type disk; 3 allocate channel ch2 type disk; 4 backup as compressed backupset database plus archivelog delete input 5 format /u01/bk/rmbk/wh_lg_%U 6 tagWholebak_Pluslog; 7 release channel ch1; 8 release channel ch2;} 18:10:36 SQL drop table tb1; RMAN run{ 2 allocate channel ch1 type disk; 3 allocate channel ch2 type disk; 4 set until time to_date(2010-10-21 18:10:36,yyyy-mm-dd hh24:mi:ss); 5 restore database; 6 recover database; 7 alter database open resetlogs; 8 release channel ch1; 9 release channel ch2;} SQL select * from tb1; ID NAME ---------- ---------- 1 Lancy 5. SPFILE文件丢失的恢复 SPFILE参数文件可以在RMAN中进行备份因此可以使用RMAN来恢复SPFILE文件。可以自动备份SPFILE。 SPFILE的自动备份是随着控制文件的备份一起被完成的因此可以通过自动备份控制文件来实现自动备份SPFILE文件的目的 其次在备份系统表空间时将引发控制文件的自动备份而不论是否设置自动备份参数为ON此时同样也备份SPFILE文件 有关SPFILE文件请参考Oracle 参数文件 SPFILE 错误导致数据库无法启动(ORA-01565) SPFILE文件恢复步骤 a. startup nomount [force]; b. set dbiddbid_no; c. restore spfile from autobackup | dir d. startup force; 如果d执行失败则转到ef否则不用执行ef。 e. set dbiddbid_no; f. startup; 下面设定控制文件的自动备份以及设置其备份路径(注意要预先知道目标数据库的DBID此次演示的DBID为) RMAN configure controlfile autobackup on; RMAN configure controlfile autobackup format for device type disk to /u01/bk/rmbk/auto_ctl_%d_%F; RMAN exit sysORCL alter tablespace users add datafile $ORACLE_BASE/oradata/orcl/users02.dbf size 5m; [oracleoradb rmbk]$ ls auto* --执行上一条alter tablespace users add datafile 语句将引发控制文件的自动备份 auto_ctl_ORCL_c-1263182651-20101124-00 sysORCL shutdown immediate; [oracleoradb dbs]$ mv spfileorcl.ora spfileorcl.ora.bak --将原来的spfile文件重命名 [oracleoradb ~]$ rman target / nocatalog RMAN startup nomount force; RMAN set dbid1263182651; RMAN restore spfile from autobackup; --此处并没有找到文件路径按Oracle联机文档在nomount状态应该可以找到 RMAN-06172: no autobackup found or specified handle is not a valid copy or piece RMAN restore spfile from /u01/bk/rmbk/auto_ctl_ORCL_c-1263182651-20101124-00; --手动指定路径 RMAN startup force; 6.联机重做日志文件丢失的恢复请参考 基于catalog 的RMAN 备份与恢复 Oracle 联机重做日志文件(ONLINE LOG FILE) 7.控制文件的恢复处理 控制文件中描述了数据库的相关物理信息如创建时间、DBID、数据文件、日志文件等相关信息因此一旦控制文件丢失数据库将 不能启动鉴于其重要性控制文件的备份与恢复将单独列出。有关控制文件请参考下列 基于catalog 的RMAN 备份与恢复 Oracle 控制文件的备份与恢复 三、更多参考 有关基于用户管理的备份和备份恢复的概念请参考 Oracle 冷备份 Oracle 热备份 Oracle 备份恢复概念 Oracle 实例恢复 Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理) 有关RMAN的恢复与管理请参考 RMAN 概述及其体系结构 RMAN 配置、监控与管理 RMAN 备份详解 RMAN 还原与恢复 有关Oracle体系结构请参考 Oracle实例和Oracle数据库(Oracle体系结构) Oracle 表空间与数据文件 Oracle 密码文件 Oracle 参数文件 Oracle 数据库实例启动关闭过程 Oracle 联机重做日志文件(ONLINE LOG FILE) Oracle 控制文件(CONTROLFILE) Oracle 归档日志 原文链接 http://blog.csdn.net/robinson_0612/article/details/6041247 转载于:https://my.oschina.net/dtec/blog/47387