www.Orasql.Com
 
用户名: 密码:  验证码: 注册|找回密码 oracleawen's blog  
 
         当前位置 >> 技术论坛  发表帖子     论坛版块     查找帖子
lession16 OCP 笔记-技术论坛||Oracle高手之路—Orasql.Com!
            lession16 OCP 笔记
 
发贴人:oracle_awen
oracleawen@gmail.com448315233127.0.0.1
用户级别:管理员
发贴总数:1245
注册时间:2011-05-05 09:23:03
2011-06-26 22:03:09
------------------------lession 16-------------------------- 复习:备份 1 整库的备份 backup database ; backup database format '/u01/backup/bak_%U' 查看创建的全库备份 list backup of database ; 2 表空间的备份 backup tablespace users; list backup of tablespace users; 删除备份: delete backupset 10; delete backupset 10 noprompt 3 数据文件备份 可以对名称也可以对file_id select file_id,file_name from dba_data_files; backup datafile 4; 查看数据文件的备份 list backup of datafile n 如果要查看多个文件 n=多个序号,并用逗号隔开 4 控制文件备份 a.手动执行控制文件备份 backup current controlfile ; b.执行backup命令时指定include current controlfile backup database include current controlfile ; c.备份系统表空间会触发去备份控制文件 backup datafile 1; d.通过configure 命令将controlfileautobackup 设置为on configure controlfile autobackup on ; 查看list backup of controlfile ; 5 归档文件备份 归档日志文件对数据库恢复相当关键。 a.利用backup archivelog 命令 backup archivelog all; all 指备份当前所有可访问到的归档日志文件。 until ,scn ,time ,sequence b.执行backup命令时,指定plus archivelog 子句 backup current controlfile plus archivelog ; 在备份控制文件之前,先对所有归档文件进行备份 backup ... plus archivelog 命令执行的操作 a. 运行alter system archivelog current 对当前redolog进行归档 b. 执行backup archivlelog all命令备份所有已经归档日志 c. 执行backup 命令指定项进行备份 d 在次运行alter system archivelog current 对当前redoglog归档 e 对新生成的尚未备份的归档进行备份 查看已经备份的归档日志片段 list backup of archivelog all; 6 初始化参数文件备份 RMAN自动备份服务器的初始化参数文件,并置于控制文件的备份片段中。极少需要对spifle备份 backup spfile ; 7备份备份集 最佳应用备份集的需求是创建备份集到磁带。 backup backupset all; 备份指定的备份集 backup backupset n;( n=备份集ID,可以指定多个) RMAN命令: 1 显示RMAN默认配置:show show all; #default 表示初始化默认值 2 列出备份信息--list命令 查看备份集、备份镜像、归档文件等 a.列出所有备份信息 list backup ; b. 列出所有备份控制文件信息 list backup of controlfile ; c.列出指定数据文件的备份 list backup of datafile 4; d.列出所有备份归档文件信息 list backup of archivelog all; e.列出表空间备份信息 list copy of tablespace 'users' f.列出当前的所有归档 list archivelog all g.列出所有无效备份 list expired backup; 删除备份---delete 命令 a.删除过期备份,RMAN根据备份冗余策略确定备份是否过期 delete obsolete ; b.删除无效备份:首先执行crosscheck 命令核对备份集,如果发现备份无效,RMAN会对该备份集标记为expired 删除 delete expired backup ; c.删除expired 副本 delete expired copy; d.删除指定的备份集 delete backupset 1; f.删除指定备份片 delete backuppiece '/u01/aa.bak' g.删除特定映像副本 delete datafile copy '/u01/a.bak' f.删除所有映像副本 delete copy; g.在备份后删除输入对象 backup archivelog all delete input; backup backupset 11 format '/u01/%u.bak' delete input; 4 报表显示---report 命令 a.查看7天前的数据库模式 report schema at time 'sysdate-7'; b.查看所有需要备份的文件 report need backup ; c.查看指定表空间是否需要备份 report need bakcup tablespace system d.查看过期备份 report obsolete ; 5 执行检查---crosscheck 命令 用来检查备份或归档的物理文件的状态,如果物理文件存在,并且控制文件或恢复目录中匹配则标记为available 如果文件已经不存在则标记为expired 无效。 要手工删除expired记录 检查所有归档文件 crosscheck archivelog all; 检查所有的备份集 crosscheck backup; 6 修改状态 ---change命令 修改备份文件或归档文件的状态,在控制文件或恢复目录中,记录状态为:available 可用 和 unavailable 不可用。 修改指定备份集为unavailable change backupset n unavailable; 修改表空间的备份集为unavailable; change backup of tablespace users unavailable; 修改指定归档文件状态为unavailable change archivelog logseq=n unavailable ; n为归档文件序号,可用通过list archivielog all 或者查询v$archived_log获得 change 命令附带delete 子句 change archivelog logseq=n delete 修改记录状态同时,直接删除物理文件。 综述: list ; 提示命令 list backup of ; 随便输入个字符都会有提示信息 ------------------------lession16---------------- 了解启动过程 shutdown --->nomount(又称为started) 读参数文件,不做任何检查任何文件 nomount---->mount 读控制文件: 检查所有控制文件是否存在并同步,有一个控制损坏,就启动不到mount状态 nomount --->open 根据控制文件去检查所有日志,要求至少有一个日志成员,任何缺失的都会记录在预警日志中 验证控制文件知道的所有的数据文件是否存在,不验证脱机文件。 当发现遗失,错误消息只提示第一个文件,可以通过 select name ,error from v$datafile join v$recover_file using(file#); startup noumont alter databse mount alter database open 思路: 控制文件有备份 场景:操作数据,删除控制文件 数据库crash ,需要修复数据库 如果要维持数据库为运行状态,必须要求: 1 所有控制文件必须好的 2 system 和undo的数据文件必须好的 (除了system 和udno的数据文件之外的数据文件损坏时不影响数据库的运行的) 3 只要日志组有一个日志成员正常 在打开状态下,丢失控制文件,丢失整个重做日志组或丢失属于system或undo表空间的数据文件的介质故障会导致实例失败 如果丢失了控制文件 恢复过程: 1 关闭实例 2 复制备份的控制文件到损坏控制文件目录并取名为损坏数据文件名 3 启动 问题:如果是介质损坏呢?存储原来控制文件的磁盘坏了? 解决:修改初始化参数文件 保证至少有2个控制文件 练习;假设control03.ctl所在分区丢失了?直接删除该控制文件?然后在新的地方重做复用? /u01/app/oracle/oradate/orcl/control03.ctl /u01/control04.ctl 步骤: shutdown immediate 模拟的场景是control03.ctl 已经没了(删除) 复制一个控制文件到/u01/contro04.ctl startup nomount alter system set control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl','/u01/control04.ctl' scope=spfile shutdown immediate startup 从备份中恢复控制文件 丢失控制文件的恢复 1 模拟文件丢失 插入数据 insert into test values(1); commit; shutdown immediate ; 删除所有控制文件 rm *.ctl startup nomount; 2 恢复控制文件 rman target / set dbid= 控制文件丢失,RMAN信息也就丢失 show all 看到所有参数都是默认值 找一个最新的控制文件的备份 restore controlfile from '/u01/c-....'; 设置数据库为mount状态 alter database mount; recover database ; alter database open resetlogs; 数据库操作的数据还是在的: 日志没有丢失 ---- 联机日志文件损坏 只要日志组中还有一个是好的就不会影响实例运行 在警告日志文件中可以查看那个日志损坏 修复:复制一个(保证路径和名字一摸一样) 如果某一个损坏了,先删除,在加入一个 1.检查预警日志,确定是否有缺失的日志文件。 2.通过以下方式恢复缺失的文件,先删除丢失的重做日志成员 SQL> ALTER DATABASE DROP LOGFILE MEMBER 'redo01a.log' 然后添加新的成员以替换丢失的重做日志成员: SQL> ALTER DATABASE ADD LOGFILE MEMBER 'redo01a.log' TO GROUP 2; 丢失非当前的联机重做日志文件 shutdown immediate ; rm redo01.log startup 通过v$log查看联机重做日志文件的状态 unused :没有用过,一般刚建立或者open resetlogs打开后 current :当前 active: 活动,虽然不是当前状态,但是可能被使用或要被使用 clearing :日志正在清空 clearing_current:日志正在清空,但是由于清空出错 inactive: 不活动状态 修复丢失的联机重做日志文件 alter database clear logfile group 1; alter database open; 丢失当前的联机重做日志文件(肯定有数据丢失) 1 模拟文件丢失 查出当前的联机重做日志文件 shutdown abort startup mount host rm /u01/redo03.log 尝试启动数据库 alter database open; 2 执行不完全恢复 如果归档模式有备份,通过备份恢复 如果没有备份,只能强制恢复 alter system set "_allow_resetlogs_corruption"=true scope=spfile 该隐藏参数的作用是在open是会跳过一些一致性的检查 关闭并重启动数据库到mount状态 sql>shutdown immediate sql>recover database unitl cancel; cancel sql> alter databae open resetlogs; 思路: 1 日志文件组有冗余,单个日志文件损坏 直接从好的日志文件copy 如果磁盘损坏 删除 在添加 2 如果是整个日志组损坏 损坏的的inactive日志组 alter databae clear log file group n 如果损坏的是current日志组 shutdown abort 设置一个参数:不检查一致性 alter system set "_allow_resetlogs_corruption"=true scope=spfile startup mount recover databae until cancel cancel alter databae open resetlogs; 3善后处理 这种恢复,会导致数据库中数据的不一致性。 在警告日志中查看会有很多ora-00600的错误 建议:通过export逻辑导出范式执行一次full export 然后重建数据库,在导入之前的二进制文件。 如果整个日志组损坏? 如果日志组做了归档或者数据库处于noarchive模式 首先清除日志组的信息 删除日志组 添加日志组 如果处于归档模式,但没有归档,日志组损坏 ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1; 最后做一次完全备份。 ---数据文件的恢复 如果数据库处于非归档模式,数据文件丢失 恢复过程 1 关闭实例 2 做完全恢复,恢复所有的数据文件所有的控制文件 3 恢复只能恢复到最后一次完全备份状态,完全备份后的修改用户必须重做 不完全恢复。 --数据库处于归档模式,恢复非system 和undo数据文件 先要知道数据库为归档,并做了备份 1 select * from hr.employees ; 成功 2 删除一个数据文件example01.dbf rm -rf example01.dbf shutdown immieate 提示文件丢失 startup mount alter database datafiel 5 offline ; alter database open; 使用EM来恢复非关键的数据文件损失 维护--执行恢复---选择数据文件--执行执行对象级别恢复 run { restore datafile 5; recover datafile 5; sql 'alter database datafile 5 online'; } 可以通过v$recover_file; 查询哪些数据文件需要恢复 select file#,name ,error from v$recover_file join v$datafile using (file#) --数据库处于归档模式,恢复system 和undo数据文件 先要强行关闭实例 shutdown abort 挂载数据库 start mount 执行restore /recove 恢复数据文件 RMAN> run { restore datafile 1; recover datafile 1; } 打开数据库 alter database open; 思路: 要求:都是归档,有备份 不是属于system或者 undo表空间的数据文件损坏,不会影响数据库的运行,只有损坏数据文件的数据是不能访问的 首先:把数据库文件离线 alter database datafile n offline ; 其次: restore datafile n; recover datafile n 最后 alter database datafiel n online; 如果损坏的是属于system或者undo表空间? 数据库就处于crash状态,立即需要修复 restore datafile n; recover datafile n alter database open;

      
 
  
 Orasql.Com|E-Mail:oracleawen@gmail.com|Phone:15271942915|Copyright © 2011|All Rights Reserved|