广告
返回顶部
首页 > 资讯 > 数据库 >Oracle数据库数据丢失怎么恢复
  • 864
分享到

Oracle数据库数据丢失怎么恢复

2024-04-02 19:04:59 864人浏览 独家记忆
摘要

这篇文章主要介绍“oracle数据库数据丢失怎么恢复”,在日常操作中,相信很多人在Oracle数据库数据丢失怎么恢复问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle

这篇文章主要介绍“oracle数据库数据丢失怎么恢复”,在日常操作中,相信很多人在Oracle数据库数据丢失怎么恢复问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”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、把这个表的数据备份到另一个表:

Oracle数据库数据丢失怎么恢复

2、删除该表的记录:

Oracle数据库数据丢失怎么恢复

3、执行下面的命令:

Oracle数据库数据丢失怎么恢复

这个命令中在关键字 tables 中指定需要导入的表名字,ignore=y  表示忽略表已经存在的错误。

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

方法二:

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

Oracle数据库数据丢失怎么恢复

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

Oracle数据库数据丢失怎么恢复

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

Oracle数据库数据丢失怎么恢复

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

Oracle数据库数据丢失怎么恢复

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

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

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

Oracle数据库数据丢失怎么恢复

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

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

1、关闭数据库:

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

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

Oracle数据库数据丢失怎么恢复

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

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

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

3、还原数据文件:

先对当前的数据库文件进行备份,然后再用以前的最近一次备份覆盖现有数据文件。注意:不覆盖现有的控制文件。

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

Oracle数据库数据丢失怎么恢复

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

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

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

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

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

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

Oracle数据库数据丢失怎么恢复

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

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

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

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

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

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

  • 查询与 dbms_logmnr 相关的几个视图来获取日志文件内容;

  • 使用 dbms_logmnr 里的存储过程 end_logmnr 结束分析。

▲下面详细讲述使用的过程

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

Oracle数据库数据丢失怎么恢复

2)使用 dbms_logmnr 里的存储过程 add_logfile  添加要分析的日志文件到待分析文件列表:

Oracle数据库数据丢失怎么恢复

如果没有运行在归档模式,那么由于重做日志文件的循环使用可能导致日志文件被覆盖而无法获取到所要寻找的恢复条目。如果运行在归档模式,则可以通过查看  $ORACLE_HOME\admin\orcl\bdump 目录下的 alert_orcl.log  里日志文件归档的时间和错误操作的时间来确定加入哪些归档日志文件到待分析的文件列表中去。

Oracle数据库数据丢失怎么恢复

注意:执行以上过程时 logfilename  参数需要写日志文件的全路径,否则会报错。重复以上操作直到把所有需要分析的文件都加到列表中去。这样就可以启动进行分析。

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

Oracle数据库数据丢失怎么恢复

这样就可以通过下面的查询来获取日志文件的内容了。

4)查询与 dbms_logmnr 相关的几个视图来获取日志文件内容;

Oracle数据库数据丢失怎么恢复

这样就可以找出要恢复所需的语句。注意:v$logmnr_contents 只对执行  dbms_logmnr.start_logmnr 的会话有效,如果通过其他会话或者使用 dbms_logmnr.end_logmnr 终止了分析,都将不能访问  v$logmnr_contents 的数据。如果要使其他会话也能获取到这些数据,可以通过另外建表来实现,如:

create table undo_sql as select * from v$logmnr_contents。

再对 undo_sql 进行授权,其他用户就可以访问 v$logmnr_contents 的数据了。

5)使用 dbms_logmnr 里的存储过程 end_logmnr 结束分析。

使用完成以后用下面的命令来结束分析活动:exec dbms_logmnr.end_logmnr;

这样就释放了分配给 logminer 的资源(内存和数据结构)。

从上面的过程可知,如果是更新的数据量比较大,而日志文件比较小,就可能会导致日志文件的切换。如果没有及时去挖掘日志文件(没有运行在归档模式),那么可能会由于日志文件的循环使用而导致数据不可恢复。如果运行在归档模式,也可能由于需要分析的日志文件比较多而时间较长。

