flashback table与9i的flashback query相似,利用undo信息来恢复一个或者一些表到现在以前的一个时间点(一个快照)。Undo相关参数如下,需要确保AUM与足够的retention值。
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
首先要说明的是,flashback table不等于flashback query,所谓query,仅仅是查询以前的一个快照点而已,并不改变当前表的状态,而flashback table不一样,将改变当前表及附属对象一起回到以前的时间点。
其实9i的flashback query在10g中也有了新的变化,10g中可以简单的利用以下语句实现flashback query,而不再需要象9i那样需要调用DBMS_FLASHBACK包。
SELECT * FROM TABLENAME AS OF TIMESTAMP
TO_TIMESTAMP('2003-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
WHERE ……;
10g的flashback table有如下特性
· 在线操作
· 恢复到指定时间点或者SCN的任何数据.
· 自动恢复相关属性,如索引,触发器等
· 满足分布式的一致性
· 满足数据一致性,所有相关对象将自动一致
语法为:
FLASHBACK TABLE tablename TO TIMESTAMP (JUL-07-2003, 02:33:00)
FLASHBACK TABLE employee TO SCN 123456;
FLASHBACK TABLE t1 TO TIMESTAMP '2003-03-03 12:05:00' ENABLE TRIGGERS;
其中ENABLE TRIGGERS表示触发器恢复之后为enable状态,而默认为disable状态。
注意:如果需要flashback一个表,需要保证
需要有flashback any table的系统权限或者是该表的flashback对象权限。
需要有该表的SELECT, INSERT, DELETE, ALTER权限
必须保证该表ROW MOVEMENT
下面,我们用一个详细的例子来说明这个过程:
16:16:51 SQL> create user flash identified by flash;
User created.
16:17:04 SQL> grant connect,resource to flash;
Grant succeeded.
16:17:19 SQL> connect flash/flash;
Connected.
16:26:35 SQL> create table t1 as select * from all_objects;
Table created.
16:37:24 SQL> create table t2 as select * from t1;
Table created.
16:37:35 SQL> select count(*) from t1;
COUNT(*)
----------
38949
16:37:43 SQL> select count(*) from t2;
COUNT(*)
----------
38949
16:38:06 SQL> create index inx_test1 on T1 (object_name);
Index created.
16:39:55 SQL> create index inx_test2 on T1 (object_id);
Index created.
16:40:47 SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2004-04-06 16:41:18
以上获得一个时间戳,假定我们要恢复该表到这个时间,那么以下对该表的操作都将被前滚。
16:41:18 SQL> drop index inx_test1;
Index dropped.
16:41:33 SQL> delete from t1;
38949 rows deleted.
16:41:46 SQL> commit;
Commit complete.
16:41:49 SQL> truncate table t2;
Table truncated.
在以上的操作中,我们delete一个表,然后truncate一个表,下面,我们将来看看flashback table的效果,能恢复到什么程度
16:37:55 SQL> ALTER TABLE t1 ENABLE ROW MOVEMENT;
Table altered.
16:38:03 SQL> ALTER TABLE t2 ENABLE ROW MOVEMENT;
Table altered.
16:43:10 SQL> flashback table t1 TO TIMESTAMP to_timestamp('2004-04-06 16:41:18','yyyy-mm-dd hh24:mi:ss');
Flashback complete.
16:43:49 SQL> flashback table t2 TO TIMESTAMP to_timestamp('2004-04-06 16:41:18','yyyy-mm-dd hh24:mi:ss');
flashback table t2 TO TIMESTAMP to_timestamp('2004-04-06 16:41:18','yyyy-mm-dd hh24:mi:ss')
*
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed
我们可以发现,执行delete操作的表是可以恢复的,而执行truncate操作的表是不可以恢复的,这正好也说明了flashback table利用undo的结论。
看看我们的结果:
SQL> select count(*) from t1;
COUNT(*)
----------
38949
SQL> select count(*) from t2;
COUNT(*)
----------
0
SQL> select t.index_name from user_indexes t where t.table_name='T1';
INDEX_NAME
------------------------------
INX_TEST2
还可以看到,对于drop的索引,也是没有办法恢复的,因为drop并不记录undo,所以所谓索引的恢复,仅仅是相关索引树的改变而不能找回删除掉的索引。
分享到:
相关推荐
Oracle 数据恢复是指在数据丢失或损坏后,利用备份文件和归档日志等手段恢复数据的过程。恢复通常分为完全恢复和不完全恢复两种。 1. **完全恢复**:完全恢复是指将数据库恢复到最新状态的过程。这意味着从最近的一...
### Oracle通过快照进行数据恢复 #### 一、引言 在日常的数据库管理工作中,数据丢失或误删除是常见的问题之一。对于Oracle数据库来说,它提供了多种手段来进行数据恢复,其中一种有效的方式就是利用快照...
"Oracle数据恢复工具"就是专为此目的设计的解决方案,尤其针对Oracle 9i、10g、11g这三个版本。 Oracle数据恢复涉及到多个层面,包括物理恢复和逻辑恢复。物理恢复主要是针对数据文件、控制文件、重做日志文件等...
Oracle 数据恢复参考文档 Oracle 数据恢复是指在 Oracle 数据库崩溃或损坏时,通过各种方法和技术恢复数据库的过程。本文档旨在提供一种有效的 Oracle 数据恢复方法,以便快速恢复 Oracle 数据库。 Oracle 数据库...
以下是一些可能的数据恢复策略: 1. **闪回数据库**:如果启用并配置了闪回数据库,你可以利用这个功能恢复到误操作之前的状态。使用`FLASHBACK DATABASE TO TIMESTAMP`或`TO SCN`命令,但请注意,这可能会影响整个...
Veeam 备份恢复 Oracle 数据库详细配置文档 本文档旨在详细介绍如何使用 Veeam 备份恢复 Oracle 数据库的配置过程。该文档将指导读者从环境准备到推送 Oracle RMAN Plugin,再到创建备份作业和运行备份作业,最后...
Oracle数据库管理系统是世界上最广泛使用的数据库之一,其强大的数据恢复和管理功能为企业提供了可靠的数据保障。在日常操作中,有时可能会发生误操作,如误删除数据或锁定问题,本篇文章将详细讲解如何在Oracle中...
本文将详细介绍在没有备份的情况下,如何通过数据文件(DBF)来恢复Oracle数据库。 #### 二、准备工作 在开始恢复工作之前,我们需要做一些必要的准备工作: 1. **确认数据文件(DBF)存在**:首先确认原始数据库中的...
为了应对这种情况,Oracle提供了多种数据恢复的方法,包括闪回恢复、从回收站恢复等。本文将详细介绍这些方法,并给出具体的实施步骤。 #### 二、误删除数据恢复概述 ##### 2.1 闪回恢复 **闪回恢复**是Oracle提供...
- **第三方工具**:有些商业或开源的数据恢复工具可能能够帮助从数据文件中恢复数据,但这通常需要深入的数据库知识和专业技能。 **4. 预防措施** 为了避免类似问题,应采取以下预防措施: - 定期备份:完整数据库...
首先,理解Oracle的数据恢复机制至关重要。Oracle数据库提供了一套完整的恢复策略,包括归档日志模式、闪回功能、RMAN(恢复管理器)等工具。当数据被误删除后,我们可以借助这些工具来尝试恢复。 1. **闪回查询...
利用oracle提供的闪回方法,如果在删除数据后还没做大量的操作(只要保证被删除数据的块没被覆写),就可以利用闪回方式直接找回删除的数据。
在进行Oracle 19c RAC(Real Application Clusters)数据库的数据备份与恢复操作时,可能会遇到需要将RAC集群环境下的备份数据恢复到单实例环境中的场景。这种情况下,RMAN(Recovery Manager)作为Oracle提供的强大...
2. 数据恢复 Oracle数据库的恢复可分为完全恢复和不完全恢复。完全恢复能将数据库恢复到最新的状态,不丢失任何数据,而不完全恢复则将数据库恢复到某个时间点。恢复策略的选择取决于实际需求和已有的备份类型。 3....
本资料主要关注的是Oracle数据库的数据恢复,特别是涉及到归档日志(Archived Logs)在数据恢复过程中的重要性以及数据库的一些常用操作命令。 1. **归档日志与数据恢复**: - **归档日志**:Oracle数据库在进行...
首先,了解Oracle的数据恢复基础至关重要。Oracle数据库提供了Redo日志系统,用于记录所有对数据库的事务性更改。当数据被删除时,这些更改会被记录在Redo日志中。如果在删除数据之前创建了数据库快照或者进行了备份...
Oracle 恢复误删除数据 Oracle 数据库是企业级的关系数据库管理系统,广泛应用于各种行业。然而,在实际操作中,误删除数据是一种常见的错误。因此,了解如何恢复误删除数据是非常重要的。本文将详细介绍 Oracle ...
在Oracle11g中,数据恢复是一项关键功能,能够帮助用户在数据丢失或损坏时恢复到先前的正常状态。本篇文章将深入探讨如何通过DBF(数据文件)进行数据恢复。 首先,DBF文件在Oracle数据库中扮演着核心角色,它们...