用Oracle闪回功能恢复偶然丢失的数据

合集下载

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案一、引言在进行数据库管理和维护过程中,不可避免地会遇到各种故障和问题。

本文将介绍针对ORACLE数据库常见故障的解决方案,包括数据库无法启动、数据丢失、性能下降等问题的解决方法。

二、数据库无法启动的解决方案1. 检查数据库实例是否正常运行。

可以使用SQL*Plus或者Oracle Enterprise Manager来连接数据库实例,确认实例是否处于正常运行状态。

如果实例没有启动,可以使用启动命令来启动实例。

2. 检查数据库监听器是否正常运行。

监听器负责接收客户端的连接请求并将其转发给数据库实例。

如果监听器没有启动,可以使用监听器启动命令来启动监听器。

3. 检查数据库参数设置是否正确。

可以通过查看数据库参数文件或者使用SQL*Plus连接数据库实例并执行"show parameter"命令来查看数据库参数设置。

如果参数设置不正确,可以使用ALTER SYSTEM命令来修改参数设置。

4. 检查数据库日志文件。

数据库日志文件中记录了数据库的运行状态和错误信息。

可以通过查看数据库日志文件来了解数据库启动失败的原因,并根据错误信息采取相应的解决措施。

三、数据丢失的解决方案1. 恢复备份数据。

如果数据库存在备份,可以使用备份数据来恢复丢失的数据。

可以使用Oracle Recovery Manager(RMAN)工具来进行备份和恢复操作。

2. 使用闪回技术。

ORACLE数据库提供了闪回技术,可以将数据库恢复到指定的时间点或者指定的事务之前的状态。

可以使用闪回查询(Flashback Query)或者闪回表(Flashback Table)来恢复丢失的数据。

3. 使用日志文件进行恢复。

ORACLE数据库的日志文件中记录了数据库的所有操作,可以使用日志文件进行数据恢复。

可以使用日志文件恢复(Redo Log Recovery)或者逻辑恢复(Logical Recovery)来恢复丢失的数据。

oracle中闪回语法

oracle中闪回语法

oracle中闪回语法全文共四篇示例,供读者参考第一篇示例:Oracle中的闪回功能是一种强大的特性,它可以让用户在数据库操作出现错误时快速恢复数据到之前的状态。

通过使用闪回功能,用户可以在不影响其他正在运行的事务的情况下,进行数据的回滚操作,使数据库恢复到之前一个确定的时间点。

在Oracle中,闪回功能主要通过闪回查询和闪回表来实现。

闪回查询可以让用户查看数据库在某个时间点的数据情况,而闪回表可以让用户将表恢复到之前的状态。

下面我们来详细介绍一下这两种闪回功能的具体语法和用法。

闪回查询的语法如下:```SELECT * FROM table_name AS OF TIMESTAMP timestamp;```这条SQL语句表示从指定的时间戳timestamp时刻查看table_name表的数据情况。

用户可以使用这种方式来查看数据库在某个具体时刻的数据,从而找出误操作的原因,或者进行数据对比和分析。

除了基本的闪回查询和闪回表功能之外,Oracle中还提供了其他一些灵活的闪回功能,比如闪回查询带条件、闪回表到某个SCN号、闪回事务等。

用户可以根据具体的需求和情况,选择合适的闪回方式进行操作。

需要注意的是,闪回功能在数据库恢复和数据修复方面有着非常重要的作用,但在使用时也需要谨慎操作,以避免对数据造成更大的影响。

在使用闪回功能之前,用户最好提前做好数据备份和日志记录,以防止操作出现意外情况。

Oracle中的闪回功能是一项非常实用和强大的特性,它可以帮助用户在数据库操作出现错误时快速恢复数据,有效避免数据丢失和影响。

通过灵活运用闪回功能,可以提高数据库的稳定性和安全性,保证数据的完整和可靠性。

