设为首页收藏本站language 语言切换
查看: 865|回复: 1
收起左侧

南京Oracle认证培训分享几种Oracle 数据库中数据丢失的恢复方法

[复制链接]
发表于 2016-9-9 17:58:57 | 显示全部楼层 |阅读模式
  无论是开发、测试还是运维过程中,大家都可能会因为误操作、连错数据库、用错用户、语句条件有误等原因,导致错误删除、错误更新等问题。当你恨不得剁掉按回车的那个指头、捶胸顿足、或者吓得腿软时,肯定希望有办法来恢复这些数据。刚好,南京Oracle认证培训提供了一些强大的方法或机制,可以让你找到“后悔药”。

  根据oracle数据库的特点和提供的工具,主要方法有以下几种方法:

  ◆利用逻辑备份使用import工具丢失数据的表

  ◆利用物理备份来通过还原数据文件并进行不完全恢复

  ◆利用dbms_logmnr包从redo log文件中恢复

  ◆利用flashback特性恢复数据

  为了方便使用方法的介绍,上述恢复方法都将基于以下场景进行:系统管理员在前一天晚上11点用export对数据库做了全库逻辑备份,然后对所有数据文件进行了热备份。第二天上午10点,系统管理员在修改表TFUNDASSET的数据时,由于修改语句的条件写错了,导致一批记录(几千条)的ztm字段被修改成了错误的值,而且已经提交。这个表是资产表,相对而言数据变化不频繁。

  一、利用逻辑备份使用import工具恢复丢失的数据

  export/import是oracle提供的用于对数据库进行逻辑备份的工具。该工具适用于备份那些数据量不大、业务量不多的数据库系统。因为如果在前一天晚上11点用export做了逻辑备份,那么当今天上午10点数据库意外崩溃时,从备份起到数据库崩溃的这段时间里的数据修改操作(包括DDL和DML)都会丢失。如果丢失数据内的表上的数据是相对比较稳定,也就是说该表上基本没有DML操作,例如标准代码表、分区表里的历史数据,那么采用import来导入该表可以比较完整的恢复数据。如果该表是经常变化的业务表,那么这些丢失的数据只能根据业务情况从纸质记录恢复,或者其他途径恢复。

  ▲示例如下:这个表是一个资产表。相对来说,今天系统运行中修改的数据较少,丢失的数据量可以承受或者可以从别的途径恢复。那就可以用import来恢复。

  方法一:

  1、把这个表的数据备份到另一个表:

                               
登录/注册后可看大图

  2、删除该表的记录:

                               
登录/注册后可看大图

  3、执行下面的命令:


                               
登录/注册后可看大图

  这个命令中在关键字tables中指定需要导入的表名字,ignore=y表示忽略表已经存在的错误。有疑惑?请在线咨询南京Oracle认证培训

  4、导入结束后,检查表中的记录,并用适当的方法恢复当天的修改。

  方法二:

  1、 把需要恢复的表导入到另一个用户下面:


                               
登录/注册后可看大图

  2、检查数据以后,把原表记录删除:


                               
登录/注册后可看大图

  3、然后从另一用户表中插入回去:


                               
登录/注册后可看大图

  4、 数据量比较大时可以采用如下方法:


                               
登录/注册后可看大图

  二、利用物理备份来通过还原数据文件并进行不完全恢复

  如果数据库运行在归档模式下,那么可以通过使用以前的数据文件备份进行还原,然后利用归档日志进行前滚,直到回滚到错误操作的时间点前,然后重置日志文件打开数据库。

  可以通过下列方法确认是否是运行在归档模式:


                               
登录/注册后可看大图

  如果是如上所示,那么就是运行在归档模式了。

  ▲假定在前一天晚上11点做了全库物理备份,那么可以考虑如下恢复:

  1、关闭数据库:

  由于数据库的不完全恢复必须在一个关闭的数据库上实施,利用一个旧的数据库的备份还原,然后用日志根据需要逐步前滚,而不能还原一个新的备份,再回退到某个时间点。

  通知各客户端数据库将关闭,然后发出:


                               
登录/注册后可看大图

  数据库已经关闭。

  已经卸载数据库。

  ORACLE 例程已经关闭。

  2、确定错误操作的时间:

  可以根据操作员的估计来确定不完全恢复需要前滚停止的时间,也可以利用LogMiner来分析日志文件(这个工具将在后面介绍),找出错误操作的准确时间。

  3、还原数据文件:

  先对当前的数据库文件进行备份,然后再用以前的最近一次备份覆盖现有数据文件。南京Oracle认证培训提醒大家注意:不覆盖现有的控制文件。

  4、基于时间点恢复,启动数据库到装配状态:

                               
登录/注册后可看大图

  这样数据库就恢复到了2015年10月20日的9点58分零秒。

  然后再利用业务资料补充这段时间内的数据。

  三、利用dbms_logmnr包从log文件中恢复

  这个包是由Oracle提供,与dbms_logmnr_d包配合使用可以方便地分析联机日志文件和归档日志文件,从这些日志文件中提取出所有对数据库的更改操作。

  在使用这个包之前,需要先做一些设置和修改:

  1、打开initorcl.ora,修改初始化参数utl_file_dir,设置dbms_logmnr_d包将要使用的数据字典文件的放置目录。

                               
登录/注册后可看大图

  然后重启数据库使参数生效。

  2、以sys用户连接到数据库执行dbmslmd.sql脚本重建dbms_logmnr_d这个包。

  应用Logminer分析重做日志文件的操作主要有以下步骤:

  使用dbms_logmnr_d里的存储过程build创建一个外部数据字典文件;

  使用dbms_logmnr里的存储过程add_logfile添加要分析的日志文件;

  使用dbms_logmnr里的存储过程start_logmnr启动分析;

[color=rgb(0,
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-2 16:56 , Processed in 0.054178 second(s), 12 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表