四、利用 flashback 新特性恢复数据

Oracle9i 开始提供了闪回查询(Flashback Query)功能,对于误删除或者误更新并且已经 commit  了的情况提供了简便快捷的恢复方法;而在 Oracle 提供闪回查询之前,碰到这种情况只能通过备份来进行基于时间点的恢复或者使用 logmnr  挖掘日志来恢复,无疑这比闪回查询要麻烦而且费时。

使用这个 Flashback Query 特性的前提条件:

1. 数据库必须处于 Automatic Undo Management 状态。

Oracle数据库数据丢失怎么恢复

2. ***可以闪回查询的时间段由 UNDO_RETENTION 初始化参数(单位为秒)指定

Oracle数据库数据丢失怎么恢复

可以通过 ALTER SYSTEM SET UNDO_RETENTioN =  <seconds>; 来动态修改参数值。

▲如何使用 Flashback Query 来恢复数据呢?

1)通过 SQL

使用 SELECT 语句的 AS OF 来进行闪回查询,语法如下:

Oracle数据库数据丢失怎么恢复

使用 AS OF 关键字来对表,视图或者物化视图进行 Flashback Query,如果指定了  SCN,那么 expr 部分必须是一个数字,如果指定了 TIMESTAMP,那么 expr 必须是一个 timestamp 类型的值。查询结果将返回在指定的  SCN 或者时间点上的数据。

下面我们使用 scott 方案来作一个实验。

Oracle数据库数据丢失怎么恢复

如果想在 update 的子查询部分使用 AS OF,那么该查询只能返回一条记录,否则将会报错。

可以通过添加一个临时表作为中转,然后再作更新,如下:

Oracle数据库数据丢失怎么恢复

2)通过 DBMS_FLASHBACK 包来恢复

DBMS_FLASHBACK 包提供了以下几个函数:

  • ENABLE_AT_TIME:设置当前 SESSION 的闪回查询时间

  • ENABLE_AT_SYSTEM_CHANGE_NUMBER:设置当前 SESSION 的闪回查询 SCN

  • GET_SYSTEM_CHANGE_NUMBER:取得当前数据库的 SCN

  • DISABLE:关闭当前 SESSION 的闪回查询

当将一个 SESSION 设置为闪回查询模式之后,后续的查询都会基于那个时间点或者 SCN 的数据库状态,如果 SESSION 结束,那么即使没有明确指定  DISABLE,闪回查询也会自动失效。

当 SESSION 运行在闪回查询状态时,不允许进行任何 DML 和 DDL 操作。如果要用 DML 操作来进行数据恢复就必须使用 PL/SQL  游标。

▲示例:

Oracle数据库数据丢失怎么恢复

通过上面的例子可以看出,只要这个修改的时间不早于 sysdate- (UNDO_RETENTION  指定的秒数), 就可通过这种方式来恢复数据。

对于问题中的批量数据,可以写个过程来完成获取到更改前的数据:

Oracle数据库数据丢失怎么恢复

然后再用这个临时表里的数据来更新 TFUNDASSET 就可以了。

五、总结

比较以上几种恢复数据的方法的使用过程,我们可以看出:

  • exp/imp 只适合于数据变化不大的表的数据丢失的情况,即使用这种方法处理后也需要从业务办理资料中修正数据,否则导致数据丢失;

  • 采用基于时间点的不完全恢复可以恢复丢失的数据,但是需要关关闭数据库,减少系统可用时间,而且也会丢失恢复时间点以后的数据;

  • 使用 LogMiner  可以较好的恢复数据,但是要求数据库尽可能运行在归档模式,否则也可能导致数据丢失。好处是不用关闭系统,能够从日志文件中得到所有的数据。

  • 使用 Flashback 最方便和简洁,可以直接得到修改前的数据,但是需要依赖系统设置,并且需要占用大量的回滚表空间。