希望本文的介绍能够对大家有所帮助,希望大家在使用Oracle数据库时,能够充分利用闪回功能,提升数据管理的效率和水平。

第二篇示例:Oracle中的闪回语法是一种非常强大的工具,它可以帮助用户轻松地还原数据库到之前的状态。

Oracle闪回查询恢复delete删除数据

Oracle闪回查询恢复delete删除数据
2.获取数据删除前的一个时间点或scn
SQL> select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time, to_char(dbms_flashback.get_system_change_number) scn from dual;
TIME SCN
1. 不能Falshback到5天以前的数据。
2. 闪回查询无法恢复到表结构改变之前,因为闪回查询使用的是当前的数据字典。
3. 受到undo_retention参数的影响,对于undo_retention之前的数据,Flashback不保证能Flashback成功。
4. 对drop,truncate等不记录回滚的操作,不能恢复。
注:推荐使用scn,由于oracle9i中,因为scn与时间点的同步需要5分钟,如果最近5分钟之内的数据需要Falshback query查询,可能会查询丢失,而scn则不存在这个问题。Oracle10g中这个问题已修正(scn与时间点的大致关系,可以通过logmnr分析归档日志获得)。
Falshback query查询的局限:
SQL> select * from t as of scn 1060174;
3. 将查询到的数据,新增到表中。也可用更直接的方法,如:
SQL>create table tab_test as select * from t of timestamp to_timestamp('2010-06-29 22:57:47', 'yyyy-mm-dd hh24:mi:ss');
Commit complete
4.在查看t表,此时t表中数据以删除

oracle flashback table语法

oracle flashback table语法

oracle flashback table语法OracleFlashbackTable语法是一种用于恢复被修改或删除的表数据的技术。

它使您可以使用简单的SQL语句来回滚表数据,并且比使用恢复工具和备份更加方便和快速。

要使用Flashback Table,您需要在Oracle数据库中启用闪回功能。

一旦启用,您可以使用以下语法将表恢复到以前的状态:FLASHBACK TABLE table_name TO TIMESTAMP timestamp_value;其中,table_name是您要恢复的表的名称,timestamp_value是您要将表恢复到的时间戳值。

您可以使用SYSTIMESTAMP或TO_TIMESTAMP函数来指定时间戳值。

例如,以下语句将从my_table表中删除的所有行恢复到3月1日下午2点的状态:FLASHBACK TABLE my_table TO TIMESTAMP '2021-03-0114:00:00';除了使用时间戳值外,您还可以使用SCN(系统更改号码)来恢复表。

以下语法将表恢复到指定的SCN:FLASHBACK TABLE table_name TO SCN scn_value;在使用Flashback Table时,需要注意以下几点:1. 您需要具有FLASHBACK权限才能使用Flashback Table。

2. 恢复表数据将覆盖当前表数据。

如果您在恢复之前未备份表数据,则无法撤消。

3. Flashback Table仅适用于表级别的恢复,无法恢复单个行或单个列。

4. 如果表已被TRUNCATE或DROP,则无法使用Flashback Table 来恢复数据。

总之,Flashback Table是一种快速和方便的恢复表数据的方法,但在使用它之前,请确保您了解其工作原理和限制。

oracle回退delete语句

oracle回退delete语句

一、介绍在数据库管理系统中,delete语句用于删除表中的数据记录。

然而,有时候用户可能会错误地执行delete语句,导致删除了重要的数据。

在这种情况下,需要进行回退操作来恢复被误删除的数据记录。

二、oracle回退delete语句的方法1. 使用flashback技术Oracle数据库提供了flashback技术,可以通过回退操作来恢复被删除的数据记录。

使用flashback技术需要先确定数据库中是否启用了flashback功能,如果启用了,则可以使用flashback查询被删除的数据记录,然后通过flashback操作将数据记录回退至删除前的状态。

2. 使用备份和恢复如果数据库中没有启用flashback功能,可以通过数据库备份和恢复来回退delete语句。

