oracle数据库闪回
14-第14章:闪回技术
第14章 闪回技术
朱广强 zgq007@
主要内容
闪回技术概述 闪回技术查询 闪回版本查询 闪回表 闪回事务查询 闪回数据库 闪回数据归档
2
闪回技术概述
flashback( 闪 回 ) 是 Oracle10g 里 新 加 入 的 一 个 非 常 有 用 的 一 个 特 性 。 Oracle数据库10g提供了五个新的闪回功能:闪回版本查询,闪回事务查询,闪 回删除,闪回表和闪回数据库。Oracle数据库11g提供了一个有趣的新的闪回功 能:闪回数据存档,它允许一个Oracle数据库管理员维护一个记录,对指定时 Nhomakorabea9
闪回删除(Flashback Drop)
闪回删除(Flashback Drop) 使用 Oracle Database 11g中的闪回表特性,可以毫不费力地恢复被意外删除的表。 如果用户或DBA意外地删除了一个非常重要的表,需要尽快地恢复。虽然Oracle 9i D atabase 推出了闪回查询选项的概念,以便检索过去某个时间点的数据,但它不能闪回 DDL 操作,如删除表的操作。唯一的恢复方法是在另一个数据库中使用表空间的时间点 恢复,然后使用导出/导入或其他方法,在当前数据库中重新创建表。这一过程需要 DB A 进行大量工作并且耗费宝贵的时间,更不用说还要使用另一个数据库进行克隆。 现在使用 Oracle Database 11g中的闪回表特性,它使得被删除表的恢复过程如同执行 几条语句一样简单。 闪回删除可恢复使用DROP TABLE语句删除的表,是一种对意外删除的表的恢复机制。 闪回删除功能的实现主要是通过Oracle 11g数据库中的“回收站”(Recycle Bin)技术实现 的。 在Oracle 11g数据库中,当执行DROP TABLE操作时,并不立即回收表及其关联对象的 空间,而是将它们重命名后放入一个称为“回收站”的逻辑容器中保存,直到用户决定 永久删除它们或存储该表的表空间存储空间不足时,表才真正被删除。 注意:为了使用闪回删除技术,必须开启数据库的“回收站”。
oracle中闪回语法
oracle中闪回语法全文共四篇示例,供读者参考第一篇示例:Oracle中的闪回功能是一种强大的特性,它可以让用户在数据库操作出现错误时快速恢复数据到之前的状态。
通过使用闪回功能,用户可以在不影响其他正在运行的事务的情况下,进行数据的回滚操作,使数据库恢复到之前一个确定的时间点。
在Oracle中,闪回功能主要通过闪回查询和闪回表来实现。
闪回查询可以让用户查看数据库在某个时间点的数据情况,而闪回表可以让用户将表恢复到之前的状态。
下面我们来详细介绍一下这两种闪回功能的具体语法和用法。
闪回查询的语法如下:```SELECT * FROM table_name AS OF TIMESTAMP timestamp;```这条SQL语句表示从指定的时间戳timestamp时刻查看table_name表的数据情况。
用户可以使用这种方式来查看数据库在某个具体时刻的数据,从而找出误操作的原因,或者进行数据对比和分析。
除了基本的闪回查询和闪回表功能之外,Oracle中还提供了其他一些灵活的闪回功能,比如闪回查询带条件、闪回表到某个SCN号、闪回事务等。
用户可以根据具体的需求和情况,选择合适的闪回方式进行操作。
需要注意的是,闪回功能在数据库恢复和数据修复方面有着非常重要的作用,但在使用时也需要谨慎操作,以避免对数据造成更大的影响。
在使用闪回功能之前,用户最好提前做好数据备份和日志记录,以防止操作出现意外情况。
Oracle中的闪回功能是一项非常实用和强大的特性,它可以帮助用户在数据库操作出现错误时快速恢复数据,有效避免数据丢失和影响。
通过灵活运用闪回功能,可以提高数据库的稳定性和安全性,保证数据的完整和可靠性。
希望本文的介绍能够对大家有所帮助,希望大家在使用Oracle数据库时,能够充分利用闪回功能,提升数据管理的效率和水平。
第二篇示例:Oracle中的闪回语法是一种非常强大的工具,它可以帮助用户轻松地还原数据库到之前的状态。
oracle数据库闪回相关语句介绍
: 清除回收站中的单个表:purge table emp 清除整个回收站:purge recyclebin 清除不同的对象回收站:purge user_recyclebin或purge dba_recyclebin 彻底删除一个table: SQL>drop table emp purge; --表不能被恢复了。
: Sql代码 flashback table emp to timestamp to_timestamp('20120709195000','YYYYMMDDHH24:MI:SS');
: Java代码 SQL>show recyclebin; SQL>drop table emp; SQL>show recyclebin; ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME EMP BIN$b+XkkO1RS5K10uKo9BfmuA==$0 TABLE 2012-11-07:15:30:47
这篇文章主要给大家介绍了关于oracle中spool命令的使用方法文中通过图文介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小编来一起学习学习吧
oracle数 据 库 闪 回 相 关 语 句 介 绍
:
闪回操作前启用行移动功能
alter table emp enable row movement;
Oracle闪回查询恢复delete删除数据
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闪回查询
Oracle闪回查询查找 SCN , Time对应关系: select to_char(sysdate,’yyyy-mm-ddhh24:mi:ss’),to_char(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) AS SCN from dual;通过时间flashback query数据: SELECT * FROM test AS OF TIMESTAMP TO_TIMESTAMP(’2007-04-09 11:25:17′, ‘YYYY-MM-DD HH:MI:SS’);通过SCN 闪回数据: SELECT * FROM test AS OF SCN 23565583;Oracle Flashback Database特性允许通过语句Flashback Database语句,让数据库前滚到当前的前⼀个时间点或者SCN,⽽不需要做时间点的恢复。
闪回数据库可以迅速将数据库回到误操作或⼈为错误的前⼀个时间点,如Word中的"撤消"操作,可以不利⽤就快速的实现基于时间点的恢复。
Oracle通过创建新的Flashback Logs(闪回⽇志),记录数据库的闪回操作。
如果希望能闪回数据库,需要设置如下参数:DB_RECOVER_FILE_DEST⽇志的存放位置, DB_RECOVER_FILE_DEST_SIZE恢复区的⼤⼩。
在创建数据库的时候,Oracle将⾃动创建恢复区,但默认是关闭的,需要执⾏ alter database flashback on命令。
SQL>flashback database to time to_timestamp(xxx);SQL>flashback database to scn xxx ;Oracle Flashback Table特性允许利⽤Flashback Table语句,确保闪回到表的前⼀个时间点。
oracle数据库数据备份清理机制
oracle数据库数据备份清理机制
Oracle数据库有多种备份和恢复机制可以使用,其中包括:
1. 数据库完整备份:使用RMAN (Recovery Manager)工具进行
数据库完整备份。
RMAN可以创建一个完整备份集,包含数
据库中的所有数据文件、日志文件和控制文件。
通过使用RMAN进行完整备份,可以轻松地恢复数据库到一个特定的
时间点。
2. 增量备份:使用RMAN进行增量备份,只备份自上次备份
以来发生更改的数据块。
这种备份机制可以减少备份的时间和存储空间,但在恢复时需要借助完整备份。
3. 归档日志备份:在归档模式下,Oracle将数据库的已提交事
务记录到归档日志中。
通过备份归档日志,可以实现点-in-
time的恢复和恢复到特定的时间点。
4. 数据库闪回:Oracle提供了闪回数据库(Flashback Database)功能,可以快速地将整个数据库恢复到一个特定的时间点,而不是单独恢复数据文件。
这种机制可以避免备份和恢复的过程。
在备份完成后,可以根据存储空间和备份策略的要求来清理备份。
可以使用RMAN的DELETE命令来删除不需要的备份。
可以使用RMAN的RETENTION POLICY来设置RMAN应保
留的备份的时间段。
oracle 数据库闪回查询语句
Oracle数据库提供了闪回查询(Flashback Query)的功能,它允许你查询表在过去某个时间点的数据。
这个功能对于回溯历史数据或者查找误操作引起的数据变更非常有用。
以下是一些 Oracle 数据库中的闪回查询语句的示例:
1. 查询过去某个时间点的数据:
上述语句中,your_table是表的名称,TIMESTAMP后面的字符串表示你希望查询的具体时间点。
2. 查询过去某个 SCN(系统更改号)的数据:
这里的1234567是你希望查询的 SCN 号。
3. 查询在过去一定时间段内的数据变化:
上述语句中,VERSIONS BETWEEN后面的两个时间戳表示你希望查询的时间段内的数据版本。
4. 使用 AS OF SCN 语法查看历史数据:
这个语句允许你在历史版本中进行条件过滤。
请注意,使用闪回查询功能需要相应的权限,而且 Oracle 数据库的
UNDO_RETENTION参数设置也可能对你能够查询的历史时间范围产生影响。
确保在使用这些功能时了解相关的安全和配置考虑。
解决oracle闪回区存储空间耗尽问题的方法
解决oracle闪回区存储空间耗尽问题的方法
解决Oracle闪回区存储空间耗尽问题的方法如下:
1.通过增加闪回区的存储空间来解决空间耗尽的问题。
可以通过以
下步骤来完成:ALTER DATABASE FLASHBACK ON、ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=[G|M]1。
2.把数据库启动到mount状态并把闪回空间改大。
可以通过以下步
骤来完成:SQL>startup mount、SQL>alter system set db_recovery_file_dest_size=10G scope=both、SQL>alter database open。
3.用RMAN命令删除老的日志文件。
可以通过以下步骤来完成:操
作系统命令,删除物理文件(rm -vf ) 进入rman、RMAN>crosscheck archivelog all、RMAN>delete expired archivelog all、SQL>select (space_used/space_limit)*100 from v$recovery_file_dest; 查看闪回空间使用率查看alert告警,以及oracle给出的处理建议。
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; 表被截断。
oracle中闪回语法
在Oracle数据库中,闪回(Flashback)是一种用于恢复数据库到特定时间点的功能。
它允许您撤销数据库更改,并返回到过去的状态。
通过使用闪回语法,您可以轻松地恢复丢失的数据或解决数据不一致问题。
闪回语法的基本格式如下:```scssFLASHBACK table_name TO TIMESTAMP;```其中,`table_name`是要执行闪回操作的表名,`TIMESTAMP`是要返回到的时间戳。
时间戳可以是日期时间值,也可以是系统保留的关键字,如`SYSDATE-1`表示返回到一分钟前的时间状态。
以下是使用闪回语法的一些常见场景和用法:1. 恢复丢失的数据:如果您不小心删除了某个表中的数据,可以使用闪回语法将其恢复到删除之前的状态。
例如:```sqlFLASHBACK table_name TO SYSDATE;```这将返回到表被删除之前的时间状态。
2. 解决数据不一致问题:如果您发现某个表中的数据不一致,可以使用闪回语法将其恢复到一致的状态。
例如,如果您发现某个事务导致数据发生了错误更改,可以使用闪回语法将表返回到事务开始之前的状态。
3. 历史数据查询:如果您需要查询历史数据,可以使用闪回表(Flashback Table)功能。
通过将表设置为闪回表,您可以查询过去的时间戳数据,而无需创建额外的历史表。
4. 数据备份恢复:如果您需要备份数据库并恢复到过去的时间点,可以使用闪回数据库(Flashback Database)功能。
这将整个数据库视为一个单独的逻辑对象,并提供对过去时间和数据点的访问权限。
需要注意的是,使用闪回语法需要满足一些前提条件,例如表必须具有可回滚的物化视图或物化视图刷新日志(MMMF)的约束。
此外,某些表类型(如分区表)可能需要额外的设置才能使用闪回语法。
总之,闪回语法是Oracle数据库中一个非常有用的功能,它可以帮助您轻松地恢复丢失的数据、解决数据不一致问题以及进行历史数据查询。
oracle数据库执行闪回恢复数据
• 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闪回介绍
flashback(闪回)是Oracle10g里新加入的一个非常有用的一个feature。
通过flashback的功能,我们可以避开传统的recover 的方式去恢复一些我们进行的误操作。
不过相当recovery来说。
这两个还是有差别的。
1. recovery的恢复是基于数据文件的,先要restore备份好的数据文件,flashback是基于flashback log文件的,所以基点不一样,recovery是基于备份的时间上的,可以恢复到备份至完整归档的任何一个时刻,而flashback是基于flashback log的,而log的存储时效是受限于db_flashback_retention_target这个参数的(以分钟为单位,默认1440分钟,即24小时)。
2. recovery的恢复是应用redo记录的,所以会对期间我们不关心的数据也进行修补,而flashback可以只针对我们关心的数据进行修补。
3. recovery的恢复可以恢复数据文件物理损坏或者日志物理损坏,而flashback是基于flashback log的,只能处理由于用户的错误的逻辑操作,比如删除了表,删除了用户等。
由此可见,其实flashback和recovery的恢复还是有不少本质的差别的,因此我们要针对着相应的情况来进行相应的选择。
flashback具体来说有4种常用的操作,这几种操作虽然都冠以flashback,但是还是有着一些较大的差别,1、flashback database(闪回数据库)对应flashback database来说,一般用来处理误删除了user或者一些错误的数据操作。
要使用flash database的特性。
我们一定要启动flashback功能,SQL>alter database flashback on; 如果要关闭使用alter database flashback off;同时要配置和检查参数db_flashback_retention_target,这个是控制flashback log的保留时间的参数,默认是1440分钟,即24小时。
oracle 闪回实验
Oracle 闪回探秘----数据闪回实验文档falshback----------------------------------------A 闪回查询可到行级create table t (id number, name varchar2(30));insert into t values (1, 'yangtingkun');DELETE FROM t;COMMIT;--功能:取得误操作DML(Delete、Update、Insert)前某一时间点数据库的映像视图,恢复表至指定历史时间的数据。
--原理:直接利用回滚段中的旧数据构造某一刻的一致性数据版本(历史快照)。
完全依赖于自动回滚段管理(AUM),使用闪回的一个前提是表不能进行DDL 操作。
--不但不能对DDL 操作进行回闪,而且,也无法闪回到DDL 操作以前的数据了。
--时间限制:可以闪回的最大时间和回滚空间有关。
如果使用了自动管理回滚表空间,那么UNDO_RETENTION 给出了闪回支持的最小时间。
--系统默认为最小时间设置为900s(show parameter undo_retention;)也就是说,FLASHBACK 最少可以支持UNDO_RETENTION(AUM 自动撤销管理)--给出的时间,如果系统比较闲,则可以闪回更长的时间。
--闪回的方法select sysdate 时间, timestamp_to_scn(sysdate) SCN from dual; ---获取当前时间和系统的SCN号:2012-3-10 21:17:12 3773777 --367 1291 2012-3-10 21:23:19 3773906 --127 451 2012-3-10 21:25:26 3773951 ---134 571 2012-3-10 21:27:40 3774008insert into t select * from t AS OF timestampto_timestamp ('2012-02-29 20:02:22','yyyy-mm-dd hh24:mi:ss') ;--闪回查询历史快照数据并恢复历史数据。
Oracle的闪回特性
Oracle的闪回特性在Oracle 9i之前的版本中,如果用户因为误操作delete或update了数据并最终提交,为了恢复这些用户错误,我们必须通过逻辑备份或者物理备份进行恢复来纠正这些错误,这种方法是极其复杂和低效的。
为了提高数据库的可用性,简化用户的数据恢复,从Oracle 9i开始,Oracle将闪回flashback引入到数据库中,闪回功能类似播放机中的回退功能,通过回退,我们可以找会正确的数据,纠正犯下的错误。
从Oracle 9i到Oracle 10g以及Oracle 11g,Oracle在不停地增加和强化闪回功能,在这一章中,我们将全面介绍Oracle的闪回特性。
1.Oracle 9i的闪回查询特性从Oracle 9i开始Oracle 引入了闪回查询(Flashback Query)的特性,通过闪回查询我们可以按照时间戳或SCN来向前查询,获取修改之前的数据镜像,再通过insert等操作就可以恢复数据。
闪回查询依赖于回滚段中存储的数据前镜像,在Oracle 9i以前的版本中,通常只要事务提交后,前镜像数据就可以被覆盖,空间可以重用;在Oracle 9i中Oracle引入了自动回滚段管理(Automatic Undo Management,简称AUM)的新特性,在AUM模式下,我们可以通过调整undo_retention参数来设置数据库UNDO信息的保留时间,只要前镜像没有被覆盖,那么闪回就是可能的,但是需要注意的是,UNDO信息的保留还同UNDO表空间中的空间有关,如果空间紧张,为了满足事务的需要,非会动的前镜像信息是可以被覆盖的。
可以使用select 语句的as of子句来进行闪回查询,具体语法如下:As of scn/timestamp expr通过关键词as of 可以对表、视图、物化视图进行Flashback Query,可以指定SCN或者timestamp,其中timestamp是9i中引入的新的数据类型,精确到毫秒的时间单位。
ORACLE查询闪回
ORACLE查询闪回在Oracle中如果错误地提交了修改操作,然后想查看修改前的值,这时候可以使用查询闪回(query flashback)。
查询闪回可以根据根据一个时间值或者系统变更号(SCN)进行。
执行闪回操作,要使用户具有EXECUTE权限,下面以sys身份登录,并授权给store用户一、时间查询闪回用户store登录,查询customers表select * from customers;然后update customers set LAST_NAME=LAST_NAME || 's' ;commit;可以看到LAST_NAME被修改了,现在如何查看修改前的数据呢?使用sqlplus store登录,执行如下语句,就可以查看修改之前LAST_NAME 没有加“s”DBMS_FLASHBACK.ENABLE_AT_TIME() 该过程将数据库状态闪回到一个特定的时间值。
DBMS_FLASHBACK.ENABLE_AT_TIME(SYSDATE-10/1440 ) 也就是闪存到10分钟之前。
现在执行任何查询就将显示10分钟之前的状态。
但是在pl/sql中查询的话还是现在现在的状态。
所以可以从这里查看之前数据,然后在pl/sql修改回原来的值。
禁用闪回 EXECUTE DBMS_FLASHBACK.DISABLE();这些命令只能在sqlplus 中使用,在pl/sql中不能使用。
二、系统变更号查询闪回根据SCN进行闪回操作比根据时间进行要更精确,因为数据库就是使用SCN来跟踪数据库的变化。
获得当前SCN命令:通过下面语句可以闪回到这个SCN的状态EXECUTE DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(:CURRENT_SCN); 禁用闪回操作EXECUTE DBMS_FLASHBACK.DISABLE();。
oracle数据库闪回目录空间不足导致dropusercascade报错
oracle数据库闪回目录空间不足导致dropusercascade报错闪回目录空间不足导致drop user cascade报错imp数据的过程中出错,所有drop user gspx cascade,但一直无法执行完毕,无奈的关闭终端,重新连接数据库后,再次执行drop user gspx cascade ,这次报错如下:第1 行出现错误:ORA-01940: cannot drop a user that is currently connected 从v$session中查看,没有与gspx用户相关的sessionconn gspx/gspx 又报错如下:普通连接报错:ORA-00257: archiver error. Connect internal only,until freed 系统不能进行归档:SQL> select * from v$log;GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS---------- ---------- ---------- ---------- ---------- --- ----------------FIRST_CHANGE# FIRST_TIME------------- ---------------1 1 10 52428800 1 NO INACTIVE15711794 31-MAY-072 1 11 52428800 1 NO CURRENT15730194 31-MAY-073 1 9 52428800 1 NO INACTIVEARC字段的值都是NO,表明数据库无法自动归档。
检查归档空间使用情况:SQL> select * from v$flash_recovery_area_usage;FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES------------ ------------------ ------------------------- ---------------CONTROLFILE 0 0 0ONLINELOG 0 0 0ARCHIVELOG 99.99 0 527BACKUPPIECE 0 0 0IMAGECOPY 0 0 0FLASHBACKLOG 0查看闪回目录的路径以及空间配额SQL> show parameter db_recovery_file_destNAME TYPE V ALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string /opt/oracle/flash_recovery_are adb_recovery_file_dest_size big integer 2G最终确认,因为归档日志的路径是在闪回区目录内,而闪回目录安装时默认2G大小,而归档日志一直都没有备份删除,导致当drop user 时,新增的日志无法归档,这样数据库就会自动挂起,无法执行命令。
sql闪回查询语句
sql闪回查询语句SQL闪回查询(Flashback Query)是Oracle数据库提供的一项功能,它允许用户查询过去某个时间点的数据。
这种技术基于Oracle 的闪回技术(Flashback Technology),该技术利用撤销数据来获取之前的数据版本。
闪回查询非常有用于误操作(比如错误地更新或删除了数据)之后的数据恢复,也可用于历史数据分析。
要执行闪回查询,你需要使用`AS OF`子句指定一个时间戳。
以下是一些示例:1. **查询特定时间点的数据**:```sqlSELECT *FROM table_nameAS OF TIMESTAMPTO_TIMESTAMP('2023-04-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS');```2. **查询特定事务之前的数据**:```sqlSELECT *FROM table_nameAS OF SCN 123456;```3. **查询特定事务之后的数据**:```sqlSELECT *FROM table_nameAS OF SCN 123457;```在上述语句中,`table_name`应该替换为你想要查询的表名,而`TO_TIMESTAMP`函数和SCN号(System Change Number,系统变更号)则分别用来指定时间点和事务编号。
需要注意的是,要使闪回查询工作,必须确保数据库的撤销保留策略允许访问到所需的历史数据。
此外,由于闪回查询可能涉及大量历史数据的扫描,其性能可能会受到影响。
因此,在进行此类查询时,应评估系统负载和性能影响。
oracle 数据库闪回查询语句
oracle 数据库闪回查询语句摘要:1.闪回查询概述2.闪回查询的类型3.闪回查询的语法与示例4.闪回查询的应用场景5.总结正文:1.闪回查询概述Oracle数据库闪回查询语句是Oracle数据库提供的一种非易失性内存(NVM)技术,它允许用户在不影响现有事务的情况下,查询过去的数据状态。
这种技术可以用来查询在某个时间点之前的表数据,或者查询在某个时间点之前已经删除的记录。
闪回查询能够提高数据恢复的速度和准确性,同时减少数据恢复过程中的风险。
2.闪回查询的类型Oracle数据库闪回查询语句主要有以下两种类型:a.闪回查询(Flashback Query)闪回查询用于查询过去的数据状态,可以查询某个时间点之前的表数据,或者查询在某个时间点之前已经删除的记录。
b.闪回事务查询(Flashback Transaction Query)闪回事务查询用于查询在某个事务开始之前或结束之后的表数据。
这种查询可以用来查看事务对表数据的影响,以及回滚事务。
3.闪回查询的语法与示例以下是闪回查询的语法:```SELECT column1, column2, ...FROM table_name AS OF TIMESTAMP TO_TIMESTAMP("2022-01-01 12:00:00", "YYYY-MM-DD HH24:MI:SS")WHERE condition;```示例:```SELECT * FROM employees AS OF TIMESTAMPTO_TIMESTAMP("2021-12-31 11:00:00", "YYYY-MM-DD HH24:MI:SS") WHERE department_id = 100;```该查询将返回在2021年12月31日11:00:00之前的员工记录,且部门ID为100的员工信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
而闪回技术提供了从逻辑错误中恢复的更有效和更快的方法,多数情况下,在用这种技术进行恢复时数据库仍然联机并对用户可用。此外,闪回技术允许选择性地复原某些对象。使用传统的技术,从某种意义上说某有选择,只能恢复整个数据库。
SQL> conn rocky/rocky
已连接。
SQL> select * from emp;
EID NAME SEX ID
---------- ---------- ----- ----------
aa bb B 11
闪回数据库
闪回数据库的条件
1、 数据库日志系统必须在归档模式下。
2、 如果丢失了一个数据文件,或者由于某种原因不能使用特定的数据文件,则不能使用闪回数据库进行恢复。
3、 如果已经在想闪回的时间范围内复原或重建了一个控制文件,则不能使用闪回数据库特性。
4、 不能闪回一个数据库到RESETLOGS操作之前。
def hykdddd
defgdbbea hykdddd
SQL>
注意:回收站中的对象只能进行查询,任何的DML操作将不起作用。
恢复被删除的表
只要回收站中列出被删除的表,就可以使用命令恢复它。
FLASHBACK TABLE table_name TO BEFORE DROP
还有:
清除整个回收站:purge recyclebin
除回收站中的单个表:purge table test_drop
上述命令将从USERS表空间中删除单一用户scott的所有对象(以及存在于其他表空间中的所有依赖对象)。
必须的权限
为使用FLASHBACK TABLE TABLE_NAME TO BEFORE DROP命令取回一个表,你必须拥有它或者在具有此表的删除权限(DROP TABLESPACE或者DROP ANY TABLE)。为使用PURGE命令,需要类似的权限。为了查询回收站中的对象,必须具有SELECT权限和FLASHBACK权限。
如果需要真正的删除掉一张表,那就需要清空回收站。
u 用户使用PURGE命令(DROP TABLE table_name PURGE)从回收站中永久删除对象
u Oracle迫于空间压力(如果Oracle在表空间中没有足够的可用空间创建新对象或不能为现有对象扩展更过空间时)自动删除回收站中的对象。
闪回删除-Flashback Table
Oracle Flashback Table特性允许利用Flashback Table语句,确保闪回到表的前一个时间点。与Oracle 9i中的Flashback Query相似,利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照)。要注意的是,Flashback Table不等于Flashback Query,Flashback Query仅仅是查询以前的一个快照点而已,并不改变当前表的状态,而Flashback Table将改变当前表及附属对象一起回到以前的时间点
闪回完成。
SQL> select * from emp;
EID NAME SEX ID
---------- ---------- ----- ----------
aa bb B 11
SQL>
这样就可对误删除表进行恢复;
SQL> select * from "BIN$FTNAGvFJS6K7oLxGNemsfg==$0";
M1 M2 N1
---------- ---------- ----------
abc xyz
def hyk
abc xyzabc
SQL> drop table emp;
表已删除。
SQL> select * from emp;
select * from emp
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> flashback table emp to before drop;
BIN$ugr+dcX2R1Kk6imZ2wEQOQ==$0 2007-08-10:21:33:43 5456762 54660
在Oracle10g Release 2版本中,可以使用RECYCLEBIN初始化参数关闭闪回删除功能。默认是,此参数设置为ON,表示所有删除的表都要进入回收站,可以利用闪回删除特性恢复它们。通过设置此参数的值为OFF,关闭闪回删除特性,表在被删除后不进入回收站。
语法:
flashback table tablename to timestamp xxx或
flashback table tablename to scn xxx
注意:如果需要闪回一个表,需要以下条件:
·需要有flashback any table的系统权限或者是该表的flashback对象权限;
闪回如何工作?
在Oracle10g之前,执行DROP TABLE命令将导致表以及其所有依赖对象立即被删除,并且表段中所有相关的空间都被释放回数据库。
在Oracle10g中,表及其依赖对象不会被立即删除,而是被重命名了,他们仍然保留在原位置,Oracle将根据空间紧迫情况尽可能长的保留它们。在Oracle10中,有一个回收站的概念:回收站是一个逻辑容器(一个数据字典表,它保存被删除的表的相关信息,如它们的新名字和原来的名字等)信息。
·需要有该表的select,insert,delete,alter权限;
·必须保证该表row movement,否则提示因为未启用行移动功能, 不能闪回表。
这时alter table Test enable row Movement,即可保证表row movement
例:执行将test表闪回到2008年12月25日下午19点。
SQL>flashback table test to timestamp to_timestamp('2008-12-25 19:52:00','yyyy-mm-dd hh24:mi:ss');
闪回删除-Flashback Drop
闪回删除特性提供了恢复被意外删除的表(或索引)而不丢失最近事务的一种手段。在Oracle10g中,在删除一个表时,Oracle并不立即丢弃它。而是把它放在回收站中列出该表以及其依赖的对象,并保留尽可能长的时间。如果你很快意识到自己犯了错误,可以简单的使用一些命令即可找回被你删除的表。
------------------------------ ------------------- ---------- ------------
这样就找不到表了。
我们在删除的同时,也从回收站情况了它。
什么是回收站?
回收站是一个逻辑结构,一个名为RECYCLEBIN的数据字典。你可以通过USER_RECYCLEBIN视图,查看自己在回收站中当前登记的内容。
SQL> desc recyclebin;
通过上述命令可以看到回收站的系统字段
如果想查看回收站中的内容可以使用
SQL> select object_name,droptime,dropscn,purge_object from recyclebin;
OBJECT_NAME DROPTIME DROPSCN PURGE_OBJECT
2、 表级闪回
(1) 闪回表:复原一个表到某个时间点,或者到指定的SCN而不用恢复数据文件。此特性使用DML更改撤销表中的更改。闪回表特性依赖于撤销数据。
(2)闪回删除:允许倒退一条DROP TABLE语句的结果,而不用进行时间点恢复。闪回删除特性使用回收站复原被删除的表。
3、 数据库级闪回
racle10g中,可以在行、表和数据库级别使用闪回技术,具体分类如下:
1、 行级闪回
可以使用行闪回技术撤销对个别行的错误更改。有三种行级闪回技术,他们全都依赖于存储在撤销表空间中的撤销数据。
(1) 闪回查询:允许根据时间点或SCN(System Change Number)查看旧的行数据。可以查看更旧的数据,并且,如果需要可以检索它并撤销错误的更改。
(2) 闪回版本查询:允许查看相同行在一段时间内的所有版本,以便可撤销逻辑错误。它还可以提供更改的审计历史,允许比较当前数据与历史数据而不用执行DML活动。
(3) 闪回事务查询:允许查看事务级所做的更改。此技术帮助分析和审计事务,例如,一个批作业执行了两次,你想确定哪些对象受到影响等。使用此技术可撤销指定时间段内某个事务所做的更改。
闪回数据库特性允许复原整个数据库到某个时间点,从而撤销自该时间以来的所有更改。闪回数据库主要利用闪回日志检索数据块的更旧的版本,它也依赖归档重做日志完全地恢复数据库,不用复原数据文件和执行传统的介质恢复。
闪回和传统的恢复技术对比
与传统恢复技术不同,闪回技术的主要目的不是从介质丢失中恢复,而是从人为错误中恢复。例如:用户可能错误的删除了某个表或者错误的更改了某个表的数据。这时候你想撤销你刚才的操作。
或者通过dba_recyclebin视图也可以查看回收站中的内容
SQL> select owner,original_name,object_name,ts_name,droptime from dba_recyclebin;
OWNER ORIGINAL_NAME OBJECT_NAME TS_NAME
SCOTT SALGRADE BIN$myTqyz98SN6Oi6IAmPA4LA==$0 USERS