FLASHBACK 应用example (flashback笔记-03)

本文详细介绍了 Oracle 数据库中的 Flashback 特性,包括 Flashback 的启用配置及使用方法,并通过具体示例展示了 Flashback 数据库、Flashback Drop 和 Flashback Version Query 的操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

flashback 特性

 

 

启用 flashback

conn / as sysdba

shutdown immediate;

startup mount;

alter database flashback on;

alter database open;

alter system set db_flashback_retention_target=480  scope=both;

--DB_FLASHBACK_RETENTION_TARGET A parameter value that determines how far back in time you can recover the flashback database, This value is in minutes.

 

 

 

Flashback  drop table   示例

 

SQL> create table test_lihq as select * from emp;

 

Table created

 

SQL>

SQL> select * from test_lihq;

 

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

7369 SMITH      CLERK      7902 1980/12/17     800.00               20

7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30

7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30

7566 JONES      MANAGER    7839 1981/4/2      2975.00               20

7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30

7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30

7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10

7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20

7839 KING       PRESIDENT       1981/11/17    5000.00               10

7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30

7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20

7900 JAMES      CLERK      7698 1981/12/3      950.00               30

7902 FORD       ANALYST    7566 1981/12/3     3000.00               20

 

13 rows selected

 

SQL> drop table test_lihq;

 

Table dropped

 

SQL>

SQL> select * from  test_lihq;

 

select * from  test_lihq

 

ORA-00942: table or view does not exist

 

SQL> flashback table test_lihq to before drop;

 

Done

 

SQL> select * from test_lihq;

 

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

7369 SMITH      CLERK      7902 1980/12/17     800.00               20

7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30

7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30

7566 JONES      MANAGER    7839 1981/4/2      2975.00               20

7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30

7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30

7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10

7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20

7839 KING       PRESIDENT       1981/11/17    5000.00               10

7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30

7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20

7900 JAMES      CLERK      7698 1981/12/3      950.00               30

7902 FORD       ANALYST    7566 1981/12/3     3000.00               20

 

13 rows selected

                           

Flashback table 示例

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

Connected as scott

 

SQL> create table banchu(id number);

 

Table created

 

SQL> insert into banchu values (100);

 

1 row inserted

 

SQL> insert into banchu values (200);

 

1 row inserted

 

SQL> insert into banchu values (300);

 

1 row inserted

 

SQL> commit;

 

Commit complete

 

SQL> select * from banchu;

 

        ID

----------

       100

       200

       300

 

SQL>

SQL> desc dbms_lock.sleep;

Parameter Type   Mode Default?

--------- ------ ---- --------

SECONDS   NUMBER IN           

 

SQL> exec dbms_lock.sleep(180);

等待 3 分钟

PL/SQL procedure successfully completed

 

 

SQL> insert into banchu values(400);

 

1 row inserted

 

SQL> commit;

 

Commit complete

 

SQL> select * from banchu;

 

        ID

----------

       100

       200

       300

       400

 

 

SQL> alter table banchu enable row movement;

 

Table altered

 

SQL> flashback table banchu to timestamp(systimestamp - interval '3' minute);

-- 月光宝盒

Done

 

SQL> select * from banchu;

 

        ID

----------

       100

       200

       300

-- 时光回到 3 分钟前,少了刚刚插入的数据

SQL>

 

Flashback Version Query 示例

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

Connected as scott

 

SQL> CREATE TABLE flashback_version_query (id NUMBER(10), description VARCHAR2(50));

 

Table created

 

SQL> INSERT INTO flashback_version_query (id, description) VALUES (1, 'Kunal');

 

1 row inserted

 

SQL> COMMIT;

 

Commit complete

 

SQL> SELECT current_scn, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') FROM v$database;

 