首先需要找到数据库中删除数据之前的备份,然后进行数据恢复操作,将备份中的数据恢复至数据库中,从而实现回退操作。

3. 使用日志文件Oracle数据库中的日志文件记录了数据库中的所有操作,包括delete 语句的执行情况。

通过查询日志文件,可以找到被删除的数据记录,然后使用日志文件中的信息进行数据恢复操作,将数据记录回退至删除前的状态。

三、注意事项在进行回退delete语句的操作时,需要注意以下几点:1. 数据库备份的重要性及时做好数据库的备份工作非常重要,可以在意外删除数据时提供及时的恢复操作。

2. 谨慎执行delete语句在执行delete语句时,务必要谨慎操作,确保不会误删除重要数据记录。

3. 使用flashback技术需谨慎虽然flashback技术可以实现数据回退操作,但也需要谨慎操作,以免对数据库产生不必要的影响。

四、结论在数据库管理中,回退delete语句是一项非常重要的操作,可以帮助恢复误删除的数据记录,保证数据库的完整性和稳定性。

在日常的数据库管理工作中,需要时刻关注数据库的备份情况,谨慎执行delete 语句,并掌握回退delete语句的操作方法,以保障数据库的安全性和稳定性。

Oracle误删除数据的恢复方法

Oracle误删除数据的恢复方法

Oracle误删除数据的恢复⽅法Oracle误删数据的恢复,分为两种⽅法:SCN和时间戳两种⽅法恢复。

⼀、通过SCN恢复删除且已提交的数据1、获得当前数据库的SCN号 select current_scn from v$database; (切换到sys⽤户或system⽤户查询) 查询到的SCN号为:14992232、查询当前SCN号之前的SCN select * from 表名 as of scn 1499220; (确定删除的数据是否存在,如果存在,则恢复数据;如果不是,则继续缩⼩scn号)3、恢复删除且已提交的数据 flashback table 表名 to scn 1499220;⼆、通过时间恢复删除且已提交的数据1、查询当前系统时间select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;2、查询删除数据的时间点的数据select * from 表名 as of timestamp to_timestamp('2013-05-29 15:29:00','yyyy-mm-dd hh24:mi:ss'); (如果不是,则继续缩⼩范围)3、恢复删除且已提交的数据flashback table 表名 to timestamp to_timestamp('2013-05-29 15:29:00','yyyy-mm-dd hh24:mi:ss');注意:如果在执⾏上⾯的语句,出现错误。

可以尝试执⾏ alter table 表名 enable row movement; //允许更改时间戳找出删除的数据:select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')把删除的数据重新插⼊原表: insert into 表名 (select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')); select * from t_xxx as of timestamp (systimestamp - interval '10' minute)。

oracle数据库执行闪回恢复数据

oracle数据库执行闪回恢复数据
启动flashback database选项。 SQL>shutdown immediate; SQL>startup mount; SQL>alter database flashback on; --可以看到,flashback还必须要归档的保证 • 应该先执行
• archive log list; alter database archivelog;
shutdown immediate • startup mount;
alter database open; alter database open resetlogs; • desc sjh0
闪回数据库: 节省恢复时间
Incomplete Recovery Generate logs
Restore files
• purge table t_user; --从回收站清除。
• show recyclebin; • drop table t_user purge; --彻底删除一个
表,不让进入回收站。 • show recyclebin; --没有对象。
闪回Drop: 注意事项
– 闪回Drop表在以下情形下失效:
Repaired database
Backup
User error
Flashback Database User error
Flashback logs
Apply logs forward
Repaired database
Backup
Apply Flashback logs backward
闪回数据库: 注意事项
闪回表
– 使用闪回表操作, 可以将表恢复到某个时间而不 需要备份资料.

用Oracle闪回功能恢复偶然丢失的数据

用Oracle闪回功能恢复偶然丢失的数据

