日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle闪回详解

發布時間:2024/9/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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闪回详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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