CURRENT_SCN TO_CHAR(SYSTIMESTAMP,'YYYY-MM-

----------- ------------------------------

     649924 2011-04-08 17:11:04

 

SQL> UPDATE flashback_version_query SET description = 'John' WHERE id = 1;

 

1 row updated

 

SQL> commit;

 

Commit complete

 

SQL> UPDATE flashback_version_query SET description = 'Mathew' WHERE id = 1;

 

1 row updated

 

SQL> commit;

 

Commit complete

 

SQL> SELECT current_scn, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') FROM v$database;

 

CURRENT_SCN TO_CHAR(SYSTIMESTAMP,'YYYY-MM-

----------- ------------------------------

     649945 2011-04-08 17:11:50

 

SQL>

SQL> COLUMN versions_startscn FORMAT 99999999999999999

SQL> COLUMN versions_starttime FORMAT A24

SQL> COLUMN versions_endscn FORMAT 99999999999999999

SQL> COLUMN versions_endtime FORMAT A24

SQL> COLUMN versions_xid FORMAT A16

SQL> COLUMN versions_operation FORMAT A1

SQL> COLUMN description FORMAT A11

SQL> SET LINESIZE 200

SQL>

SQL>

SQL>

SQL> SELECT versions_startscn,

  2         versions_starttime,

  3         versions_endscn,

  4         versions_endtime,

  5         versions_xid,

  6         versions_operation,

  7         description

  8    FROM flashback_version_query VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP(' 2011-04-08 17:11:04', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2011-04-08 17:11:50', 'YYYY-MM-DD HH24:MI:SS')

  9   WHERE id = 1;

 

VERSIONS_STARTSCN VERSIONS_STARTTIME         VERSIONS_ENDSCN VERSIONS_ENDTIME         VERSIONS_XID     V DESCRIPTION

----------------- ------------------------ ----------------- ------------------------ ---------------- - -----------

           649939 08-APR-11 05.11.34 PM                                               050025003E010000 U Mathew

           649933 08-APR-11 05.11.29 PM               649939 08-APR-11 05.11.34 PM    0100040037010000 U John

                                                      649933 08-APR-11 05.11.29 PM                       Kunal

 

SQL>

SQL>

SQL>

SQL> SELECT versions_startscn, versions_starttime,

  2  versions_endscn, versions_endtime,

  3  versions_xid, versions_operation,

  4  description

  5  FROM flashback_version_query

  6  VERSIONS BETWEEN SCN 649924 AND 649945

  7  WHERE id = 1;

 

VERSIONS_STARTSCN VERSIONS_STARTTIME         VERSIONS_ENDSCN VERSIONS_ENDTIME         VERSIONS_XID     V DESCRIPTION

----------------- ------------------------ ----------------- ------------------------ ---------------- - -----------

           649939 08-APR-11 05.11.34 PM                                               050025003E010000 U Mathew

           649933 08-APR-11 05.11.29 PM               649939 08-APR-11 05.11.34 PM    0100040037010000 U John

                                                      649933 08-APR-11 05.11.29 PM                       Kunal

 

SQL>

 

Flashback Transaction 示例

 

SQL> SELECT xid,

  2         operation,

  3         start_scn,

  4         commit_scn,

  5         logon_user,

  6         table_name,

  7         undo_sql

  8    FROM flashback_transaction_query A

  9   WHERE A.logon_user = 'SCOTT'

10     AND A.table_name = 'FLASHBACK_VERSION_QUERY';

 

XID              OPERATION   START_SCN COMMIT_SCN LOGON_USER  TABLE_NAME                UNDO_SQL

---------------- ---------- ---------- ---------- ----------- ------------------------- --------------------------------------------------------------------------------

0100040037010000 UPDATE         649931     649933 SCOTT       FLASHBACK_VERSION_QUERY   update "SCOTT"."FLASHBACK_VERSION_QUERY" set "DESCRIPTION" = 'Kunal' where ROWID

020027003B010000 INSERT         649914     649916 SCOTT       FLASHBACK_VERSION_QUERY   delete from "SCOTT"."FLASHBACK_VERSION_QUERY" where ROWID = 'AAAM1jAAEAAAAHGAAA'

050025003E010000 UPDATE         649937     649939 SCOTT       FLASHBACK_VERSION_QUERY   update "SCOTT"."FLASHBACK_VERSION_QUERY" set "DESCRIPTION" = 'John' where ROWID

 

SQL>

这个最有用的就是 undo sql 列啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值