mysql
闪回数据库概述 mysql
闪回数据库能使整个数据库闪回到特定的时间点。 mysql
闪回数据库恢复比传统恢复操作更快的原因是:恢复不再受数据库大小的影响。
oracle
闪回数据库恢复时间正比于恢复过程汇总需要备份的变化的数量,而不是数据文件和归档日志大小。 unix
闪回恢复区可以包括数据文件、控制文件、联机重做日志、各种各样的RMAN文件和闪回日志。用户可以在建立重做日志、控制文件、和归档日志文件时将他们存储在闪回恢复区。 unix
影响联机重做日志的参数:
oracle
DB_CREATE_ONLINE_LOG_DEST_n
DB_RECOVERY_FILE_DEST
DB_CREATE_FILE_DEST
mysql
影响归档日志的一些参数: unix
LOG_ARCHIVE_DEST_n
LOG_ARCHIVE_DEST
LOG_ARCHIVE_DUPLEX_DEST
oracle
oracle
2.启动数据库到mount状态
mysql
3.从RMAN发出闪回数据库恢复命令
linux
Connecttarget
Flashbackdatabasetoscn=……; oracle
4.alter database open resetlogs;
ssh
使用闪回恢复区
unix
闪回恢复区是一个集中的恢复区域。
linux
这些文件和数据文件及控制文件有关系。这就减少了手工清除不需要的归档日志。
mysql
V$recovery_file_dest检查消耗的空间和其他关于闪回恢复区的统计信息。 unix

Oracle 10g利用闪回挽救误删的数据

Oracle 10g利用闪回挽救误删的数据

Oracle 10g利用闪回挽救误删的数据我们在开发和运维过程中,经常遇到数据被误删除的情况。

无论是在应用开发中的Bug,还是修改数据的时候,如果提交了错误数据修改结果,会带来很多问题。

一般来说,一旦提交commit事务,我们是不能获取到之前的数据情况,除非使用较复杂的数据恢复手段,利用备份数据恢复。

但是在Oracle中,可以使用其闪回FlashBack特性来解决这个问题。

首先,声明一点,闪回Flashback的范围很大,包括数据库、表、数据均是可以Flashback 的,但是机制差别很大。

本文说的是简单的数据flashback,用来快速的挽救回我们的数据。

首先构建实验环境:⏹查看数据库版本信息⏹构建一张实验数据表⏹查看实验表的数据,定位时间信息⏹如果我们此时误删除了数据,并且将删除结果提交。

⏹这时,虽然我们已经commit了删除事务,但是仍可以指定一个时间点,获取到那个时间点的数据。

⏹删除的数据集合又可以查询到。

这样恢复数据的思路有了,可以将结果集合直接插入回数据表。

闪回标准的做法应为:他很多因素来决定闪回的时间。

实际上,如果超过了闪回15分钟,可以获得结果。

如果闪回的时间过长,保存的SCN版本已经消失,系统会报错。

SQL> SELECT * FROM SCOTT.TB_EMPLOYEE AS OF TIMESTAMP TO_TIMESTAMP('2012-01-0714:14:38','yyyy-mm-dd hh24:mi:ss');SELECT * FROM SCOTT.TB_EMPLOYEE AS OF TIMESTAMP TO_TIMESTAMP('2012-01-0714:14:38','yyyy-mm-dd hh24:mi:ss')第 1 行出现错误:ORA-08180: 未找到基于指定时间的快照提到闪回FLASHBACK,要注意Oracle的闪回技术是由几个相对独立的技术实现的。

ORACLE数据恢复

ORACLE数据恢复

