oracle flashback命令手册
- 格式:doc
- 大小:16.00 KB
- 文档页数:2
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语法是一种功能强大的数据库
工具。
它可以帮助您快速恢复表数据,从而提高数据库恢复的效率和
准确性。
闪回数据归档(FlashbackDataArchive)17.8 闪回数据归档(Flashback Data Archive)在Oracle 11g当中,对闪回技术再次进行了扩展,提供了一个全新的flashback方式,称之为闪回数据归档,本节我们将对闪回数据归档进行介绍。
17.8.1 闪回数据归档概念在这里让我们从Oracle 9i开始引进的Flashback Query说起,这是Oracle第一次引入闪回技术,该技术使得一些逻辑误操作不再需要利用归档日志和数据库备份进行时间点恢复。
而在Oracle 10g当中,更是引入flashback version query、flashback transaction query、flashback database、flashback table和flashback drop等特性,大大简化了Flashback Query的使用。
在上面的诸多闪回技术当中,除了Flashback Database(依赖于闪回日志)之外,其他的闪回技术都是依赖于Undo撤销数据,都与数据库初始化参数UNDO_RETENTION密切相关(该参数决定了撤销数据在数据库中的保存时间)。
它们是从撤销数据中读取信息来构造旧数据的。
这样就有一个限制,就是undo中的信息不能被覆盖。
而undo段是循环使用的,只要事务提交,之前的undo信息就可能被覆盖,虽然可以通过 undo_retention等参数来延长undo的存活期,但这个参数会影响所有的事务,设置过大,可能导致undo tablespace 快速膨胀。
Oracle 11g则为flashback家族又带来一个新的成员:Flashback Data Archive。
该技术与以上所说的诸多闪回技术的实现机制不同,通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响undo策略。
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查询历史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语法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中使用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数据库提供了闪回查询(Flashback Query)的功能,它允许你查询表在过去某个时间点的数据。
这个功能对于回溯历史数据或者查找误操作引起的数据变更非常有用。
以下是一些 Oracle 数据库中的闪回查询语句的示例:
1. 查询过去某个时间点的数据:
上述语句中,your_table是表的名称,TIMESTAMP后面的字符串表示你希望查询的具体时间点。
2. 查询过去某个 SCN(系统更改号)的数据:
这里的1234567是你希望查询的 SCN 号。
3. 查询在过去一定时间段内的数据变化:
上述语句中,VERSIONS BETWEEN后面的两个时间戳表示你希望查询的时间段内的数据版本。
4. 使用 AS OF SCN 语法查看历史数据:
这个语句允许你在历史版本中进行条件过滤。
请注意,使用闪回查询功能需要相应的权限,而且 Oracle 数据库的
UNDO_RETENTION参数设置也可能对你能够查询的历史时间范围产生影响。
确保在使用这些功能时了解相关的安全和配置考虑。
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; 表被截断。
Flashback
Flashback query(undo)
select * from table_name as of timestamp
to_timestamp('2008-03-03 12:00:00','yyyy-mm-dd hh24:mi:ss');
select * from table_name as of scn 123456;
Flashback table(undo,恢复表到某时间点,阻塞写操作)
--必须开启行移动
alter table table_name enable row movement;
flashback table table_name to timestamp(JUL-07-2008,02:33:00);
flashback table table_name to scn 123456;
flashback table table_name to timestamp '2008-03-03 12:05:00' enable triggers;
--只恢复trigger或index状态,不恢复更改
Flashback drop(recyclebin)
--管理recyclebin
show recyclebin;
select * from user_recyclebin;
select * from dba_recyclebin;
purge recyclebin;
--闪回drop表
flashback table table_name to before drop [rename to new_name];
--recyclebin中有同名,闪回最近删除的;闪回后有同名表,需rename
Flashback database(flashback log,redo log,archive log)
--开启flashback database
shutdown immediate
startup mount
alter database flashback on --必须先开启归档
--闪回数据库(mount状态,read only方式检查,resetlogs方式打开)
flashback database to time to_date(xxx);
flashback database to time to_timestamp(xxx);
flashback database to scn xxx;
flashback database to sequence xxx thread 1;
flashback database to timestamp(sysdate-1/24);
--管理闪回区
db_recovery_file_dest --闪回区路径
db_recovery_file_dest_size --闪回区大小
db_flashback_retention_target --闪回数据保存时间
select * from v$flash_recovery_area_usage; --闪回区使用率
select * from v$flashback_database_log; --闪回区情况,如能恢复到的最早的时间点Flashback version query(undo)
--查询表的多个版本,记录行的改变
select versions_starttime,versions_endtime,versions_startscn,versions_endscn,
versions_xid,versions_operation,a,b
from test versions between timestamp minvalue and maxvalue
order by versions_starttime;
Flashback transaction query(undo)
--查看当前事务号
select xid from v$transaction;
--查看undo_sql
select undo_sql from flashback_transaction_query
where xid =hextoraw('xxxxxxx'); --不使用hextoraw很难利用系统的索引。