一、基于时间(as of timestamp)的flashback
1、创建表
create table flash_tab(id,vl) as
select rownum,oname from ( select substr(object_name,1,1) oname from all_objects
group by substr(object_name,1,1) order by 1)
where rownum<=20;

2、查询表内容
SQL> select * from flash_tab;
ID VL
---------- --
1 /
2 A
3 B
4 C
5 D
6 E
7 F
8 G
9 H
10 I
11 J
12 K
13 L
14 M
15 N
16 O
17 P
18 Q
19 R
20 S
20 rows selected

3、删除表数据.
SQL> delete flash_tab where id<10;
9 rows deleted

SQL> select * from flash_tab;
ID VL
---------- --
10 I
11 J
12 K
13 L
14 M
15 N
16 O
17 P
18 Q
19 R
20 S
11 rows selected

4、执行Flashbach Query
SQL> select * from flash_tab as of timestamp sysdate-2/1440;
ID VL
---------- --
1 /
2 A
3 B
4 C
5 D
6 E
7 F
8 G
9 H
10 I
11 J
12 K
13 L
14 M
15 N
16 O
17 P
18 Q
19 R
20 S
20 rows selected
===============
说明:
AS OF TIMESTAMP表示基于时间
SYSDATE-2/1440表示当前系统时间两分钟之前;1440表示60分*24小时

5、将删除的记录恢复
insert into flash_tab
select * from flash_tab as of timestamp sysdate-2/1440
where id<10;

commit;

SQL> select * from flash_tab;
ID VL
---------- --
10 I
11 J
12 K
13 L
14 M
15 N
16 O
17 P
18 Q
19 R
20 S
1 /
2 A
3 B
4 C
5 D
6 E
7 F
8 G
9 H
20 rows selected

二、基于SCN(as of scn)的flashback
scn值的查询可使用dbms_flashback.get_system_change_number函数;或是从v$database视图中查询current_scn值。

1、授权scott用户具有查询scn值的权限
SQL> grant execute on dbms_flashback to scott;

授权成功。
SQL> grant select on v_$database to scott;

授权成功。

2、 查询当前scn值
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1564606

SQL> select current_scn from v$database; --不同时间点查询的scn值不一致
CURRENT_SCN
-----------
1564631

3、查询指定scn值时对象中的记录
SQL> select * from flash_tab as of scn 1564606;
ID VL
---------- --
10 I
11 J
12 K
13 L
14 M
15 N
16 O
17 P
18 Q
19 R
20 S
1 /
2 A
3 B
4 C
5 D
6 E
7 F
8 G
9 H
20 rows selected

4、删除对象修改
SQL> delete from flash_tab;
20 rows deleted

SQL> commit;
Commit complete

5、执行flashback as of scn恢复数据
SQL> select * from flash_tab;
ID VL
---------- --

SQL> select * from flash_tab as of scn 1564606;
ID VL
---------- --
10 I
11 J
12 K
13 L
14 M
15 N
16 O
17 P
18 Q
19 R
20 S
1 /
2 A
3 B
4 C
5 D
6 E
7 F
8 G
9 H
20 rows selected

SQL> insert into flash_tab select * from flash_tab as of scn 1564606;
20 rows inserted

SQL> select * from flash_tab;
ID VL
---------- --
10 I
11 J
12 K
13 L
14 M
15 N
16 O
17 P
18 Q
19 R
20 S
1 /
2 A
3 B
4 C
5 D
6 E
7 F
8 G
9 H
20 rows selected
============================
说明:
SCN会比TIMESTAMP更精确。事实上timestamp同样是被转换成SCN。因为oracle是通过SCN来标记操作而不是时间。
每个时间点都对应一个SCN值。在10g中,系统平均每隔3秒产生一次系统时间与SCN的匹配存入sys.SMO_SCN_TIME表中。SCN和TIMESTAMP也可相互转换。

SQL> DESC SMON_SCN_TIME;
Name Type Nullable Default Comments
------------ --------- -------- ------------------------------- --------
THREAD NUMBER Y
TIME_MP NUMBER Y
TIME_DP DATE Y
SCN_WRP NUMBER Y
SCN_BAS NUMBER Y
NUM_MAPPINGS NUMBER Y
TIM_SCN_MAP RAW(1200) Y
SCN NUMBER Y 0
ORIG_THREAD NUMBER Y 0 /* for downgrade */

SQL> select timestamp_to_scn(sysdate) from dual;
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
1569124