因此选择什么样的方法来恢复数据,取决于你的系统环境和具体情况,不能生搬硬套。采用正确的方法才能***程度的减少数据的丢失。

当然,***是不需要用到这些恢复的办法。前提是,你必须做好以下的工作:

  1. 为不同环境创建不同的数据库用户、不同密码(如果不能用户不同,一定要密码不同);

  2. 将 owner 和应用用户分开,并做适度授权;

  3. 在做 DML 前,先用同样的条件做查询,看根据结果集是否符合预期。  

到此,关于“Oracle数据库数据丢失怎么恢复”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle数据库数据丢失怎么恢复

本文链接: https://www.lsjlt.com/news/59504.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle数据库数据丢失怎么恢复
    这篇文章主要介绍“Oracle数据库数据丢失怎么恢复”,在日常操作中,相信很多人在Oracle数据库数据丢失怎么恢复问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle...
    99+
    2022-10-18
  • 电脑数据丢失怎么恢复
    当电脑数据丢失时,可以尝试以下方法来恢复数据:1. 检查回收站:首先,查看一下回收站中是否有被删除的文件。如果有,可以将其恢复到原来...
    99+
    2023-09-13
    电脑
  • 阿里云数据库丢失怎么办恢复
    随着云计算技术的发展,越来越多的企业和个人开始使用阿里云等云服务提供商的数据库服务。然而,有时会出现数据库丢失的情况,这可能会导致重要数据丢失。那么,当阿里云数据库丢失时,如何恢复呢?本文将详细介绍如何通过阿里云服务进行数据库恢复。 一、检...
    99+
    2023-11-08
    阿里 数据库
  • ORACLE数据库文件丢失后的恢复测试
    一、测试环境数据库版本是11GR2,在做完一份完全备份之后,关机,做一份快照,每一次开机之后都执行数次alter system switch logfile以产生归档日志。之后的测试都是基于这么一个完全备份...
    99+
    2022-10-18
  • Sql Server数据库文件丢失要怎么恢复
    这篇文章主要讲解了“Sql Server数据库文件丢失要怎么恢复”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Sql Server数据库文件丢失要怎么恢复”...
    99+
    2022-10-18
  • 阿里云服务器数据库丢失怎么恢复
    如果您的阿里云服务器数据库出现了丢失的情况,您可以尝试以下方法恢复数据: 首先,确认服务器是否正常运行。使用网络探测器、防火墙等软件查看服务器的网络连接是否正常。 尝试使用阿里云提供的“数据备份”功能备份数据,以备不时之需。在备份的过程...
    99+
    2023-10-26
    阿里 服务器 数据库
  • raid信息丢失的数据该怎么恢复
    本篇内容主要讲解“raid信息丢失的数据该怎么恢复”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“raid信息丢失的数据该怎么恢复”吧!【服务器数据恢复故障描述】今天分享的是一例服务器数据恢复的成...
    99+
    2023-06-04
  • 在Oracle数据库中,丢失归档的情况下数据文件如何恢复?
        如果一个表空间的数据文件损坏,在有备份的情况下,那么可以使用数据文件的备份进行还原,但是还需要归档文件进行恢复,才能使数据文件到达一个最新的一致性状态,从...
    99+
    2022-10-18
  • 阿里云服务器数据库丢失怎么恢复正常
    如果您的阿里云服务器数据库出现了丢失的情况,您可以尝试以下步骤来恢复数据。 使用阿里云服务器的恢复中心(Discovery Center)找回您丢失的数据。阿里云服务器会在数据库所在的服务器上创建一个Discovery Center帐户...
    99+
    2023-10-27
    阿里 恢复正常 服务器
  • 阿里云服务器数据库丢失怎么恢复回来
    如果您的阿里云服务器数据库被损坏或丢失,您可以尝试以下方法进行恢复: 检查数据库连接配置:查看阿里云服务器的网络设置是否正确,可以通过控制面板中的网络连接和管理界面中的“网络”选项来查看,并确保连接正确。 检查数据库的文件存储路径:如果...
    99+
    2023-10-27
    阿里 服务器 数据库
  • RAID信息丢失数据如何恢复
    本文小编为大家详细介绍“RAID信息丢失数据如何恢复”,内容详细,步骤清晰,细节处理妥当,希望这篇“RAID信息丢失数据如何恢复”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。【数据恢复故障描述】本次数据恢复的服务...
    99+
    2023-06-04
  • 阿里云服务器数据库丢失怎么恢复出厂设置
    如果您的阿里云服务器数据库被损坏或丢失,您可以尝试以下步骤来恢复出厂设置: 打开阿里云数据库软件,连接云服务器并进行配置操作。 在弹出的对话框中,选择“备份数据”选项,并将其保存在本地电脑上的一个文件夹或文件中。 在“导出数据”窗口中,...
    99+
    2023-10-27
    阿里 服务器 数据库
  • 为什么数据库会丢失数据
    今天就跟大家聊聊有关为什么数据库会丢失数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。数据库管理系统在今天已经是软件的重要组成部分,开源的 MyS...
    99+
    2022-10-19
  • 阿里云服务器降配数据丢失怎么恢复
    如果您的阿里云服务器降配数据丢失了,可以尝试以下方法进行恢复: 1.尝试使用阿里云官方网站上提供的“降配恢复”或“备份恢复”工具来恢复数据。如果无法找到相关工具,可以联系阿里云客服进行咨询。 2.联系阿里云客户支持团队,获取更多关于降配数...
    99+
    2023-10-27
    阿里 数据丢失 服务器
  • 阿里云服务器云盘丢失数据怎么恢复
    如果您的阿里云服务器云盘数据丢失,您可以尝试以下方法恢复数据: 1.首先,您需要确定您的数据在云存储服务(例如阿里云服务器云盘)的哪个位置。您可以使用网络探测工具确定云存储服务的位置,或者尝试使用其他备份解决方案。 2.如果您确定的是云存...
    99+
    2023-10-26
    阿里 服务器 数据
  • linux系统中fsck后数据丢失的数据恢复方法
    linux系统中fsck后数据丢失的数据恢复方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、基于linux系统,fsck后数据丢失的数据恢复方案二、解决方案1 恢复流程1...
    99+
    2023-06-05
  • 如何恢复win8系统硬盘丢失数据
      一些朋友在使用win8系统时总是丢失一些数据,那如何恢复win8系统硬盘丢失数据呢,今天小编就为大家带来解决方法,感兴趣的朋友可以一起看看。   一、恢复Win8电脑硬盘分区盘符的方法   用户可以使用...
    99+
    2022-06-04
    硬盘 数据 系统
  • Oracle数据库怎么备份与恢复
    本篇内容主要讲解“Oracle数据库怎么备份与恢复”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle数据库怎么备份与恢复”吧!在Oracle数据库的使用过程中,备份与恢复是经常遇到的操作...
    99+
    2023-06-21
  • 阿里云服务器云盘丢失数据怎么恢复啊
    如果您的阿里云服务器云盘数据丢失,您可以按照以下步骤进行恢复: 首先,登录您的云服务器。 在阿里云的控制台界面,选择“云盘”选项。 在“云盘”选项的页面中,选择要恢复数据的云盘。 在“数据管理”页面,可以看到您当前云盘下有多少文件。找到...
    99+
    2023-10-26
    阿里 服务器 数据
  • 阿里云数据服务器数据丢失如何恢复回来?
    在使用阿里云数据服务器时,数据丢失是一个常见的问题。如果你的数据丢失,可能会对你的业务造成严重影响。本文将详细介绍如何恢复阿里云数据服务器上的数据。 一、恢复步骤首先,你需要确认数据丢失的时间。如果你的数据丢失是在最近的一次系统更新或维护之...
    99+
    2023-11-17
    阿里 数据丢失 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作