171211之Oracle閃回操作

2021-08-13 08:52:16 字數 3902 閱讀 3841

簡介:

oracle的閃回功能可以在對資料庫進行不完全恢復的情況下,對某乙個指定的表進行恢復。閃回資料庫是進行時間點恢復的新方法,它能夠快速將oracle恢復到以前的時間,以更正由於邏輯資料損壞或使用者錯誤而引起的問題。當需要恢復時,可以將資料庫恢復到錯誤前的時間點,並且只恢復改變的資料塊。

oracle中的閃回操作包括以下4種:

(1)查詢閃回:查詢過去某個指定時間、指定實體的資料,恢復錯誤的資料庫更新、刪除等。

(2)表閃回:使表返回到過去的某一時間的狀態,恢復表、取消對錶進行的修改。

(3)刪除閃回:可以將刪除的表重新恢復。

(4)資料庫閃回:可以將整個資料庫回退到過去的某個時間點。

1、查詢閃回

查詢閃回可以檢視過去某一時點的任何資料,如果要查詢某一表在某一時點的內容,可以把查詢目標物件定位為該錶在某一時點的表,表在某一時刻的表可以如下表示:

table_name as of timestamp real_timestamp; –它作為乙個整體表示乙個表*/

例如,要查詢person表在2012-6-2 19:00:00的狀態,可以使用如下語句:

select * from person as

oftimestamp

to_timestamp('2012-6-2 19:00:00', 'yyyy-mm-dd hh24:mi:ss')

知道了表在某一時刻的表之後,我們就可以很容易的把表恢復到某一時刻的樣子了,例如我們在2012-6-2 19:00:00這個時候刪除了person表中的3條記錄,之後我又想把它恢復,那應該如何恢復呢?

利用查詢閃回我們可以這樣操作:

方法一:

第一步,把當前表中的資料全刪了:delete from person;

第二步,我們通過查詢閃回把2012-6-2 19:00:00這個時點之前的資料拿出來然後插入到當前表中,呼叫語句如下:

insert

into person select * from person as

oftimestamp

to_timestamp('2012-6-2 18:59:59', 'yyyy-mm-dd hh24:mi:ss')

方法二:

先找出從person表中刪除的記錄,然後再把它們插到person表中,sql語句如下:

insert

into person select * from person as

oftimestamp

to_timestamp('2012-6-2 18:59:59', 'yyyy-mm-dd hh24:mi:ss') p

where

notexists(select * from person where id=p.id);

因為查詢閃回是跟時間有關係的,所以說到這就再說乙個設定,在sqlplus中輸入set time on語句可以開啟時間顯示功能,這會使得在每次執行語句後都會在該語句的前面顯示該語句的執行時間,使用set time off語句可以關閉該功能。

2、表閃回

利用表閃回可以輕鬆的取消對錶的修改。只有oracle的企業版才能進行表閃回。對進行表閃回的表必須row movement為enable。

表閃回的語法格式如下:

flashback table [schema.]table_name[,...n] to 

;

其中,

scn:表示系統改變號,可以從flashback_transaction_query資料字典中查詢。

timestamp:表示通過時間戳的形式來進行閃回。

enable|disable triggers:表示觸發器恢復之後的狀態,預設為disable。

示例**:

(1)確保需要閃回的表row movement為enable:

alter

table hello enable row movement;

(2)對錶進行閃回:

flashback table hello to timestamp 

to_timestamp('2012-6-3 14:00:00','yyyy-mm-dd hh24:mi:ss')

--恢復表到2012-6-3 14:00:00這個時候的樣子*/

3、刪除閃回

在oracle資料庫中有乙個叫recyclebin的**站,當**站的功能是啟用的時候,被使用者drop的物件都會儲存在recyclebin中,普通使用者可以通過select * from recyclebin;語句檢視被自己drop掉的物件的相關資訊,當然如果普通使用者想檢視所有使用者的recyclebin資訊也是可以的,可以通過檢視dba_recyclebin檢視,dba使用者不存在recyclebin。來獲取,如:select * from dba_recyclebin。如果被刪除的物件不是徹底刪除,而是放到了**站的話,我們就可以在需要的時候從**站中進行恢復了。

為了避免被刪除的表與其他物件存在名稱衝突,oracle對被刪除的物件進行了重新命名,當然oracle也儲存了物件的原始名稱。在進行物件恢復的時候可以使用物件的原始名稱,也可以使用被重新命名的新名稱。

系統引數recyclebin控制表刪除後是否到**站,show parameter recyclebin可以檢視該引數的狀態。

對於系統引數的修改有兩種,全域性的修改和會話的修改:

(1)alter system set param_name=param_value;

(2)alter

session

set param_name=param_value;

show recyclebin:可以顯示當前使用者recyclebin中的表。

purge tablespace tablespace_name:清空指定表空間的recyclebin;

purge tablespace tablespace_name user username:

清空指定表空間的recyclebin中指定使用者的物件。

purge table table_name:清除**站中的指定表物件,如purge table

hello語句則將清除**站中的hello表。這裡的table_name既可以是原來

的表物件名,也可以是recyclebin中自動生成的名字。

purge recyclebin:刪除當前使用者的recyclebin中的物件。

purge dba_recyclebin:刪除所有使用者的recyclebin中的物件

drop

table table_name purge:刪除物件且不放在recyclebin中。

刪除閃回的語法格式如下:

flashback table table_name to

before

drop [rename

to new_name]

--恢復表table_name並重命名為new_name*/

示例**:

flashback table hello to

before

drop rename

to dropped_hello;

4、資料庫閃回

資料庫閃回可以使資料庫回到過去某一時間點或scn的狀態,使用者可以不用備份就能快速地實現時間點的恢復。只有oracle的企業版才能進行資料庫閃回。

(以後進行完善)

**部落格:

oracle 資料閃回

select from scott.dept insert into scott.dept values 50,錯誤資料 china select from scott.dept as of timestamp to timestamp 2011 12 09 10 00 00 yyyy mm dd ...

oracle閃回技術

1,閃回資料庫到之前某時間點 在安裝時需要開放閃回功能 不支援表空間刪除 select name from v database 看是否開啟閃回功能 select flashback on,name from v database select name from v bgprocess where...

oracle閃回技術

查詢某一時刻資料庫中資料狀態語句 select from abc as of timestamp to timestamp 2015 08 24 10 31 00 yyyy mm dd hh24 mi ss 閃回dml語句 flashback table abc to timestamp to ti...