oracle Flashback详解
oracle中闪回语法
oracle中闪回语法全文共四篇示例,供读者参考第一篇示例:Oracle中的闪回功能是一种强大的特性,它可以让用户在数据库操作出现错误时快速恢复数据到之前的状态。
通过使用闪回功能,用户可以在不影响其他正在运行的事务的情况下,进行数据的回滚操作,使数据库恢复到之前一个确定的时间点。
在Oracle中,闪回功能主要通过闪回查询和闪回表来实现。
闪回查询可以让用户查看数据库在某个时间点的数据情况,而闪回表可以让用户将表恢复到之前的状态。
下面我们来详细介绍一下这两种闪回功能的具体语法和用法。
闪回查询的语法如下:```SELECT * FROM table_name AS OF TIMESTAMP timestamp;```这条SQL语句表示从指定的时间戳timestamp时刻查看table_name表的数据情况。
用户可以使用这种方式来查看数据库在某个具体时刻的数据,从而找出误操作的原因,或者进行数据对比和分析。
除了基本的闪回查询和闪回表功能之外,Oracle中还提供了其他一些灵活的闪回功能,比如闪回查询带条件、闪回表到某个SCN号、闪回事务等。
用户可以根据具体的需求和情况,选择合适的闪回方式进行操作。
需要注意的是,闪回功能在数据库恢复和数据修复方面有着非常重要的作用,但在使用时也需要谨慎操作,以避免对数据造成更大的影响。
在使用闪回功能之前,用户最好提前做好数据备份和日志记录,以防止操作出现意外情况。
Oracle中的闪回功能是一项非常实用和强大的特性,它可以帮助用户在数据库操作出现错误时快速恢复数据,有效避免数据丢失和影响。
通过灵活运用闪回功能,可以提高数据库的稳定性和安全性,保证数据的完整和可靠性。
希望本文的介绍能够对大家有所帮助,希望大家在使用Oracle数据库时,能够充分利用闪回功能,提升数据管理的效率和水平。
第二篇示例:Oracle中的闪回语法是一种非常强大的工具,它可以帮助用户轻松地还原数据库到之前的状态。
oracle flashback table语法
oracle flashback table语法
OracleFlashbackTable语法是一种用于恢复或查看历史表数据
的强大工具。
使用FlashbackTable语法可以在数据库中快速恢复表
数据,而无需执行复杂的恢复过程。
Flashback Table语法基于Oracle Database的闪回技术,它能够在不影响当前事务的情况下,快速恢复表的历史数据。
Flashback Table语法可以通过以下方式实现:
1. 使用FLASHBACK TABLE语句恢复表数据:
FLASHBACK TABLE table_name TO TIMESTAMP
(timestamp_value);
该语句将指定表恢复到指定时间戳的状态。
2. 使用FLASHBACK TABLE语句查询表历史数据:
FLASHBACK TABLE table_name TO SCN (scn_value);
该语句将查询指定表在指定系统变更号(SCN)之前的历史数据。
Flashback Table语法还可以使用其他参数来控制恢复的数据量和恢复的范围。
例如,您可以使用如下参数:
- 查询限制参数:通过限制查询范围来加快查询速度。
- 历史数据保留参数:用于控制历史数据在数据库中的保留时间。
- 恢复操作日志参数:用于记录Flashback Table操作的详细信息。
总之,Oracle Flashback Table语法是一种功能强大的数据库
工具。
它可以帮助您快速恢复表数据,从而提高数据库恢复的效率和
准确性。
oracle flash back原理
oracle flash back原理Oracle Flashback是一种数据库恢复和查询技术,它可以基于时间或者特定条件,将数据库恢复到过去的某个状态。
本文将详细介绍Oracle Flashback的原理和实现方式。
现代数据库面临着日益增长的数据量和日志的快速变化。
数据库管理员需要能够在数据损坏或删除时快速恢复数据库,并且能够进行详细的查询和分析操作。
Oracle Flashback技术提供了一种可靠且高效的解决方案,使管理员能够快速恢复数据库,追溯数据变更历史和查询特定时刻的数据状态。
【1. Oracle Flashback的基本原理】Oracle Flashback的原理是通过使用Undo数据和Redo数据来实现数据的恢复和查询。
Undo数据是事务发生前的数据副本,也称为回滚段。
当一个事务发生时,Oracle数据库将当前的数据状态复制一份,称为Undo数据。
在事务执行过程中,所有的修改操作都是在Undo数据上进行的,并且还会保存被修改的数据的一个副本。
这样,当需要恢复到过去的某个时刻时,可通过Undo数据将数据库还原到该时刻的状态。
Redo数据是在数据库中发生修改操作时,记录这些操作的数据。
当数据库发生故障或者需要进行恢复时,通过Redo数据可以将数据库恢复到最近的一次备份或者故障前的状态。
【2. Oracle Flashback的实现方式】Oracle提供了多种方式来实现Flashback技术,包括Flashback Query、Flashback Transaction、Flashback Table、Flashback Database等。
下面分别介绍这些实现方式的原理和使用方法。
(1) Flashback QueryFlashback Query是一种基于时间点查询的技术,可以在一个事务中查询到过去某个时间点的数据库状态。
它通过读取Undo数据和Redo 数据,将数据库恢复到指定时间点的状态,然后执行查询操作。
oracle查询历史insert语句
oracle查询历史insert语句Oracle数据库中,我们可以使用Flashback来查询历史insert语句。
Flashback是Oracle数据库提供的一种用于快速查询历史事务的技术,它能够在不查询日志的情况下还原数据表在过去的某个时间点的数据情况。
那么怎么样使用Flashback查询历史insert语句呢?以下是使用Flashback来查询历史insert语句的步骤:步骤一:确认当前数据库上是否启用了Flashback功能。
在Oracle数据库中开启Flashback功能需要满足以下条件:a.已经打开数据库的归档模式b.数据库没有被drop掉c.数据库没有被清空d.表没有被trunc掉若当前数据库上没有启用Flashback功能,可以按以下步骤进行开启:a.将数据库的归档模式打开SQL> shutdown immediate;SQL> startup mount;SQL> alter database archivelog;SQL> alter database open;b.开启Flashback功能SQL> alter database flashback on;步骤二:查询历史insert语句在确定当前数据库已经启用Flashback功能之后,即可进入查询历史insert语句的操作过程。
具体步骤如下:首先,我们需要确定查询的表名和查询的时间点,比如我们要查询的表名为“student”,查询的时间点为“2021-01-01 10:00:00”。
接下来,我们可以使用如下的SQL语句来查询历史insert语句:SQL> SELECT VERSIONS_XID, VERSIONS_STARTTIME, VERSIONS_OPERATION, SQL_REDOFROM FLASHBACK_TRANSACTION_QUERYWHERE TABLE_NAME = 'student'AND VERSIONS_STARTTIME BETWEEN TO_TIMESTAMP('2021-01-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS')AND TO_TIMESTAMP('2021-01-01 11:00:00', 'YYYY-MM-DDHH24:MI:SS')AND VERSIONS_OPERATION = 'INSERT';注意:上述查询语句中,FLASHBACK_TRANSACTION_QUERY是一个可以在Oracle数据库原始安装时自动创建的视图,用于查询历史事务。
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中使用Flashback
在Oracle中使用FlashbackFlashback是Oracle数据库中的一项功能,它允许用户在不恢复数据库的情况下,将数据库对象和数据回滚到之前的状态。
Flashback技术提供了一种简单而快速的方式来修复因错误操作而导致的数据丢失或破坏。
Oracle提供了多种Flashback功能,包括Flashback Query、Flashback Version Query、Flashback Table和Flashback Transaction Query等。
首先,Flashback Query是一种查询数据历史状态的功能。
通过使用AS OF子句,可以查询特定时间点或系统变化号(SCN)之前的数据库状态。
这对于检查之前的数据状态以及确定问题源头非常有用。
例如,以下查询将返回在特定时间点之前的员工表数据:```SELECT * FROM employeesASOFTIMESTAMPTO_TIMESTAMP('2024-01-0109:00:00','YYYY-MM-DDHH24:MI:SS');```其次,Flashback Version Query是一种查询特定数据行在历史上的不同版本的功能。
通过使用VERSIONS BETWEEN子句,可以查询一些时间范围内数据行的所有版本。
这对于恢复误删除或误修改的数据非常有用。
例如,以下查询将返回在时间段内特定员工ID的所有数据行版本:```SELECTVERSIONSSTARTSCN,VERSIONSSTARTTIME,VERSIONSENDSCN,VERS IONSENDTIME,*FROM employees VERSIONS BETWEEN TIMESTAMPTO_TIMESTAMP('2024-01-0109:00:00','YYYY-MM-DDHH24:MI:SS')ANDTO_TIMESTAMP('2024-01-3109:00:00','YYYY-MM-DDHH24:MI:SS')WHERE employee_id = 100;```第三,Flashback Table是一种将整个表恢复到之前状态的功能。
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数据库中,闪回(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 Flashback 技术 总结
Oracle Flashback 技术总结Flashback 技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTON参数。
要使用flashback 的特性,必须启用自动撤销管理表空间。
在Oracle 10g中,Flash back家族分为以下成员:Flashback Database,Flashback Drop,Flashback Query(分Flashback Query,Flashback V ersion Query,Flashback Transaction Query 三种) 和Flashback Table。
一.Flashback DatabaseFlashback Database 功能非常类似与RMAN的不完全恢复,它可以把整个数据库回退到过去的某个时点的状态,这个功能依赖于Flashback log 日志。
比RMAN更快速和高效。
因此Flashback Database 可以看作是不完全恢复的替代技术。
但它也有某些限制:1. Flashback Database 不能解决Media Failure,这种错误RMAN恢复仍是唯一选择2. 如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时不能用Flashback Database技术回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore 出来,然后利用Flashback Database 执行剩下的Flashback Datbase。
3. 如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用Flashback Database。
4. 使用Flashback Database锁能恢复到的最早的SCN,取决与Flashback Log中记录的最早SCN。
Flashback Database 架构Flashback Database 整个架构包括一个进程Recover Writer(RVWR)后台进程,Flashback Database Log日志和Flash Recovery Area。
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 flashback用法
oracle flashback用法
Oracle Flashback是一种Oracle数据库提供的功能,用于恢复
或查询数据库的历史数据。
它通过使用数据库中的日志和其他信息来回溯数据库的状态,而不是通过传统的备份和恢复方法。
以下是一些Oracle Flashback的常见用法:
1. Flashback Table:通过Flashback Table命令可以将表还原到
之前的状态。
这个命令可以撤销对表格的一系列更新、删除或插入操作,从而恢复表格的先前状态。
2. Flashback Query:Flashback Query是一种基于时间的查询技术,可以查询数据库在过去某个时间点的数据快照。
通过使用AS OF子句可以指定查询的时间点。
3. Flashback Transaction:Flashback Transaction用于回滚整个
事务,而不仅仅是表格的某个状态。
它会恢复事务在过去的某个时间点的所有更改。
4. Flashback Database:Flashback Database是一种恢复整个数
据库到过去某个时间点的能力。
它可以回滚整个数据库到之前的状态,包括数据文件和控制文件。
需要注意的是,为了使用Oracle Flashback功能,数据库需要
开启Flashback功能,并在数据库中设置合适的Flashback区域。
此外,使用Flashback功能可能对数据库的性能产生一定
影响,因此在使用时需要权衡利弊。
用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闪回原理
oracle闪回原理Oracle数据库的闪回技术是一种用于快速恢复数据库到某个特定的时间点的技术。
它可以在意外的数据修改、误删除或其他用户错误操作后,快速恢复数据库到以前的状态。
Oracle的闪回技术主要基于redo log和数据文件的架构。
当数据库执行修改操作时,相关的信息会被写入redo log中,而实际的数据则会被写入数据文件。
闪回技术利用了这些日志信息来进行恢复。
具体而言,Oracle 闪回技术通过以下几个步骤实现数据恢复:1. 闪回查询(Flashback Query):利用数据库中的undo表空间和闪回日志文件,可以通过语句查询数据库中某个时间点的数据。
用户可以使用SELECT命令,指定某个时间点进行查询,而不需要进行真正的数据恢复操作。
2. 闪回版本查询(Flashback Version Query):除了对整个数据库进行闪回查询外,还可以对指定表或视图的特定行或列进行查询。
通过查询某个时间点的历史版本,可以找回误删除或修改的数据。
3. 闪回表(Flashback Table):如果需要将整个表恢复到某个时间点,可以使用闪回表功能。
这个功能会对整个表进行快速恢复,而不需要使用传统的恢复方法。
4. 闪回数据库(Flashback Database):对于更大范围的数据恢复,可以使用闪回数据库功能。
这个功能会将整个数据库恢复到某个时间点,并且会自动处理所有相关的数据文件和日志文件。
需要注意的是,闪回技术对于一些操作是有限制的,比如数据文件的删除、表空间的重命名等。
同时,使用闪回技术恢复的数据必须还在系统中,不能超过undo表空间的保留时间。
因此,在实际使用闪回技术前,需要做好相关的配置和规划。
oracle闪回历史记录
Flashback Transaction Query
Flashback Transaction Query也是使用UNDO信 息来实现。利用这个功能可以查看某个事务执行的 所有变化,它需要访问 flashback_transaction_query 视图,这个视图的 XID列代表事务ID,利用这个ID可以区分特定事务 发生的所有数据变化。 select xid,operation,commit_scn,undo_sql from flashback_transaction_query where xid in(select versions_xid from b versions between scn minvalue and maxvalue);
ORA_ROWSCN
ORA_ROWSCN 缺省是数据块级别的,也 就是一个数据块内的所有记录都是一个 ORA_ROWSCN,数据块内任意一条记录被 修改,这个数据库块内的所有记录的 ORA_ROWSCN都会同时改变。 不过我们可以在建表时使用关键字 rowdependencies, 可以改变这种缺省行为, 使用这个关键字后,每条记录都有自己的 ORA_ROWSCN。 select ora_rowscn,b from b; 最后一次被修改时的SCN,如果没有提交, 是不会变的,我们重做一下就清楚了。 select ora_rowscn, id from B
多版本一致性
Oracle 采用了一种非常优秀的设 计,通过undo 数据来确保写不堵 塞读,简单的讲,不同的事务在写 数据时,会将数据的前映像写入 undo 表空间,这样如果同时有其 它事务查询该表数据,则可以通过 undo 表空间中数据的前映像来构 造所需的完整记录集,而不需要等 待写入的事务提交或回滚。
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 Flashback 技术 总结
1. Flashback1. 闪回恢复区Flashback Recovery Area1. 设置闪回恢复区2. 取消闪回恢复区3. 闪回恢复区的内容4. 闪回恢复区的一些限制5. 闪回恢复区的空间管理6. Flash Recovery Area空间不足导致DB不能打开或hang住处理方法7. Flash Recovery Area 的备份2. Flashback Database1. Flashback Database 说明2. Flashback Database 架构3. 启用Flashback Database 步骤1. 配置Flash Recovery Area2. 启动flashback database4. Flashback Database操作示例1. 检查是否启动了flash recovery area2. 检查是否启用了归档3. 检查是否启用了flashback database4. 查询当前的scn5. 查询当前的时间6. 删除表A7. 重启DB 到mount8. 执行恢复分timestamp 或者SCN两种9. 打开数据库5. 和Flashback Database 相关的3个视图1. Vdatabase2. Vflashback_database_log3. Vflashback_database_stat6. Flashback Drop1. Tablespace Recycle Bin2. Flashback Drop 实例操作7. Flashback Query1. Flashback Query1. 多版本读一致性2. As of timestamp 的示例3. As of scn 示例4. SCN 与timestamp 关系5. Flashback Query 函数存储过程包触发器等对象2. Flashback version Query3. Flashback Transaction Query8. Flashback Table9. Oracle Flashback Data Archive1. Flashback Data Archive 说明2. Flashback Data Archive 的相关操作1. Creating a Flashback Data Archive2. Altering a Flashback Data Archive3. Dropping a Flashback Data Archive4. Specifying the Default Flashback Data Archive5. Enabling and Disabling Flashback Data Archive6. DDL Statements on Tables Enabled for Flashback DataArchive3. 一个用Flashback Data Archive 恢复数据的测试写在前面:2009年的时候结合网上的资料整理了下Flashback的用法。
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的员工信息。
Oracle10g新特性Flashback探究
or c e 72 a l 2 31 1 1 1 3 0 7: 0: 0 7 0 00 om :
r vw r
— —
¥ I - S I
o c rl t aI32 6 ot 0 4
Wre R WR 的新过 程写 入 。 i r( V ) t 这是 O llg的新增 进 程 。 mc O e 我们
FL ASHBACK DAT ABASE LOG; OL DEST FL SHB A ACK SCN OLDEST FL SHBACK TI A
1 6 62 0 03 2 1 01: 42 7 20 5— - 9 0 7: 02
在笔者参与 的一个 大型上市公 司的 E P项 目的开发过程 R
图 2 定 义数 据 对 象
2. 3 初 始 化 2.
中, 使用 S r om 完成特殊格式报表和表单的需求很 大 , mat r f 如何 在 S at r 内部进行 数据 定义并 实现和 R p r程 序 的数据 m rom f eo t 传递 , 一直 困扰着开发 人员 , 本文对 该问题给 出了一个很 好的 解 决办法。
-
与常规 的重做 日志(e o lg ) r o s 不同 , d 回闪 日志既不需 要由 DB A创建 , 也不需要 由他们维护 ; 它们 由 O al Maae i s rc n gd Fl e e
r r… - 1 r ce db 0 2 w-. o a l a 82 01 Mar29 4 9 1 9 6: O1 mf 54b l .b 1 1 cp n
.
( MF) O 自动在 闪回恢复区域所指定的 目录 中创建。 些文件不 这
flashbacklog的管理方式
flashbacklog的管理方式FLASHBACKLOG的管理方式oracle对flashback log采用了自动管理的方式,并且不允许手工去删除flashback log。
当flashback log写满时,会自动的覆盖掉最早的一个flashback日志。
并且值得注意的是,如果手工删除了flashback log,数据库将自动把flashback设置成no!我们先把数据库的flashback打开:SQL> startup mount;ORACLE instance started.Total System Global Area 167772160 bytesFixed Size 1247900 bytesVariable Size 67110244 bytesDatabase Buffers 96468992 bytesRedo Buffers 2945024 bytesDatabase mounted.SQL> alter database flashback on;Database altered.Elapsed: 00:00:04.00SQL>SQL>SQL> alter database open;Database altered.Elapsed: 00:00:29.82SQL>SQL>SQL>SQL>SQL>SQL>SQL> select flashback_on from v$database;FLASHBACK_ON------------------YESElapsed: 00:00:22.05SQL>SQL>我们来看看当前flashback日志有哪些:SQL>SQL> exitDisconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsD:\oracle\product\10.2.0\flash_recovery_area\ORALOCAL\FL ASHBACK>D:\oracle\product\10.2.0\flash_recovery_area\ORALOCAL\FL ASHBACK>ls -ltotal 16016-rwxrwxrwa 1 Administrators SYSTEM 8200192 Jan 21 15:54 O1_MF_4QFKO379_.FLB我们再看看flashback的相关参数设置:目录大小设置了50M,当前1个flashback日志空间占用率为15.63%D:\oracle\product\10.2.0\flash_recovery_area\ORALOCAL\FL ASHBACK>sqlplus "/ as sysdba"SQL*Plus: Release 10.2.0.1.0 - Production on 星期三1月21 15:49:45 2009Copyright (c) 1982, 2005, Oracle. All rights reserved.Connected to:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> show parameter recoverNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string D:\oracle\product\10.2.0\flash _recovery_areadb_recovery_file_dest_size big integer 50Mrecovery_parallelism integer 0SQL>SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES------------ ------------------ ------------------------- ---------------CONTROLFILE 0 0 0 ONLINELOG 0 0 0 ARCHIVELOG 0 0 0 BACKUPPIECE 0 0 0 IMAGECOPY 0 0 0 FLASHBACKLOG 15.63 0 16 rows selected.Elapsed: 00:00:04.01SQL>SQL> select * from v$flashback_database_log;OLDEST_FLASHBACK_SCN OLDEST_FLASHBA RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE-------------------- -------------- ---------------- -------------- ------------------------1402232 21-1月-09 1440 8192000 70410240Elapsed: 00:00:01.54SQL>SQL>SQL>现在,我们执行一些dml,来将block的pre image写到flashback log中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle Flashback详解分类:RDBMS 2011-01-25 17:05 430人阅读评论(0) 收藏举报使用oracle数据库时,难免会碰到一些问题.例:1.如何回滚已经commit了的数据2.如何查询已经被覆盖掉的数据[update],或者被delete了的数据3.如何将数据恢复到某个时间点我们就可以使用Flashback相关语句解决相关问题了关于Flashback[回闪]:从9i到10g到最新的11.2g,oracle对Flashback功能进行了进一步的扩展,利用Flashback我们可做到1.flashback query 闪回查询,并不实际修改表的数据2.flashback table 闪回表格,可恢复表格的数据3.flash database 闪回数据库,可恢复db的数据①:关于Flashback Query:1.Flash Query通过undo数据表空间数据,利用一致性的方法来查找用户需要的数据2.作用范围:查找指定时间点被(delete,update)的数据只是做查找操作,如果设计恢复那么就要使用flashback table了3.相关参数:1.查询出来的数据存活时间受undo_retention(默认为900秒)影响 [目标值,该变量(秒)可以影响undo表空间产生的data存活时间,时间一到,即死亡(消失)]2.闪回时间受undo表空间大小影响[关于undo表空间的操作,另一片文章会有讲解]3.查询的仅仅是快照,并不能修改当前状态4.基本语法[两种方式,使用时间片或scn号] 使用时间片的情况比较多1.select * from 你要查询表的名字as of timestamp [查询某一时间该表的数据]2.select * from 你要查询表的名字as of scn 具体scn号[关于scn 号,另一篇文章会讲解]4.原理:简单的说就是将以前被修改,删除了的数据,通过开启Flashback 模式,回到我们需要回到的时间来查看数据,在undo_retention该变量设置的时间过后,该镜像数据会自动被清除.相当于查看的是一个镜像数据.一种方式是利用scn号来查看镜像数据,另一种是通过查找时间片来查询镜像数据案例1:①--创建测试flashQuery表格主要由scn号和系统日期组成create table testQuery(id number,scn number,time varchar2(20),mydate varchar2(20));②--插入测试数据beginfor i in 1..16loopinsert into testQueryvalues(i,dbms_flashback.get_system_change_number(),to_char (sysdate ,'yyyy-mm-dd hh24:mi:ss'),'你好'||i);--插入scn号和sysdate为方便后续查询commit;--如果不实时commit,那么会在循环完后,批量提交,时间点是一样的dbms_lock.sleep(2);--使用dbms_lock.sleep 方法和java的thread睡眠是一个意思参数以秒为单位end loop;end;③--查询未修改的数据result:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 你好1011 3303574 2011-01-25 11:51:53 你好1112 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好16④--查询最新的scn号[类似于check point],该scn号在每次commit时,都会自动变化[使用scn号来开启Flashback Query模式]select dbms_flashback.get_system_change_number from dual;result:3307628 --该scn号可以理解成为一个check point点.我们可以借助这个标记来回退到该scn号查询当前的数据④--修改第十条,和第十一条的数据:update testQuery tq set tq.mydate='新年快乐'where scn='3303572'; commit;update testQuery tq set tq.mydate='万事如意'where scn='3303574'; commit;select*from testQueryresult:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 新年快乐11 3303574 2011-01-25 11:51:53 万事如意12 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好16⑤--使用scn号来进行闪回查询1.不开启Flashback模式,仅使用Flashback query语句做查询select*from testQuery as of scn 3307628result:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 你好1011 3303574 2011-01-25 11:51:53 你好1112 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好162.开启Flashback模式做查询,整个db将会产生某个scn号所在时间点的镜像数据.使用dbms包开启Flashback模式:exec DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(3307628);现在查看表的数据:select*from testQuery as of scn 3307628;result:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 你好1011 3303574 2011-01-25 11:51:53 你好1112 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好16注:此时整个DB为镜像数据.[如果单独再开启个链接,那么看到的还是真实数据而不是镜像数据];[如果中途要退出Flashback模式请使用:exec DBMS_FLASHBACK.DISABLE;]退出Flashback 模式:exec DBMS_FLASHBACK.DISABLE;select*from testQueryresult:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 新年快乐11 3303574 2011-01-25 11:51:53 万事如意12 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好16以上就是使用scn号来做闪回查询了;⑥--使用时间点来进行闪回查询select*from testQuery as of timestamp to_timestamp('2011-01-25 13:25:55','yyyy-mm-dd hh24:mi:ss');做此查询要确保没有对原有表结构进行修改,如果有的话可能引发异常;select*from testQuery;result:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 你好1011 3303574 2011-01-25 11:51:53 你好1112 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好16关于scn号和这个timeStamp的转换[这个可能会出问题(undo表空间过小,无法查询到过早的数据)]scn→→timeStamp:select SCN_TO_TIMESTAMP(SCN号)as ts from dual;timeStamp→→scnselect TIMESTAMP_TO_SCN('25-1月-11 01.05.29.046000 下午')from dual;②:关于Flashback Table:1.闪回表格,可将表格的数据闪回到某个时间点2.需要开启行移动模式[enable row movement]3.原理:Flashback Table也是利用Undo数据来恢复对象到指定时间点4.使用范围:恢复当前表及其相关对象到某个时间点5.注意点:1).闪回时间受参数undo_retention影响2).闪回时间受undo表空间大小影响3).和flashback query有差别,恢复表到以前的时间点[真实闪回,而不是镜像]6.语法:1).flashback table table_name to timestamp .... [根据时间点闪回]2).flash table table_name to scn ... [根据scn号回退,实际操作基本上不会用到]3).flashback table table_name to timestamp ... enable triggers. [创建表,开启行移动模式,用的不多]4).flashback table testFlashTable to TIMESTAMP systimestamp - interval '5' minute; [回退到几分钟之前,用的多]例:将第一条数据更新,然后进行闪回表格,得到我们以前的数据;创建新的表格测试:create table testFlashTable(id number,mydata varchar2(60));插入测试数据:insert into testFlashTable values(1,'一帆风顺');commit;select*from testQuery;result:1 一帆风顺------等待5分钟--------让scn号飞一会,不然可能会出错删除数据:delete from testFlashTable;commit;select*from testQuery;result:无;开启行移动模式:alter table testFlashTable enable row movement;使用flashBack:[这种方法用的比较多,不小心删除了,马上就可以闪回][闪回到5分钟以前]flashback table testFlashTable to TIMESTAMP systimestamp-interval'5' minute;或者: [闪回到时间点]flashback table t to timestamp to_timestamp('2011-01-2611:35:40','yyyy-mm-dd hh24:mi:ss');。