oracle 10g已刪除資料查詢的兩種方式

2021-06-18 13:57:02 字數 2918 閱讀 4220

oracle 10g已刪除資料查詢的兩種方式

(1)as of timestamp

eg.sql**

select * from t_table as of timestamp(sysdate-1/24)

where …

注意,不能給表起別名

(2)as of scn

sql**

sql>select dbms_flashback.get_system_change_number from dual;

get_system_change_number

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

1859181

--如果不知道確切的scn,嘗試小些的

sql>select count(*) from t_table as of scn 1800000;

sql>insert into t_table select * from t_table as of scn 1800000;

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

以下是轉的

引用***基於時間的查詢(as of timestamp)

應用flashback query查詢過去的資料

flashback query這一特性,最常被應用的就是修復誤操作的資料了。注意,這並不是說flashback query能夠恢復資料。flashback query本身不會恢復任何操作或修改,也不能告訴你做過什麼操作或修改,實際上flashback query特性實際應用時,是基於標準select的擴充套件,借助該特性能夠讓使用者查詢到指定時間點的表中的記錄,相當於擁有了看到過去的能力,至於恢復,select的結果都出來了,難道還不懂如何執行insert table select或create table as select嗎?

11.1.1.1 基於時間的查詢(as of timestamp)

以前面建立的flash_tbl表為例,先來刪除幾條記錄並提交:

jsspre> delete flash_tbl where id<10;

9 rows deleted.

jsspre> commit;

commit complete.

jsspre> select * from flash_tbl;

id vl

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

10 k

11 l

12 m

13 n

14 o

15 p

16 q

17 r

18 s

19 t

20 u

11 rows selected.

這個時候flash_tb1表中id<10的記錄均已被刪除,假設過了一會兒使用者發現刪除操作執行有誤,仍需找回那些被誤刪的記錄該怎麼辦呢?通過備份恢復嗎,如果是在8i或之前版本,恐怕是需要這樣,自9i之後,使用flashback query的特性,我們可以很輕鬆地恢復記錄(注意並不是任何情況下都可以恢復喲,後面會講到制約flashback query的一些因素,這裡假設的都是在理想條件下)。

現在就演示應用flashback query,首先是找到它,假設當前距離刪除資料有5分鐘左右的時間,執行select查詢語句,並附加as of子句,例如:

jsspre> select * from flash_tbl as of timestamp sysdate-5/1440;

id vl

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

1 a2 b

3 c4 d

5 e6 f

7 g8 h

9 i10 k

11 l

12 m

13 n

14 o

15 p

16 q

17 r

18 s

19 t

20 u

20 rows selected.

jsspre>

提 示sysdate-5/1440是啥意思,1440又是怎麼來的?

首先60(分)×24=1440,這樣就計算出一天擁有多少分鐘,sysdate是系統函式,用來取得當前的系統時間(以天為單位),sysdate-5/1440,得出的就是距當前時間5分鐘前的記錄了。後面示例中需要計算之前的某個時段時,均是使用這一方法。

你看,我們通過增加as of timestamp的語法,查詢到的資料就是5分鐘之前的,基於這一結果,可以輕易並且快速地將記錄恢復:

jsspre> insert into flash_tbl

2 select * from flash_tbl as of timestamp sysdate-5/1440

3 where id<10;

9 rows created.

jsspre> commit;

commit complete.

成功插入9條記錄,查詢表中當前的記錄:

jsspre> select * from flash_tbl;

id vl

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

10 k

11 l

12 m

13 n

14 o

15 p

16 q

17 r

18 s

19 t

20 u

1 a2 b

3 c4 d

5 e6 f

7 g8 h

9 i20 rows selected.

資料已被成功恢復。

如上述示例中所示,as of timestamp方式的使用非常方便,但是在某些情況下,我們建議使用as of scn的方式執行flashback query.如需要對多個相互有主外來鍵約束的表進行恢復時,如果使用as of timestamp的方式,可能會由於時間點不統一的緣故造成資料選擇或插入失敗,通過as of scn方式則能夠確保記錄處理的時間點一致。

oracle 10g查詢已刪除資料的兩種方式

oracle 10g已刪除資料查詢的兩種方式 1 as of timestamp eg.www.2cto.com sql select from t table as of timestamp sysdate 1 24 where 注意,不能給表起別名 2 as of scn sql sql sel...

oracle恢復已刪除資料

刪除表後,可以採用如下操作 在 user recyclebin中找到最近操作過的表名稱,然後用閃回 只能用於10g及以上版本 flash back table table name to before drop 如果是刪了或修改裡面的資料,可以先建立乙個快表將刪除修改之前狀態的資料找回到這個表中 c...

oracle10g 解除安裝

1 oracle 10g解除安裝軟體環境 1 windows xp oracle 10g2 oracle 安裝路徑為 d oracle 實現方法 1 開始 設定 控制面板 管理工具 服務停止所有 oracle 服務 2 開始 程式 oracle oradb 10g home1 oracle inst...