日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Oracle闪回详解

發布時間:2024/9/5 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle闪回详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1、問題定義

閃回是dba做的工作。現在也可授權給某個用戶。

閃回的定義:就是將用戶錯誤的操作回恢到以前的狀態。即使你的事務提交的commit。

如果你刪除了一個表。Drop table(DDL) 不用commit直接生效的。

閃回:flashback。

概念:

Oracle默認有2G硬盤空間,這2G的數據,保存的是用戶的某些操作記錄。如果用戶操作的數據在這2G之內的。則可以條件閃回。

這個區域可以設置為最大10G。

在Oracle中,默認還有一個選項,時間選項。默認是900秒。

通過以下方式可以查詢這個時間選項:

可以修改這個值:

2、閃回

閃回分類:

1:閃回表中的數據 –

閃回執行錯誤的CRUD語句。

且是提交以后的數據。

即對insert,update,delete有效。且已經提交了,則可以使用閃回。

2:閃回刪除

錯誤的執行了drop table語句。則通過閃回刪除可以找回以前數據。

3:閃回版本查詢

向一個表中,做的任何一個commit語句。Oracle數據庫,都會給你記錄一個版本。

4:閃回事務查詢

執行了多條sql語句,且是對多個表,或是對一個表的多次操作。

閃回的語法:

Flashback table {tableName} to

{

(scn|timestamp)

|

Before drop

}

SCN :System Changement Number – 其實就是一個時間。與時間一一對應的

Timestamp: 時間點 ,sysdate

--如何獲取時間號:SCN

通過一個函數:

2.1、閃回表

必須要打開行移動功能,為rowid設置移動空間。

根據SCN時間號閃回:

根據時間閃回:

2.2、閃回刪除

就是閃回通過drop刪除到回收站中的表數據。

Flashback table tableName to before drop;

SQL> --刪除stud這表

SQL> drop table stud;

表已刪除。

SQL> select *from tab;

TNAME TABTYPE CLUSTERID

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

BIN$O1guMhXtQtK TABLE

BrmH0wA44/Q==$0

BONUS TABLE

DEPT TABLE

EMP TABLE

SALGRADE TABLE

SYS_TEMP_FBT TABLE

已選擇6行。

SQL> --通過show 可以查看回收站中信息

SQL> show recyclebin;

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

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

STUD BIN$O1guMhXtQtKBrmH0wA44/Q==$0 TABLE 2013-03-28:19:29:16

SQL> --閃回

SQL> flashback table stud to before drop;

閃回完成。

SQL> show recyclebin;

SQL> select *from tab;

TNAME TABTYPE CLUSTERID

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

BONUS TABLE

DEPT TABLE

EMP TABLE

SALGRADE TABLE

STUD TABLE

SYS_TEMP_FBT TABLE

已選擇6行。

SQL> select * from stud;

ID NAME

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

1 Jack

2 張三

3 Rose

表如果重名:

SQL> drop table stud;

表已刪除。

SQL> show recyclebin;

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

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

STUD BIN$jMt4lVtBQXieHhRHitV3KA==$0 TABLE 2013-03-28:19:33:

STUD BIN$4mfx44bSSo+NPkgEhU/Mig==$0 TABLE 2013-03-28:19:31:

SQL> --通過表名閃回,只會刪除最近刪除的那一個

SQL> flashback table stud to before drop;

閃回完成。

SQL> select * from stud;

AGE ADDR

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

90 山東

SQL> show recyclebin;

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

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

STUD BIN$4mfx44bSSo+NPkgEhU/Mig==$0 TABLE 2013-03-28:19:31:

SQL> flashback table stud to before drop rename to stud2;

閃回完成。

SQL> select * from stud2;

ID NAME

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

1 Jack

2 張三

3 Rose

還有一種閃加方式:

2.3、閃回版本查詢

在Oracle數據庫中,有一個對象versions記錄的是對某個表的commit操作。

記錄下的信息

1:versions_starttime – 什么時間開始的。對insert

2:versions_endtime – 什么時間數據就沒有了,當執行delete,update時。

3:versions_startscn – 與1對應

4:versions_endscn – 與2對應

5:versions_xid – 操作的事務的id。

2.3.1、在Oracle中事務的邊界

開始:

在Oracle中以insert,update,delete為事務的開始標記。

結束:

在執行rollback,commit.

在執行DDL(create ,drop ,alter)語句時,也是事務的結束。Commit

示例:

SQL> select *from stud;

AGE ADDR

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

90 山東

SQL> insert into stud values(12,'BJ');

已創建 1 行。

SQL> select * from stud;

AGE ADDR

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

90 山東

12 BJ

SQL> create table stss(iii int);

表已創建。

SQL> rollback;

回退已完成。

SQL> select * from stud;

AGE ADDR

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

90 山東

12 BJ

SQL> commit;

提交完成。

SQL> delete from stud where age=12;

已刪除 1 行。

SQL> select * from stud;

AGE ADDR

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

90 山東

SQL> drop table st;

drop table st

*

第 1 行出現錯誤:

ORA-00942: 表或視圖不存在

SQL> select * from stud;

AGE ADDR

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

90 山東

SQL> rollback;

回退已完成。

SQL> select * from stud;

AGE ADDR

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

90 山東

SQL>

2.3.2、查詢一個表的版本信息

對于versions而言語法:

Select id,name,

Versions_xid

From person

Versions between ( scn | timestamp) minvalue and maxvalue;

SQL> select id,name,versions_xid from person versions between timestamp minvalue

and maxvalue;

ID NAME VERSIONS_XID

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

22 BCCCCC 0500130099020000

2 BBBBB 0500130099020000

11 ABBBB 0700020080020000

1 AAA 0700020080020000

2.4、閃回事務查詢

原則就是根據某個versions_xid- 事務id

對應這versionss_id會有一個撤銷的sql==== undo_sql

即對于insert的commit來說,則撤銷應該是delete

在oracle中,有一個表

Flashback_transaction_query表。保存了所有用戶可撤銷的sql語句。

以下是這個表的結構:

Table_name

Undo_sql

Xid對應的就是versions_xid

Grant select any transaction to scott;

轉載于:https://www.cnblogs.com/xiaweifeng/p/3688911.html

總結

以上是生活随笔為你收集整理的Oracle闪回详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。