SQL> select to_char(scn_to_timestamp(1569124),'YYYY-MM-DD HH24:MI:SS') from dual; --时间可精确到毫秒
TO_CHAR(SCN_TO_TIMESTAMP(15691
------------------------------
2015-01-05 22:55:00

FlashBack-SCN-TIMESTAMP的更多相关文章

  1. 【转】FlashBack总结之闪回查询与闪回表

    本文主要介绍利用UNDO表空间的闪回技术,主要包括:闪回表,闪回版本查询,闪回事务查询,闪回查询.这些闪回技术实现从回滚段中读取表中一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错 ...

  2. [terry笔记]Flashback

    flashback 闪回,主要功能有两个:闪回查询(flashback query).闪回恢复(flashback table/database) 开启闪回flashback功能(归档下才可开启数据库 ...

  3. Flashback Version Query、Flashback Transaction Query快速闪回细粒度数据

    Flashback Version Query 闪回版本查询 使用Flashback Version Query  返回在指定时间间隔或SCN间隔内的所有版本,一次commit命令就会创建一个版本. ...

  4. Flashback version/Transaction Query,FlashbackTable

    Flashback version Query相对于Flashback Query 只能看到某一点的对象状态, Oracle 10g引入的Flashback Version Query可以看到过去某个 ...

  5. Oracle 六闪回技术,flashback

    Flashback 技术基于Undo segment基于内容的, 因此,限制UNDO_RETENTON参数. 要使用flashback 特征,您必须启用自己主动撤销管理表空间. 在Oracle 11g ...

  6. FlashBack 闪回

    [学习目标] Flashback Database 功能非常类似与RMAN的不完全恢复,它可以把整个数据库回退到 过去的某个时点的状态,这个功能依赖于Flashback log日志.比RMAN 更快速 ...

  7. oracle flashback data archive闪回数据归档天坑之XID重用导致闪回查询数据重复

    我们有个系统使用了Oracle flashback data archive闪回数据归档特性来作为基于时间点的恢复机制,在频繁插入.更新期间发现SYS_FBA_HIST_NNNN表中的XID被两个事务 ...

  8. Oracle安全之 Oracle 11g flashback技术详解

    Oracle11g提供的闪回技术用于对抗人为错误,主要有以下7种技术组成: 闪回查询-(闪回时间查询.闪回版本查询): 闪回数据归档: 闪回事务查询: 闪回事务: 闪回表: 闪回删表: 闪回数据库. ...

  9. Oracle Flashback(flashback table或drop)

    在Oracle 10g中,Flash back家族分为以下成员:Flashback DatabaseFlashback DropFlashback TableFlashback Query(分Flas ...

  10. ora flashback详解

    使用oracle数据库时,难免会碰到一些问题. 例:1.如何回滚已经commit了的数据 2.如何查询已经被覆盖掉的数据[update],或者被delete了的数据 3.如何将数据恢复到某个时间点 我 ...

随机推荐

  1. 【软件技巧】Sublime Text为不同语法定义不同高亮

    Sublime Text默认的语法高亮已经非常美丽了,可是对于个别语言还是有些不爽. 默认高亮规则叫Monokai,能够从Preferences->Settings - Default中看到: ...

  2. java中数据流的简单介绍

    java中的I/O操作主要是基于数据流进行操作的,数据流表示了字符或者字节的流动序列. java.io是数据流操作的主要软件包 java.nio是对块传输进行的支持 数据流基本概念 “流是磁盘或其它外 ...

  3. 无法登陆mysql服务器

    解决 .#2002 无法登录 MySQL 服务器 将config.sample.inc.php复制成config.inc.php 出现这个错误,表示没有连接到数据库.修改config.inc.php文 ...

  4. IoC容器Autofac正篇之简单实例

    先上一段代码. namespace ConsoleApplication3 { class Program { static void Main(string[] args) { ContainerB ...

  5. access数据库的连接字符串以及数据库操作类

    <!--access数据库连接方式--> <add name="QYTangConnectionString" connectionString="Pr ...

  6. 【转载】ADO.NET与ROM的比较(1):ADO.NET实现CRUD

    [转载]ADO.NET与ROM的比较(1):ADO.NET实现CRUD  转自周公 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hiberna ...

  7. stl学习之字符串

    其实string也是stl里面的内容,记录几点自己不常用的内容 1.at方法(比[]会判断是否越位) 2. int copy(char *s, int n, int pos=0) const; 把当前 ...

  8. 2015.4.2-SQL 简单语句(一)

    1.创建一个student表 create table student_masen( sno char(4) not null primarykey sname nchar(10) not null ...

  9. [ofbiz]设置任务计划(job),提示service_item已经传递

    问题描述:设置任务计划(job),提示service_item已经传递 解决办法: 红色框内不要填写,就可以了."已经传递"是翻译的不准确,应该是"已过时",所 ...

  10. jquery插件编写

    /*(function($) { $.fn.accordion = function(options) { var settings = $.extend({}, {open: false}, opt ...