Oracle11g R2學習系列 之五回閃

2022-02-11 13:50:56 字數 1673 閱讀 8511

oracle裡面有乙個回閃的操作,這個貌似sql server是沒有的。要使用這個功能,需要用到兩個時間內部函式

timestamp和to_timestamp。其中,函式to_timestamp的語法格式為:

to_timestamp('timepoint', 'format')

另外我發現oracle裡的所有操作,如果不使用commit;的話,都是沒起實際作用的。另起乙個操作視窗就會發現資料還是完好的。如下圖示,我依次輸入的是:

set time on

select

*from

rollxsb;

delete

from

rollxsb;

select

*from

rollxsb;

select

*from rollxsb as

oftimestamp to_timestamp('

2013-7-8 21:51:34

','yyyy-mm-dd hh24:mi:ss

');

view code

請注意,我這個時間還沒有敲commit;然後我用oracle sql developer連線,再次輸入select * from rollxsb;發現照樣可以看到那三條記錄,於是我再次返回sql*plus並輸入commit;這一次之後,我在sqldevelper裡面只能輸入

select * from rollxsb as of timestamp to_timestamp('2013-7-8 21:51:34','yyyy-mm-dd hh24:mi:ss');才能查詢到那三條記錄了。

既然能夠查詢到,那麼我想理所當然的可以用insert into 插回來了。sql server都支援的insert into 操作,作為資料庫中的王牌oracle沒有道理沒有這種語法,於是輸入:

insert into rollxsb select * from rollxsb as of timestamp to_timestamp('2013-7-8 21:51:34','yyyy-mm-dd hh24:mi:ss');

發現資料已插回了rollxsb表了。這裡同樣的需要按f11或圖示中的紅圈以提交改動,才能在sql*plus裡面用select * from rollxsb看到那三條結果。

感覺oracle這裡必須手動commit;才能提交改動的設計確認很高,防止很多人的誤操作delete,不過千萬記住,truncate是不支援這一操作的。如果你不幸在sql*plus中執行了

truncate table rollxsb;的話,那麼很悲劇的告訴你,是無法回滾回來的,而且這個也無須commit;就立即生效了。最後,我用了表回滾也沒有成功。

alter table rollxsb enable row movement;

flashback table rollxsb of timestamp to_timestamp('2013-7-8 21:51:34','yyyy-mm-dd hh24:mi:ss');

所以truncate這一許可權,慎開慎放為妙。

另外我使用上面的語句在delete from rollxsb;之後執行,發現顯示是執行成功,但資料是沒有找回來。這說明表閃回,只是對錶結構的回滾操作,對找回資料是沒有用的。

解除安裝Oracle11g R2

1 我的電腦 管理 管理與服務 服務 停止所有oracle服務。2 開始 程式 oracle orahome81 oracle installation products universal installer,單擊 解除安裝產品 全部展開 選中除 oradb11g home1 外的所有目錄,然後刪...

Oracle11g R2學習系列 之八高階資料型別

所謂的高階資料型別,就是大資料型別,即bcnb 助記詞 bc牛逼 xml資料型別。b blob,用來儲存可變長度的二進位制資料。c clob,主要用來儲存可變長度的字元型資料,也就是其他資料庫中提到的文字型資料型別。n nclob,跟clob資料型別相似,也是用來儲存字元型別的資料,不過其儲存的是u...

Oracle 11g R2的解除安裝

前幾天在電腦上安裝了oracle11gr2,由於服務的啟動型別是自動的,所以這幾天每次開機進入桌面的一分鐘之內電腦都是無響應狀態,於是就把oracle所有相關服務都設為了手動啟動。本人習慣於通過cmd用命令啟動服務,發現oracle的那些服務名太長了,實在是太難記了,於是就進入登錄檔把服務名改為容易...