ORACLE数据库闪回一、恢复删除掉的数据 (2)方法1:通过SCN查找 (2)方法二:通过删除时间查找 (2)二、恢复drop掉的表 (3)1、打开闪存功能: (3)1、服务起不来,未初始化服务句柄: (4)2、空闲进程登录: (4)3、找到init文件,创建spfile: (4)4、开启闪存功能:alter database flashback on (5)5、先开启归档模式,再开启闪存功能 (5)2、查看闪回参数: (5)3、闪回实例: (6)4、表版本和闪回功能 (6)5、表结构更改还能不能恢复 (7)6、为普通用户添加查看字典表的权限 (8)7、管理回收站 (8)8、禁用或启用recyclebin (8)Oracle9i版本开始支持闪回查询,即可以及时取回误删的数据。

一、恢复删除掉的数据例:1、创建表createtable tt (idnumber,namevarchar2(20));2、表中插入数据select * from tt;ID NAME1 1 张三2 2 李四3 3 王五3、删除所有数据,并提交deletefrom tt ;commit;方法1:通过SCN查找(每隔5分钟,系统产生一次系统时间标记与scn的匹配并存入sys.smon_scn_time表。

)3、查找删除前后的SCNselect dbms_flashback.get_system_change_number from dual;-- 结果为:1387348selectcount(*) from tt asofscn1387348;-- 结果为:0selectcount(*) from tt asofscn1387310;-- 结果为:34、恢复数据insertinto tt select * from tt asofscn1387310;commit;selectcount(*) from tt-- 结果为:3最终delete的数据已经找回了。

Oracle数据库数据丢失恢复的几种方法总结

Oracle数据库数据丢失恢复的几种方法总结

Oracle数据库数据丢失恢复的⼏种⽅法总结根据oracle数据库的特点和提供的⼯具,主要⽅法有以下⼏种⽅法:1. 利⽤逻辑备份使⽤import⼯具丢失数据的表2. 利⽤物理备份来通过还原数据⽂件并进⾏不完全恢复3. 利⽤dbms_logmnr包从redo log⽂件中恢复4. 利⽤flashback特性恢复数据前提为了⽅便使⽤⽅法的介绍,上述恢复⽅法都将基于以下场景进⾏:系统管理员在前⼀天晚上11点⽤export对数据库做了全库逻辑备份,然后对所有数据⽂件进⾏了热备份。

第⼆天上午10点,系统管理员在修改表TFUNDASSET的数据时,由于修改语句的条件写错了,导致⼀批记录(⼏千条)的ztm字段被修改成了错误的值,⽽且已经提交。

这个表是资产表,相对⽽⾔数据变化不频繁。

⼀、利⽤逻辑备份使⽤import⼯具恢复丢失的数据export/import是oracle提供的⽤于对数据库进⾏逻辑备份的⼯具。

该⼯具适⽤于备份那些数据量不⼤、业务量不多的数据库系统。

因为如果在前⼀天晚上11点⽤export做了逻辑备份,那么当今天上午10点数据库意外崩溃时,从备份起到数据库崩溃的这段时间⾥的数据修改操作(包括DDL和DML)都会丢失。

如果丢失数据内的表上的数据是相对⽐较稳定,也就是说该表上基本没有DML操作,例如标准代码表、分区表⾥的历史数据,那么采⽤import来导⼊该表可以⽐较完整的恢复数据。

如果该表是经常变化的业务表,那么这些丢失的数据只能根据业务情况从纸质记录恢复,或者其他途径恢复。

▲⽰例如下:这个表是⼀个资产表。

相对来说,今天系统运⾏中修改的数据较少,丢失的数据量可以承受或者可以从别的途径恢复。

那就可以⽤import来恢复。

⽅法⼀:1、把这个表的数据备份到另⼀个表:2、删除该表的记录:3、执⾏下⾯的命令:这个命令中在关键字tables中指定需要导⼊的表名字,ignore=y表⽰忽略表已经存在的错误。

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

Oracle误删除数据和表的恢复办法

Oracle误删除数据和表的恢复办法

