www.Orasql.Com
 
用户名: 密码:  验证码: 注册|找回密码 oracleawen's blog  
 
         当前位置 >> 技术论坛  发表帖子     论坛版块     查找帖子
Oracle备份与恢复详细实例教程-技术论坛||Oracle高手之路—Orasql.Com!
            Oracle备份与恢复详细实例教程
 
发贴人:oracle_awen
oracleawen@gmail.com448315233127.0.0.1
用户级别:管理员
发贴总数:1245
注册时间:2011-05-05 09:23:03
2011-06-26 22:11:20
恢复类型 1 实例恢复(instance recovery) oracle自动完成,通过读取当前的数据文件和联机重做日志文件来恢复数据库,使数据文件和控制文件恢复到崩溃前的一致状态。 实例恢复分两个过程: a. 缓存恢复(Cache Recovery) 通过online redolog中的重做日志,重现实例崩溃前对数据库的修改操作。对已经提交单尚未写入数据文件的部分数据全部写入数据文件。叫做rolling forward 前滚 b. 事务恢复(transaction recovery) 部分未提交的事务操作的数据被写入数据文件的需要撤销(rolling back 回滚) 2 介质恢复Media Recovery 需要备份进行恢复 就是当前数据库状态已非正常状态,需要DBA通过各种方式将数据库恢复到某种特定的状态。 首先恢复到备份的状态,然后通过应用重做日志恢复到最近的时间点或者指定的时间点 恢复方式 1 完全恢复 complete recovery 完全恢复的实质是应用了所有的重做日志。可以对数据库,表空间、数据文件作完全恢复。 对整个数据库做恢复,步骤: mount 数据库 确认所有数据文件处于online状态 执行恢复操作 应用所有生成的redologs(包括联机和归档日志文件) 如果对表空间或数据库文件级的恢复 open 库 将要恢复的表空间或数据文件置于offline. 执行恢复操作 应用所有生成的redologs文件(包括联机和归档日志文件) 2 不完全恢复incomplete recovery 只应用部分归档或联机重做日志 不完全恢复应用情况: a.介质损坏导致部分在线重做日志不可用 b.用户误删除数据,无法用逻辑方式恢复 c.由于丢失部分归档日志 d.控制文件丢失,只能以备份的控制文件打开数据库 不完全恢复的过程 先通过备份恢复所有数据文件,然后应用重做日志指定时间点最后以open resetlogs默认打开数据库。 不完全恢复只应用部分日志,需要指定oracle结束的标志 a.基于时间 b.基于SCN c.基于cancel:应用所有能够应用的日志,直到用户主动取消为止 d.基于日志序号:恢复到指定日志序号后即中止恢复操作。 恢复操作 分俩个步骤 1 数据库修复restore 将要恢复的文件从备份集中读取出来,并保存至指定路径下 2 恢复 recover 应用重做日志,将数据库恢复到崩溃的状态。 什么是resetlogs操作 执行不完全恢复,使用备份的控制文件,或者执行Flashback Database 操作之后,必须指定resetlogs选项。 oracle内部有一个生命周期,专业词汇叫incarnation 为了避免日志序列号的混淆,在执行不完全恢复后,执行reseglogs方式打开数据库,标识之前生命周期结束。oracle数据库又开始了一个新的生命周期,即重置Incarnation,日志文件序号也被重新初始化到1。 指定reseglogs打开数据库会执行如下操作: 归档当前的在线重做日志文件(如果能访问的话),然后清空内容并将日志文件序号重置为1(如果在线重做日志文件不存在,则重建) 重置控制文件中关于在线日志文件的元数据 更新数据文件和在线重做日志文件中的resetlogs scn和重置时间信息。 常见备份与恢复技术 1 用户管理的备份和恢复 2 RMAN备份与恢复 3 逻辑导入、导出(export /import 或data pump) 可以用来做数据迁移。 4 闪回(Flashback) 闪回查询(Flashback Query):通过查询undo段,能够重现操作之前的数据 闪回表(Flashback Table) 闪回数据库 5 数据库卫士(Data Guard) -------------使用RMAN------------------------- 1 连接本地数据库 rman target / 或者 rman conn target / 2 连接远程数据库 首先必须指定一个有效的网路服务名,本地tnsname.ora文件中必须已经建立了改网络服务名的正确配置。 rman target sys/oracle@orcl 3 记录日志 rman target / log /u01/ramn_log.txt 熟悉RMAN操作 如果oracle数据库open状态(open read write 状态) 则数据库必须处于归档模式,否则就会报ora-19602 1 启动和关闭数据库 rman target / shutdown immediate startup 和sql*plus一摸一样 2 执行操作系统命令 host 后执行 exit回到rman host "cp /u01/a.txt /tmp" 3 执行SQL语句 sql '语句' 单引号和双引号都可以 rman的备份类型 镜像复制 Image Copies 备份集 Backup Sets RMAN命令执行方式: 1 单个执行 backup database ; 2 批处理 run { .... } 3 运行脚本 rman target / @backup.rman @backup.rman RMAN备份初级演练: 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 ; 随便输入个字符都会有提示信息 ------------RMAN备份演练进阶 1 增量备份 指定参数incremental level=n 增量备份有两个级别 从0到N (N 最大不超过4) 所有增量备份必须先创建0级备份。 建立增量级别0的全库备份 backup incremental levle =0 database ; 为数据文件建立级别为1的备份 backup incremental levle =1 datafile 4; 为表空间users建立增量级别1的备份 backup incremental levle =1 tablespace users; 2 增量备份的类型 differential 差异 (默认) cumulative 累积 以cumulative 增量备份方式创建数据库完整备份 backup incremental levle =1 cumulative database ; 启用块跟踪 alter database enable block change tracking using file '/u01/aa.txt'; 禁用块跟踪 alter database disable block change tracking ; 检查是否启用块跟踪 select status from v$block_change_tracking; 注意:虽然时间可能缩短,备份集减小,但恢复时间可能增加 RMAN的备份策略 1 基于时间的备份策略 就是希望数据库最早能恢复到几天前。 设置为7,表示RMAN保留的备份就是可以保证你的数据库恢复到一周内任何时刻下的那些文件。 configure retention policy to recovery window of n days n大于0的正整数 就是保证: sysdate - backup checkpoint time >=7 任何不满足上述条件的就可以通过delete obsolete 删除 控制文件中记录保存时间可能对备份保留策略影响 oracle数据库的控制文件并不会无限扩展,其中保存记录时有限的,参数control_file_record_keep_time 决定在控制文件中记录最少保存天数,默认为7天。 空间不够可能会被覆盖,一般建议control_file_record_keep_time 初始化参数值不小于你在RMAN中设置的备份保留时间。 当前控制文件中分配的空间中,可存储记录和已存储记录数,可以通过查询v$controlfile_record_section获取。 2 基于冗余数量的备份保留策略 实质上是对某个数据文件以各种形式存在的备份数量 configure retention policy to redundancy n; dba也可以通过下列命令设置成不采用任何备份保留策略 configure retention policy to none; 可以通过report obsolete 命令查看处于废弃状态的备份文件。或者通过delete obsolete 删除这些废弃的文件。 是否使用多通道 RMAN支持两种备份设备,SBT磁带和disk 磁盘 分配通道是基于设备作分配 RMAN通道实质是一个到存储设备的数据流。 1 手工分配通道 allocate channel 只能出现在run块中 run { allocate channel c1 device type disk format '/u01/bak_%U'; backup tablespace users; } RMAN执行每一条backup,recover命令都至少要求使用一个通道。通道数决定了这些操作指定的并行度。每条allocate channel命令对应一个通道。 2 自动分配通道 configure device type disk/sbt parallelism n; configure default device type to sbt/disk; configure channel device type sbt/disk format ..; configure channel n device type sbt/disk format..; 4 是否启用复合备份 在生成备份集的同时,向指定位置生成指定份数的备份集的复制文件。 有三中方法实现duplexed a. backup copies 3 database ; b. run { set backup copies 2; backup device type disk format '/u01/%u' ,'/u02/%u' tablespace users,sales ; } c. 利用configure ...backup copies命令 configure default device type to disk; configure default backup copies for device type disk to 2; configure archivelog backup copies for device type disk to 2; 是否设置备份集属性 1 设置备份片段文件名 默认RMAN自动为每个备份片段生成一个唯一的名称。 可以通过format 参数指定备份片段名 a.分配通道的时候指定备份片段名 run { allocate channel c1 device type disk format '/u01/cn_%U'; backup tablespace users; } b.执行备份的时候指定备份片段名 backup tablespace users format '/u01/cn_%U'; 2 设置备份集的标签 每个备份集都有TAG标签。 默认生成TAG标签为:TAGyyyymmddThhmmss 用户也可以使用TAG关键字指定标签,长度不能超过30个字符 backup tablespace users tag tbs_userbak; 3 设置备份片段、备份集大小 RMAN在分配通道是参数maxpiecesize指定备份片大小 run { allocate channel c1 device type disk maxpiecesize=10m format '/u01/bak_%U'; backup tablespace system ; } 6 使用使用RMAN恢复目录(Recovery Catalog) RMAN备份信息,如归档文件路径,备份集路径均存储在目标数据库的控制文件中。也可以存储在恢复目录中。 创建恢复目录的步骤: 1 创建一个独立的表空间 create tablespace tbs_rman datafile '/u01/tbs01.dbf' size 50m; 2 创建一个独立的schema,用来存储备份信息,并授予相关权限 grant connect ,resource ,recovery_catalog_owner to rmanct identified by oracle; 3 通过RMAN连接到新创建的恢复目录中 rman catalog rmanct/oracle 4 在RMAN中创建catalog create catalog tablespace tbs_rman; 5以catalog模式连接目标数据库和恢复目录 rman target / catalog rmanct/oracle@ocp register database ; 取消注册使用unregistger database 如果DBA要管理的数据库比较多,那么建议使用恢复目录统一管理。 是否启用备份优化 RMAN中的备份优化(Backup Optimization),指在备份过程中,满足特定条件,RMAN将自动跳过某些文件,而不包含在备份集中。 启用备份优化的功能: configure backup optimization 参数设置为ON 执行的backup database 或backup archivelog 命令中带有all或like参数 分配的通道仅使用一种设备类型。不能同时分配使用SBT和DISK 是否对备份集进行压缩 10g中增加了一个as compressed backupset backup as compressed backupset tablespace system ; 不压缩的备份:backup tablesapce system 列出两个备份集合 查看大小 list backup of tablesapce system ; 是否启用加密备份 10gR2开支RMAN支持备份集进行加密,镜像复制不支持加密 RMAN提供三种加密方式:透明模式、密码模式和双重模式 设置加密方法:二种 configure 命令 (设置后持续有效) set encrypiton命令(仅当前会话,优先级高) 前提:数据库端已经配置好了oracle encryption wallet configure encryption for database on ; 禁止: configure encryption for database off; 表空间级别加密 configure encryption for tablespace users on ; 第二种方法 set encryption set encryption on identified by encbak only; rman实战:写脚本 确定目标: 每天夜间1点执行 数据库全备,同时备份控制文件及归档文件,备份到/u01/backup目录下,并在完成归档日志文件后,自动删除已经本归档日志 备份保留14天,过期自动删除 保留操作日志备查 run { configure retention policy to recovery window of 14 days; configure controlfile autobackup on; configure controlfile autobackup foramt for device type disk to '/u01/backup/%F'; allocate channel c1 device type disk format '/u01/backup/bak_%U'; backup database skip inaccessible plus archivelog filesperset 20 delete all input ; release channel c1; } allocate channel for maintenance device type disk; corsscheck backupset ; delete noprompt obsolete ; 保存至/u01/db_fullback_orcl.rman 1> backup skip 参数 skip inaccessible 表示跳过不可读的文件。 skip offline 表示跳过offline 的数据文件 skip readonly 表示跳过哪些所在表空间为read only 的数据文件。 2> filesperset参数 该参数用来设置一个备份集最多能包含的文件。 filesperset 20 表示最多能包括的文件为20个,如果超过则会创建多个备份集 3>allocate channel for maintenance 命令 用来分配通道专用于change ,delete ,crosscheck命令,并且不能包含在RUN块中。 默认已经分配了一个通道,oracle建议使用configure 分配通道,该命令可以不要。 编写命令执行批处理 rman target / log '/u01/backup/logs/bak_%DATA.log' cmdfile='/u01/backup/db_fullbak_orcl.rman'; ----- RMAN基础知识补充 format 字符串格式化 (注意大小写) %a: oracle数据库的activation ID 即resetlog_id %c: 备份片段复制数(从1开始编号,最大不超过256) %d: oracle数据库名称 %D: 当前时间中的日,格式为DD %e: 归档序号 %f: 绝对文件编号 %F:基于dbid+时间 确定的唯一名称,格式为 c-IIIII-YYYYMMDD-QQ,其中IIII为数据库的DBID YYYYMMDD为日志 QQ为一个1-256的序列 %h: 归档日志线程号。 %I: ORACLE数据库的DBID %M: 当前时间中的月,格式为MM %N: 表空间名称 %n: 数据库名称,并且在右侧使用x填充,保持8个字符长度。 %p: 备份集中备份片段编号,从1开始 %s: 备份集号 %t: 备份集时间戳 %T: 当前时间的年月日 yyyymmdd %u: 是一个由备份集编号和建立时间压缩后组成的8个字符名称,利用%u,可以为每个备份集生唯一的名称。 %U:默认是 %u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是最常用的命名方式生成备份片段时:%U=%u_%p_%c; 生成数据文件镜像复制时,%U=data-D-%d_id-id... 生成归档文件镜像复制时,%U=arch- 生成控制文件镜像复制时, %U=cf- %Y:当前时间中的年,格式为yyyy 注意:如果在backup命令中没有指定format选项,则RMAN默认使用%U 为备份片段命名 --通过configure 命令创建预定义配置 自动分配通道 备份保留时间的配置 备份集合备份片段大小的配置 启用和禁用备份优化功能 镜像复制的备份数量 控制文件快照名称 启用和禁止控制文件自动备份 是否将某个表空间排除在备份之外 查看当前配置 show all; #default表示该条配置任然是初始的默认配置。 还原参数为默认值 configure ....clear 1 configure retention policy 配置备份保留策略 (1) 基于时间保留策略 configure retention policy to recovery window of n days (2)基于冗余数量的保留策略 configure retention policy to redundancy n; 取消保留策略 configure retention policy to none; 2 configure backup optimization 配置备份优化 备份优化包括off和on两个状态 打开备份优化 configure backup optimization on; 关闭备份优化 configure backup optimizaiton off; 3 configure default device type 配置I/O设备类型 RMAN 支持I/O设备类型有两种:磁盘(disk)和磁带(sbt),默认为磁盘 使用磁盘设备: configure default device type to disk; 使用磁带设备: configure default device type to sbt; 设置并行度 configure device type disk parallelism 2; 4 configure controlfile autobackup 配置控制文件自动备份,包含两个状态:off和on 打开自动备份 configure controlfile autobackup on; 禁止自动备份 configure controlfile autobackup off; 启动自动备份,并指定自动备份的格式和路径 configure controlfile autobackup format for device type disk to '/u01/backup/%F' 在备份期间,将产生一个控制文件的快照,用于控制文件的读一致性。 configure snapshot controlfile name to '/u01/sncaa.ora'; 5.configure device type 设置并行备份 指定默认的并行程度 configure device type disk parallelism 2; 并行度为2,即同时开启了2个通道进行备份与恢复。 并行度决定了开启通道的个数 默认情况下,自动分配通道的并行度为1,在run 里设置的优先级高于默认的。 backup 命令中有一个filesperset参数,每个备份片段中能包含的文件的最大数,该参数默认值为64。该值不能小于通道数。 6 configure datafile/archivelog backup copies 设置备份文件冗余度。 7 configure maxsetsize 配置备份集的最大尺寸 单位支持Bytes,KB,MB,GB 默认值是unlimited 一般不修改 8 configure encryption 配置备份加密 前提:数据库端已经配置好了Oracle Encryption Wallet 打开备份加密 configure encryption for database on 关闭 configure encryption for database off 9 configure encryption algorithm配置加密算法 视图:v$rman_encryption_algorithms可以获取rman支持的加密算法 configure encryption algorithm 'AES256' 默认加密算法是 AES128 10 configure archivelog deletetion ploicy 配置归档文件删除策略 该策略对应值: applied on standby : 设置为该值是,delete input子句删除standby数据库需要的日志时,会提示rman-08137错误 none:设置为该值是,则不启用归档文件的删除策略。默认为none configure archive deletion policy to applied on standby; 通过set 命令进行会话级配置 set命令与configure 命令很相似,set命令进行的设置只在当前RMAN会话中有效。 1 常在run块中运行的命令 显示和关闭RMAN显示 set echo on /off 指定客户端信息 set command id to 'orclback' 通过v$session 视图,会发现至少一条记录client_info列值包含id=orclback ,相当于加了一个标识。 在nomount模式下,给数据库标识符 set dbid n n为10位长度的数字组成的字符串 2 在RUN块中运行的命令 a.给数据文件指定新的路径和名称 run { allocate channel c1 device type disk; set newname for datafile 4 to '/u01/user01.dbf'; } b.设置恢复到时间点或scn run { allocate channel c1 device type disk; set until time "to_date('2009-1-1 10:01:01','yyyy-mm-dd hh24:mi:ss')"; } c.定义备份片段的冗余数。 run { allocate channel c1 device type disk; set backup copies 3; } 增量备份的机制 仅操作哪些变化的数据块 增量备份有两种类型:Dirrerential 方式和Cumulative方式 1.差异备份 differential 0 1 2 3 4 分为5个等级 0级别最高,相当于完全备份 1级:至上一次0级备份以来的变化 至上一次1级别备份以来的 变化,但如果上一次是2级备份,则备份至少和它同级或比它高级别的备份以来的变化。 2.累积增量备份 Cumulative 分为0 1 2 3 4 这5个等级。 只认哪些比自己级别高的备份 在oracle 10g 版本中,oracle官方文档明确指出增量备份只有0和1两种级别。在实际执行增量备份时,可以指定多个级别。最多能够支持4级的增量备份。 备份加密模式 RMAN提供三种加密方式:透明模式、密码模式、双重模式 1 透明模式(Transparent Encryption Mode) 透明方式是基于oracle Encryption Wallet特性,也是RMAN默认的加密模式。 适合在同一服务器进行的备份和恢复,换台服务器就无法识别了。 2 密码加密方式(password Encryption Mode) 在备份前设置密码,执行恢复的时候需要密码 启用密码模式:set encryption identified by password only 3 双重加密模式(Dual Encryption Mode) set encryption identified by password 恢复目录数据库(Recovery catalog ) 存储RMAN脚本 保留更多的历史备份信息 同时管理与备份多个目标数据库 即使使用catalog,目标数据库的控制文件还是会记录备份信息。 控制文件中备份信息受初始化参数文件 control_file_record_keep_time的控制,该参数默认为7天,建议设置为14天。 RMAN备份相关的动态性能视图 1 v$archived_log视图 包含了归档重做日志文件的信息,如归档文件的名称、归档路径等。该视图中的数据来自于控制文件,一般是当以个online redologs完成归档后,就会在控制文件中插入一条记录。如果归档目录有多个的话,则同时插入对应数量的记录。 RMAN恢复归档文件或复制归档文件时,也会插入对应记录。 desc v$archived_log name :归档文件路径和名称 thread# 归档线程好 sequenc# 归档文件序号 first_time:等同于创建时间 creator :该记录的创建者(是那个进程做的) arch :归档进程创建 fgrd :前台进程创建 rman : 表示由RMAN创建 srmn : 表示由standby 端的rman创建 lgwr: 表示由logwriter 创建 applied:是否被用于,data guard化境使用 status :该条记录的状态 a:指正常状态 d:该归档文件已被删除 u:指示该记录指向归档已不村用 x:该记录失效 v$backup_set视图 显示当前备份信息,与list backup类似 desc v$bacup_set l:表示包含归档重做日志文件 d:表示数据文件完全备份 i:表示增量备份 v$backup_piece 显示备份片段的信息 备份策略的定制 1 备份的数据库有可能进行恢复吗 2 最早恢复到什么时间点 a.只是保证数据库状态正常 建议给予冗余的备份策略 configure retention policy to redundancy 3; b.可以恢复到之前的某个时间点 建议选择冗余时间的备份保留策略,备份时间设置为最早 恢复到的时间即可。 设备备份集至少保留7天 configure retention policy to recovery window of 7 days 3 系统什么时间比较闲 通常做法是将备份的任务放到凌晨时段执行 4 数据库的规模有多大 超大 (>1TB) 一般(<1TB and >200GB) 小 (<200GB) 磁盘读写大概每秒百M速录计算 5 数据是否被频繁修改 a.是,每天数据量都有超过10%以上的数据修改 建议:不使用增量备份 b. 否 每天数据基本没变化,只偶尔有极少量修改 建议使用增量备份 c.一般 每天数据都在变化,但量不大 注意:选择增量备份,记得要启用块修改跟踪特性 6 能否预估可能给予的恢复操作时间 7. 什么原因导致的错误 a.用户操作导致错误 flashback 通过备份恢复到错误产生的时间点 逻辑导入正确的数据 b.介质故障 c.数据块损坏导致的错误 RMAN进行块级修复 ---------- RMAN恢复 数据库修复 restore : 利用备份集的数据文件来替换已经损坏的数据库文件或者将 者恢复到一个新的位置。 RMAN恢复时会使用恢复或控制文件来读取备份信息,从中 选择最合适的备份进行恢复操作。 选择备份时的原则:选择距离恢复目录时刻最近,优先选择 镜像复制,其次才是备份集。 数据库恢复 recover : 是指应用所有重做日志,将数据库恢复到崩溃前的状态,或者应用部分日志恢复到指定时间点。 rman恢复 1 将数据库置于正确的状态:mount/open 一般整库恢复的话需要在mount状态 表空间或数据文件级恢复可以在open状态下操作 2 执行完全或是不完全恢复 完全恢复:应用所有重做日志 不完全恢复:只应用部分重做日志 3 打开数据库。 不完全恢复,打开时必须制定resetlogs RMAN如何选备份集 首选选择可用的备份集(如果没有指定until子句,则从最近的备份开始,如果指定了until,则从满足until的备份集开始),找到多个,则RMAN找最优的备份集来恢复(优先选择镜像复制) RMAN恢复中的自动化 如果备份片段出了错误,RMAN会选择该备份片段冗余的复制,如果没有冗余备份,则寻找之前备份集中是否有合适的备份,直到匹配。 在执行restore命令时,要修复的文件已经存在,RMAN会首先对该文件检查(只检查数据文件头),如该文件为最新状态,则restore会自动跳过该文件。 增量恢复和应用重做日志 如果创建增量备份,RMAN首选增量备份进行恢复 RMAN应用重做日志文件和归档重做日志文件 RMAN的恢复操作 1 对数据库进行完全介质恢复 场景:只剩下控制文件和spfile文件,其它文件都丢失了,有整库备份。 目标:恢复到崩溃那一刻的状态 a. 启动数据库到mount状态 startup mount ; b. 执行恢复操作 restore database ; recover databae delete archivelogs skip tablesapce temp ; 参数 delte archivelogs :在RMAN将在完成恢复后自动删除哪些恢复过程中产生的归档日志文件。(删除哪些由RMAN产生的归档文件) 参数:skip tablespace 指定跳过表空间。如临时表空间,不指定不会对临时表空间恢复,因为该表空间根本没有备份。 RMAN在执行整库恢复时,会自动创建临时表空间数据文件。 参数:maxsize n 用来制定恢复过程中,自动产生的归档文件最大可占用空间。如果超出该值,删除已用归档文件,一般不用,除非空间很紧张。 c. 打开数据库 alter database open; 2 恢复表空间和数据文件 数据库可以是mount也可以是open状态 恢复表空间 a.表空间置于offline状态 sql' alter tablespace users offline immiedate '; resoter tablespace users; recover tablespace users; sql 'alter tablespace users online'; 恢复多个表空间,可以在restore ,recover 后加多个表空间名。 恢复数据文件 a.将数据文件离线 sql 'alter database datafile 10 offline'; restore datafile 10; recover datafile 10; sql 'alter database datafile 10 online'; 如果磁盘文件损坏,必须在执行restore命令之前,给数据文件指定新的路径: run { sql 'alter database datafile 10 offline'; set newname for datafile 10 '/u01/user01.dbf'; restore datafile 10; switch datafile 10; recover datafiel 10; sql 'alter database datafile 10 online'; } 3 恢复归档日志文件 RMAN会在recover的时候自动对适当的归档进行恢复 单独恢复归档一般是特别需求:如创建了Data Guard环境 或者是ligminer对之前的归档进行分析 恢复归档号为20到30之间的归档文件 restore archivelog sequence between 20 and 30; 默认情况下讲归档文件恢复到初始化参数log_archive_dest_1指定的路径下,可以通过set archivelog destination to命令设置归档的新路径 run { set archivelog destination to '/u01/myback/arch'; restore archivelog sequence between 35 and 40; } 同一个RUN中可以同时出现多个set archivelog 命令 也就是说可以通过不同位置设置不同的归档路径方式。 run { set archivelog destination to '/u01/myback/arch'; restore archivelog sequence between 35 and 40; set archivelog destination to '/u01/myback/arch2'; restore archivelog sequence between 40 and 45; } 4 恢复控制文件和spfile初始化参数文件 恢复控制文件 a.从自动备份中恢复 首先设置DBID set dbid= (自动备份文件名包含DBID, 查询v$database ,或者RMAN登录的时候会显示) 启动数据库到nomount状态 startup nomount; 从自动备份中恢复 restore controlfile from autobackup; 默认恢复到control_files指定的路径下 restore controlfile to '/u01/orcl/control01.dbf' from autobackup; 如果你在执行备份操作前,修改过自动备份的默认路径的话,那么此时执行上述命令会提示找不到备份文件 需要重设一下自动备份路径,或者手工复制备份的控制文件到默认呢路径下。 控制文件默认的路径是 $ORACLE_HOME/dbs目录 不能使用configure 要使用set set controlfile autobackup format for device type disk to '/u01/%F'; 然后执行恢复 restore controlfie from autobackup; 从备份集中恢复 10g中,使用restore 命令提供了from backup 子句 设置dbid set dbid= 启动到nomount状态 startup nomount 执行restore命令指定控制文件所在备份片段的详细路径 restoer controlfile from '/u01/c-11111...'; 注意:恢复控制文件后需要使用resetlog方式打开数据库 恢复服务器初始化参数文件spfile 设置dbid set dbid= 启动到nomount状态 startup nomount; 在sqlplus是起不来的,但在RMAN里,可以,自动蓄力一个db_name为dummy的数据库,并以默认参数文件启动 执行恢复命令 restore spfile from autobackup; 指定恢复路径 restore spfile to '/u01/spfileorcl.ora' from autobackup 指定备份文件的路径 restore spfile to '/u01/spfileorcl.ora' form '/backup/c....'; RMAN恢复示例 归档模式下,有备份,丢失数据文件的恢复 环境:创建一个数据库的完全备份,然后在数据库中进行若干操作,之后删除数据文件模拟该文件丢失,最后使用RMAN恢复数据文件 1 创建备份 run { configure retention policy to recovery window of 14 days; configure controlfile autobackup on; configure controlfile autobackup foramt for device type disk to '/u01/backup/%F'; allocate channel c1 device type disk format '/u01/backup/bak_%U'; backup database skip inaccessible plus archivelog filesperset 20 delete all input ; release channel c1; } allocate channel for maintenance device type disk; corsscheck backupset ; delete noprompt obsolete ; rman target / log='/u01/bak.log' cmdfile='/u01/db_full.ramn' 2 构造数据 sqlplus scott/oracle create table tmp1(name char(10); insert into tmp1 values('tets1'); commit; 3 模拟文件丢失 conn / as sysdba shutdonw immediate host rm /u01/scott_tbs01.dbf startup 4执行恢复 set oracle_sid=orcl ramn target / restore datafile 5; recover datafile 5; alter database open ; select status from v$instance; select * from scott.tmp1; 查询表空间和关联的数据文件的状态 select ts.tablespace_name ,df.file_name,df.file_id,df.status from dba_tablespaces ts , (select tablespace_name,file_id,file_name,status from dba_data_files union all select tablespace_name,file_id,file_name,status from dba_temp_files) df where ts.tablespace_name=df.tablespace_name 归档模式无备份,丢失数据文件的恢复 system 表空间数据丢失或损毁,必须通过备份恢复 临时表空间数据库文件丢失,不需要恢复 1 环境 确认是否归档 archive log list; 创建新的表空间books和用户jss create tablespace books datafile '/u01/books01.dbf' size 10m; create user jss identified by jss defalut tablespace books quota unlimited on books; grant connect ,resource to jss; conn jss/jss create table test (a number); insert into test values(1); commit; 2 模拟文件丢失(先关闭数据库) rm /u01/books01.dbf startup 3 执行恢复 altar database create datafile '/u01/books01.dbf' as '/u01/books01.dbf'; recover datafile 6; alter database open; 恢复的关键是:所有重做日志文件都还在 丢失控制文件的恢复 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; 丢失联机重做日志文件的恢复 oracle通过文件冗余的机制来确保联机重做日志文件的安全。 丢失非当前的联机重做日志文件 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; 3善后处理 这种恢复,会导致数据库中数据的不一致性。 在警告日志中查看会有很多ora-00600的错误 建议:通过export逻辑导出范式执行一次full export 然后重建数据库,在导入之前的二进制文件。 实验:通过RMAN备份恢复数据库到其它服务器 源库:192.168.100.100 sid jssbook 目标库:192.168.100.101 (已经安装与源相同版本的数据库软件) 准备工作: 数据库dbid 创建完全备份(包含控制文件,数据文件,归档文件) 复制到目标数据库的相同路径下 源与目标目录结构保持一致 1 在源端创建数据库的完全备份 2 在目标数据库上设置oracle_sid windows服务器 : oradim -new -sid jssbook 3 配置目标数据库的初始化参数话文件 配置主要步骤 第一步:源库端spfile 初始化参数文件复制到目标的$ORACLE_HOME/dbs目录下 第二步:修改其中的部分参数,不是必须的 如果路劲不一致就必须修改 control_files 控制文件路径 audit_file_dest 审计输出的debug日志路径 backupground_dump_dest:lgwr,dbwn后台进程输出的debug日志路径 cor_dump_dest: oracle内核输出的dump日志路径 user_dump_dest:用户进程输出的debug日志路径 log_archive_dest_1 :归档文件路径 sqlplus / as sysdba create pfile ='/u01/pfilejssbook.ora' form spfile ; 使用记事本修改 create spfile from pfile ='/u01/pfilejssbook.ora'; 4 恢复控制文件进入加载状态 export oracle_sid=jssbook rman target / set dbid=1415261003 restore controlfile from '/u01/backup/c--'; 控制文件恢复到初始化参数文件control_files指定路径下 有了控制文件,就可以把数据库设置为mount状态 alter database mount; 5 修复数据库 如果源和目标数据库路径不同的话,需要通过set newname for datafile 命令来为数据文件重新设定路径 restore database ; 6 恢复数据库 recover database ; 7 用open resetlogs方式打开数据库 --------------flashback query 1 基于时间 as of timestamp 查询5分钟左右时间 as of timestamp sysdate -5/1440 sysdate 单位是天 一天有 24 小时* 60分钟=1440 2 基于SCN的查询as of scn 首先要得到SCN号 dbms_flashback.get_system_change_number 获取当前的SCN号 也可以通过v$database 中的current_scn获取 用户必须拥有操作对象权限 conn / as sysdba grant execute on dbms_flashback to scott grant select on v$database to scott select dbms_flashback.get_system_change_number from dual; scn查询会比timestamp 更加精确 oracle会将时间转换为scn,oracle内部是通过scn来标记操作的。 scn和时间的对应关系是根据sys用户的smon_scn_time实现映射的 在10g中平均每3秒产生一次系统时间与SCN的匹配关系 select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss') from sys.smon_scn_time ; oracle提供了两个函数scn_to_timestamp和timestamp_to_scn select timestamp_to_scn(sysdate) from dual; select to_char(scn_to_timestamp(1263291),'yyy-mm-dd') from dual; 使用flashback version query查询记录修改版本 查看某个时间点直接按,对象修改的多次的版本 在select查询后附加versions between timestamp/scn and timestamp/scn 伪列 versions_xid 操作的事务ID versions_operatin 对该行执行的操作 I 表示 insert D表示delete ,U表示update 对索引列 查出开始的SCN select dbms_flashback.get_system_change_number from dual; 对表更新,插入,删除 查出结束的SCN select dbms_flashback.get_system_change_number from dual; 然后版本查询 select ename ,sal,versions_startscn,versions_endscn,versions_xid from emp versions between scn 1111 and 2222; 使用flashback transaction query查询事务信息 对应视图flashback_transaction_query 操作前的SCN select dbms_flashback.get_system_change_number from dual; delete emp where ename ='SCOTT'; 使用事务查询 select xid,commit_scn,commit_timestamp,operation,undo_sql from flashback_transaction_query q where q.xid in ( select versions_xid from emp versions between scn 618481 and 618792); 报错: ORA-01031: insufficient privileges flashback_transaction_query视图查询时需要访问事务信息,要查询该视图用户需要DBA角色,或者被授予 select any transaction 权限 grant select any transaction to scott; 自动撤销管理表空间 undo_management: auto 自动管理 manual 手动管理 undo_tablespace : undo_retention undo段数据保留的最短时间,单位秒,默认900秒 alter tablespace undotbs1 retention guarantee; 禁用 alter tablespace undotbs1 retention noguarantee; 闪回表 drop table emp select object_name ,original_name from recyclebin; flashback table emp to before drop select index_name from user_indexes where table_name='E'; 要将索引名称修改为正确的命名规范 alter index "xxxxx" rename to IND_E; 最先删除的对象最先被恢复 闪回表到某个时刻 找出开始的SCN select dbms_flashback.get_system_change_number from dual; insert update delete 后恢复了,想恢复到最开始的状态 flashback table e to scn xxxx; 应用flashback table注意事项 1 基于undo的表恢复必须启用row movement 查看是否启用行移动 select row_movement from user_tables where table_name='E'; 启用和禁用行移动 alter table e enable row movement ; alter table e disable row movement; 2 注意DDL影响 3 注意DML锁,注意triggers在闪回期间被禁用 4 索引自动维护 BIN$pnYAJGz2sPLgQKjAyAJwog==$0 名字解析 bin$$globalUID$version $globalUID 数据库生成的26位长度标识符 v$vession 数据库生成的对象版本号 回收站的对象可以支持闪回查询和查询 可以关闭回收站功能 alter session set recyclebin=off; Flashback database 闪回数据库 flashback logs它也是用来记录日志,只不过这个日志保存的信比较特别,记录操作执行前要修改的数据库,即数据库块的前映像。 必备条件 1 数据库必须处于归档模式 2 数据库必须指定了flash recovery area db_recovery_file_dest db_recovery_file_dest_size 3 数据库必须启动flashback database select flashback_on from v$database ; 在mount模式下:alter database flashback on ; 4 在来认识一个初始化参数:db_flashback_retention_target 数据库能恢复到的最早时间 默认为1440 分钟 就是24小时 启用force logging 查看select force_logging from v$database ; alter database force logging ; 制约因素 不能恢复被删除的某个数据文件 控制文件重建,失效 不支持数据库的shrink收缩操作后执行恢复 flashback database 操作示例 1 检查是否启动了flash recovery area conn / as sysdba show parameter db_recover 2 检查是否启用了归档 archive log list ; 3 检查是否启用了flashback database 和force logging select flashback_on ,force_logging from v$database ; 4 查询当前的SCN select dbms_flashback.get_system_change_number from dual; 5 模拟误删除操作 conn scott/oracle drop table e purge ; 6 重新启动到mount状态,然后执行恢复 conn / as sysdba shutdown immediate ; startup mount ; flashback database to scn 1311176; 修复数据库 alter database open resetlogs 指定SCN之后的数据都会丢失

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