Oracle误删除数据和表的恢复办法在⼯作中我们操作数据库的时候经常会发⽣⼀个不该发⽣的问题:⽤户意外的删除⼀个⾮常重要的表或者是表中的数据⽽且没有备份,需要尽快的恢复,以下就是解决的办法:主要是利⽤Oracle回收站的闪回特性oracle 回收站recyclebin是10g才有的新特性,当我们drop table cube_scope 【purge】时,如果不指定purge时,系统只是将这个表重命名为BIN$开头的名称,并在数据字典中修改了相关数据,表所占⽤的物理空间并没有真正的回收,此时所占⽤的空间还是原来的表空间,当表空间不够⽤时,ORACLE会跟据DROPSCN#⾃动进⾏逐个清理回收站中对像所占⽤的空间,10g默认是打开回收站功能的。

⼀、delete 数据误删除1、删除数据之后表结构没有变化直接使⽤表闪回,表闪回要求⽤户必须要有flash any table权限先确定删除数据的时间(在删除数据之前的时间就⾏,不过最好要具体到删除数据的时间点)alter table 表名 enable row movement //开启⾏移动功能flashback table 表名 to timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')//恢复数据到删除时间点之前的状态Alter table 表名 disable row movement //关闭⾏移动功能(⼀定不能忘记)2、删除数据之后表结构发⽣了变化select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')//找出被删除的数据insert into 表名 (select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')); //把删除的数据重新插回原表,但注意主键不要重复⼆、drop命令删除表由于oracle在删除表时,没有直接清空表所占的块,oracle把这些已删除的表的信息放到了⼀个虚拟容器“回收站”中,⽽只是对该表的数据块做了可以被覆写的标志,所以在块未被重新使⽤前还可以恢复。

oracle闪回技术

oracle闪回技术

伪列 Versions_starttime:事务开始的时间 Versions_startscn:事务开始的SCN号 Versions_endtime:事务结束的时间 Versions_endscn:事务结束的SCN Versions_xid:事务的ID号 Versions_operation:事务所进行的操作类型,包括插入(显示为I)、删除 (显示为D)、更新(显示为U) 如果我们希望显示数据行的所有的变化,则使用versions between minvalue and maxvalue。
用户ftest删除看了一个表。 查看回收站。 对象删除前的名字, 对象被删除后由系 统自动赋予的名字
在user_segments和user_objects里面可以看见被删除对象的名字和空间占用情况。
说明被删除对象依然存在,只是被改了名字而已。所占用的物理空间 并没有被删除。
表testt存储在文件4中,从block193开始,连续占用8个数据块。
根据当前业务负载所产生的闪回日志记录的速度来看,为了满足所指定的 db_flashback_retention_target时间长度,大概需要多少字节的闪回日志空间。 当前闪回日志空间 利用当前的闪回日志能够将数据库最多闪回到的SCN 利用当前的闪回日志能够将数据库最多闪回到的时间点 在闪回数据库时,假设当前时间点为B,要闪回到历史时间点为A。则需要注意, 从A到B的这段时间里,如果恢复或重建了控制文件,或者删除了某个表空间, 或者收缩了某个数据文件的话,那么闪回到A点的操作会失败。
启用闪回数据库,必须按照下面的四个步骤 1、数据库配置为归档模式 2、配置闪回恢复区(flash recovery area FRA)
3、配置闪回保留时间
数据库最多能够将数据库闪回到多长时 间之前,如果设置为24小时,那么说明 数据库只会保留最近24小时所发生改变 前的值。24小时前的值都会被覆盖,以 分为单位

oracle数据恢复

oracle数据恢复

select * from tablename as of timestamp sysdate-10/24/60oracle误删除表数据后的恢复详解2009-09-27 14:13一、undo_retention参数的查询、修改:用show parameter undo;命令查看当时的数据库参数undo_retention设置。

显示如下:undo_management string AUTOundo_retention integer 10800undo_suppress_errors boolean FALSEundo_tablespace string UNDOTBS1undo_retention(保持力),10800单位是秒。

即3个小时。

修改默认的undo_retention参数设置:ALTER SYSTEM SET undo_retention=10800 SCOPE=BOTH;二、oracle误删除表数据后的的快速恢复功能方法:【方法一】:通过oracle提供的回闪功能:exec dbms_flashback.enable_at_time(to_date('2007-07-2310:21:00','yyyy-mm-dd hh24:mi:ss'));set serveroutput onDECLARE r_temp hr.job_history%ROWTYPE;CURSOR c_temp IS SELECT * FROM hr.job_history;BEGINOPEN c_temp;dbms_flashback.disable;LOOPFETCH c_temp INTO r_temp;EXIT WHEN c_temp%NOTFOUND;insert into hr.job_history(EMPLOYEE_ID,JOB_ID,START_DATE,END_DATE) values(r_temp.EMPLOYEE_ID,r_temp.JOB_ID,r_temp.START_DATE,r_temp.END_DATE); commit;END LOOP;CLOSE c_temp;END;这种办法可以将删除的数据恢复到对应的表中,首先要保证该用户有执行dbms_flashback包的权限【方法二】:insert into hr.job_historyselect * from hr.job_history as of timestamp to_timestamp('2007-07-23 10:20:00', 'yyyy-mm-dd hh24:mi:ss');这种方法简单,容易掌握,功能和上面的一样时间为你误操作之前的时间,最好是离误操作比较近的,因为oracle保存在回滚保持段里的数据时间有一定的时间限制由undo_retention 这个参数值决定。

oracle闪回、找回丢失数据

oracle闪回、找回丢失数据

如何快速找回数据库表中误删除的数据如果Oracle10g数据库中误删除了一个表中的记录,例如删除了一个非常重要的雇员信息,并且该事务已经提交了,如何快速找回误删除的数据呢?这种情况下可以利用Oracle10g数据库的闪回功能实现找回丢失的数据。

具体的说就是行闪回。

行级闪回是指获取先前某个时间点或某个SCN值时表的行数据。

行级闪回有两种方式,一是闪回到某个时间点,二是闪回到某个SCN号。

实验如下:首先以SYS用户连接数据库,查询数据库是否开启了闪回功能。

SQL> select flashback_on from v$database;FLASHBACK_ON------------------NOSQL>如果没有开启闪回功能,则需要SHUTDOWN IMMEDIATE数据库,然后将数据库加载到MOUNT状态,使用ALTER DATABASE FLASHBACK ON 开启数据库闪回功能。

还需要设置参数db_flashback_retention_target。

实例如下:SQL> shutdown immediate;数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount;ORACLE 例程已经启动。

Total System Global Area 289406976 bytesFixed Size 1248600 bytesVariable Size 92275368 bytesDatabase Buffers 192937984 bytesRedo Buffers 2945024 bytes数据库装载完毕。

SQL> select name,log_mode,open_mode,flashback_on from v$database;NAME LOG_MODE OPEN_MODE FLASHBACK_ON--------- ------------ ---------- ------------------MYORACLE ARCHIVELOG MOUNTED NOSQL> alter database flashback on;数据库已更改。

oracle利用闪回、logmnr找回误删除的数据

oracle利用闪回、logmnr找回误删除的数据

朋友遇到了非常经典的ORACLE事故——误删除,开发人员告诉他,昨天下午五点-六点不小心误删了几条数据,问是否可以恢复,朋友的环境是ORACLE 10gR2,没有备份,但有开归档和闪回,这个是可以找回数据的。

以下为找回误删除数据的实验。

SQL> create table t1(id number,name varchar2(20));Table createdSQL> insert into t1 values(1,'zhangsan');1 row insertedSQL> insert into t1 values(2,'zhangsi');1 row insertedSQL> insert into t1 values(3,'zhangwu');1 row insertedSQL> commit;Commit complete删除部分数据,并记录SCN。

SQL> select current_scn from v$database;CURRENT_SCN-----------4354137SQL> delete from t1 where id=3;1 row deletedSQL> commit;Commit complete创建一张大表,用于测试。

SQL> create table t2 as select * from dba_objects;Table createdSQL> INSERT INTO T2 SELECT * FROM T2;75068 rows insertedSQL> /150136 rows insertedSQL> /300272 rows insertedSQL> /600544 rows inserted对T2表做大量的update操作,模拟回滚段被回收。

Oracle闪回truncate删除的表中数据

Oracle闪回truncate删除的表中数据

Oracle 闪回truncate 删除的表中数据 说明:数据库默认闪回时间为一天说明:数据库默认闪回时间为一天【1】查询恢复设置时间】查询恢复设置时间 SQL> show parameter flashback  flashback 功能默认为功能默认为1440分钟,也就一天时间分钟,也就一天时间【2】查看数据库闪回状态是否可用】查看数据库闪回状态是否可用 SQL> select flashback_on from v$database;  FLASHBACK_ON -----------  NO flashback_on 为NO,也就是没有开flashback 功能,当truncate 删除数据时,无法使用flashback 【3】设置flashback_on 为开启状态,要求数据库必须在mount 状态下打开状态下打开 SQL> shutdown immediate;  数据库已经关闭。

数据库已经关闭。

已经卸载数据库。

已经卸载数据库。

ORACLE 例程已经关闭。

例程已经关闭。

SQL> startup mount  ORACLE 例程已经启动。

例程已经启动。

Total System Global Area 272629760 bytes  Fixed Size 1248476 bytes  Variable Size 109052708 bytes  Database Buffers 155189248 bytes  Redo Buffers 7139328 bytes  数据库装载完毕。

数据库装载完毕。

SQL> alter database flashback on;  数据库已更改。

数据库已更改。

说明:如果数据库为非归档模块,会提示“必须启用介质恢复功能” 解决方法:1)SQL> shutdown immediate;  2)SQL> startup mount;  3)SQL> alter database archivelog; 【4】truncate 删除表中数据删除表中数据 SQL> truncate table jg_rk;  表被截断。

利用AUL在没有任何备份的情况下恢复被truncate的表

利用AUL在没有任何备份的情况下恢复被truncate的表

我们经常会因为各种误操作而truncate了表。

这时,如果有rman备份或者是闪回,可以恢复这个表,否则,基本判定这个表的数据为不可找回了。

但rman或者是闪回数据库都是把一个数据库恢复到一个点。

这样后面至truncate表之后这段时间内的新数据都会丢失了,也不是最完美的解决办法。

因此oracle的truncate跟linux的rm –rf *是有异曲同工之妙(害)。

那有没有工具或者是办法来解决这个问题呢,答案是有的。

首先是BBED,不过全二制码的操作,可直接对数据库的物理文件进行二进制修改,不过不是对Oracle非常自信的人,一般是不敢使用。

另外,Oracle自己开发一个dul的工具,然后淘宝的dcba团队跟恩墨的老熊分别进行了改造成了aul,可以方便的恢复数据,当然,你找他们完全是OK的,不过,¥,你懂的。

因为我们的所有的库都不是我们自己掌管,因为如果发生了truncate的情况,基本是找不回来的。

假如自己的一些QA库或者是可以远程可数据文件共享的,则可恢复。

下面我用一个测试环境来演示下。

假定我们现在truncate了一张表,模拟下:SQL> create table abc as select * from dba_objects where rownum<101;Table created.SQL> select count(*) from abc;COUNT(*)----------100SQL> select object_id from user_objects where object_name='ABC';OBJECT_ID----------18306SQL> ALTER SYSTEM CHECKPOINT;System altered.SQL> TRUNCATE TABLE ABC;Table truncated.SQL> ALTER SYSTEM CHECKPOINT;System altered.假设如果此表非常重要,必须要恢复。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档