❶ Oracle 使用Flashback方式數據恢復,但是表中有CLOB欄位,提示:快照舊了
使用閃回資料庫,閃回後以read only模式打開,導出該表,然後重啟資料庫,做recover,打開,再導入;
使用基於時間點的恢復,和1差不多;
如果是11g版本以上,考慮以後用閃回數據歸檔。
❷ 求教Oracle11g中的閃回技術
1、Flashback Database(利用閃回日誌恢復)
Oracle Flashback Database特性允許通過SQL語句Flashback Database語句,讓資料庫前滾到當前的前一個時間點或者SCN,而不需要做時間點的恢復。閃回資料庫可以迅速將資料庫回到誤操作或人為錯誤的前一個時間點,如Word中的"撤消"操作,可以不利用備份就快速的實現基於時間點的恢復。Oracle通過創建新的Flashback Logs(閃回日誌),記錄資料庫的閃回操作。如果希望能閃回資料庫,需要設置如下參數:DB_RECOVER_FILE_DEST日誌的存放位置,DB_RECOVER_FILE_DEST_SIZE恢復區的大小。在創建資料庫的時候,Oracle將自動創建恢復區,但默認是關閉的,需要執行alter database flashback on命令。
例:執行Flashback Database命令格式。
SQL>flashback database to time to_timestamp(xxx);
SQL>flashback database to scn xxx
2、Flashback Table(利用UNDO保留信息恢復)
Oracle Flashback Table特性允許利用Flashback Table語句,確保閃回到表的前一個時間點。與Oracle 9i中的Flashback Query相似,利用回滾段信息來恢復一個或一些表到以前的一個時間點(一個快照)。要注意的是,Flashback Table不等於Flashback Query,Flashback Query僅僅是查詢以前的一個快照點而已,並不改變當前表的狀態,而Flashback Table將改變當前表及附屬對象一起回到以前的時間點。
語法:
flashback table tablename to timestamp xxx或
flashback table tablename to scn xxx
注意:如果需要閃回一個表,需要以下條件:
需要有flashback any table的系統許可權或者是該表的flashback對象許可權;
需要有該表的select,insert,delete,alter許可權;
必須保證該表row movement。
例:執行將test表閃回到2011年5月7日下午3點。
SQL>flashback table test to timestamp to_timestamp(』2011-05-07 15:00:00』,』yyyy-mm-dd hh24:mi:ss』);
3、Flashback Drop(利用回收站功能恢復)
註:由於目前的環境為了實現OGG的DDL同步,關閉了回收站功能,故這個功能不可用。
4、Flash Version Query(利用UNDO保留信息恢復)
Oracle Flashback Version Query特性,利用保存的回滾信息,可以看到特定的表在時間段內的任何修改,如電影的回放一樣,可以了解表在該期間的任何變化。Flashback version query一樣依賴於AUM,提供了一個查看行改變的功能,能找到所有已經提交了的行的記錄,分析出過去時間都執行了什麼操作。Flashback version query採用VERSIONS BETWEEN語句來進行查詢,常用的方法:
·VERSIONS_SCN - 系統改變號
·VERSIONS_TIMESTAMP - 時間
例如:在test表中,時間1插入一條記錄,時間2刪除了這條記錄,對於時間3執行select * from test當然查詢不到這條記錄,只能看到該表最後的提交記錄。這時如果利用Flash Table或者是Flash Query,只能看到過去的某一時間點的一個快照,而利用Flashback Version Query,能夠把時間1、時間2的操作給記錄下來,並詳細的查詢出對表進行的任何操作。
基於SCN的閃回查詢:
SQL> select count(*) from lm_mtrp_syn_channelinfo as of scn 708000000;
COUNT(*)
----------
21
基於時間段的閃回查詢:
SQL>select versions_starttime,versions_endtime, versions_xid,versions_operation,id
from test versions
between timestamp minvalue and maxvalue
order by versions_starttime;
5,Flashback Transaction Query(利用UNDO保留信息恢復)
Oracle Flashback Transaction Query特性確保檢查資料庫的任何改變在一個事務級別,可以利用此功能進行診斷問題、性能分析和審計事務。它其實是Flashback Version Query查詢的一個擴充,Flashback Version Query說明了可以審計一段時間內表的所有改變,但是也僅僅是能發現問題,對於錯誤的事務,沒有好的處理辦法。而Flashback Transaction Query提供了從FLASHBACK_TRANSACTION_QUERY視圖中獲得事務的歷史以及Undo_sql(回滾事務對應的sql語句),也就是說審計一個事務到底做了什麼,甚至可以回滾一個已經提交的事務。
例:Flashback Transaction Query的操作實例。
(1)在test表中刪除記錄,獲得事務的標識XID,然後提交。
SQL>delete from test where id=2;
SQL>select xid from v$transaction;
XID
----------------
04001200AE010000
SQL>commit;
在測試中方便起見,在事務沒有提交的時候,獲得事務的XID為04001F0035000000。實際情況下,不可能去跟蹤每個事務,想要獲得已提交事務的XID,就必須通過上面的Flashback Version Query。
(2)進行Flashback Transaction Query
SQL>select * from FLASHBACK_TRANSACTION_QUERY
where xid=』04001F0035000000』;
UNDO_SQL
insert into "FLASHTEST"."TEST"("ID") values (』2』);
注意:這個刪除語句對應的是1個Insert語句,如果想回滾這個事務,執行這個Insert語句即可。
可以看到,Flashback Transaction Query主要用於審計一個事務,並可以回滾一個已經提交的事務。如果確定出錯的事務是最後一個事務,我們利用Flashback Table或者Flashback Query就可以解決問題。但是,如果執行了一個錯誤的事務之後,又執行了一系列正確的事務,那麼上面的方法就無能為力,利用Flashback Transaction Query可以查看或回滾這個錯誤的事務。
另:ORACLE 11G還多了一個閃回數據歸檔的功能,即可將UNDO的信息進行歸檔,這個功能對於一些比較重要的表,
❸ oracle資料庫中閃回和回收站不是一個意思嗎
這里說點自己的理解抄,不寫那些名詞解釋了。
閃回功能和回收站並不一樣。
舉例來說,閃回一般操作就是短時間內的恢復(DML操作,個人感覺類似於win的ctrl+z(不過沒有win的好用))。比如說你剛剛刪除了數據,那麼利用閃回功能可以回到刪除之前。但是如果表的交易量很大,或者時間過長,那麼就不能回到你需要的時間(比如你想回到一天前,那閃回是基本不可能實現的)
回收站則不同,它主要是刪除段的放置空間。和windows的回收站一個意思(什麼見過回收站能還原一段在word中刪除的內容的),就是將刪除的段放置在這里。oracle中drop的段(主要是表),如果不加purge(加了就是徹底刪除),那麼就會放置在回收站中,就好像我們在win系統中的刪除,如果直接刪除一個文件,那麼在回收站中,如果是shift+del那麼就是徹底刪除,不可恢復。
其實回收站的表是可以看到的,就是那些一堆亂碼(BIN$開頭的字元串)表名的表。可以用show recyclebin查到,也可以zairecyclebin的視圖中看到。
❹ oracle涓鍏充簬flashback闂鍥炵殑浠嬬粛
1銆佸繀欏昏懼畾undo淇濈暀鏃墮棿瓚沖熷ぇ浠ヨ兘澶熼噸鏋勯渶瑕侀棯鍥炵殑鏁版嵁
ALTER SYSTEM SET UNDO_RETENTION=SECONDS; seconds鍊兼槸undo鏁版嵁淇濇寔鐨勭掓暟銆
Flashback view鏄鐢眜ndo retention interval鏉ラ檺鍒剁殑銆
2銆佸寘DBMS_FLASHBACK鎻愪緵浜嗛渶奼傛帴鍙
call dbms_flashback.enable_at_time錛堚2010-10-19:11:00:00鈥欙級錛
call dbms_flashback.disable錛堬級錛
-------------------------------------
enable_at_time錛氫細璇濈駭鐨別nable flashback錛屾槧鍍忔椂闂磋璁懼畾涓烘渶鎺ヨ繎鎸囧畾鏃墮棿鎴崇殑scn
enable_at_system_change_number:灝嗘暟鎹搴撻棯鍥炲埌鎸囧畾鐨剆cn鍙楓
get_system_change_number:榪斿洖褰撳墠鐨剆cn銆
disable錛氳繖涓瀛樺偍榪囩▼鍏佽告垜浠鍦ㄦ暣涓浼氳瘽鍐呭仠姝flashback騫跺皢浣犲甫鍥炲綋鍓嶆椂闂寸殑鏁版嵁鐘舵併
----------
dbms_flashback.enable瀛樺偍榪囩▼涓嶅彲浠ュ湪鏈夋椿鍔ㄤ簨鍔$殑鏃跺欐墽琛岋紝騫朵笖錛岃繖涓鍖呬笉鑳界敤sys韜浠芥墽琛屻
鍦ㄤ嬌鐢―BMS_FLASHBACK.ENABLE_AT_TIME鍓嶏紝浣犲繀欏昏懼畾浣犵殑NLS_DATE_FORMAT鐨勭簿紜紼嬪害錛孫racle榛樿ょ殑鏄綺劇『鍒板ぉ
3銆乼imestamp 涓巗cn錛堢郴緇熸敼鍙樺彿錛 鐨勫瑰簲鍏崇郴
浜嬪疄涓婏紝Oracle鍦ㄥ唴閮ㄩ兘鏄浣跨敤scn錛屽嵆浣誇綘鎸囧畾鐨勬槸as of timestamp錛宱racle涔熶細灝嗗叾杞鎹㈡垚scn錛岀郴緇熸椂闂存爣璁頒笌scn涔嬮棿瀛樺湪涓寮犺〃錛屽嵆SYS涓嬬殑SMON_SCN_TIME琛ㄣ
姣忛殧5鍒嗛挓錛岀郴緇熶駭鐢熶竴嬈$郴緇熸椂闂存爣璁頒笌scn鐨勫尮閰嶅苟瀛樺叆sys.smon_scn_time琛錛岃ヨ〃涓璁板綍浜嗘渶榪1440涓緋葷粺鏃墮棿鏍囪頒笌scn鐨勫尮閰嶈板綍錛岀敱浜庤ヨ〃鍙緇存姢浜嗘渶榪戠殑1440鏉¤板綍錛屽洜姝ゅ傛灉浣跨敤as of timestamp鐨勬柟寮忓垯鍙鑳絝lashback鏈榪5澶╁唴鐨勬暟鎹錛堝亣璁劇郴緇熸槸鍦ㄦ寔緇涓嶆柇榪愯屽苟鏃犱腑鏂鎴栧叧鏈洪噸鍚涔嬬被鎿嶄綔鐨勮瘽錛夈係YS.SMON_SCN_TIME鏈澶氭嫢鏈1440鏉¤板綍銆傝繖涓鏈澶ц板綍鏁版槸榪欐牱璁$畻鍑烘潵鐨勶紝ORACLE騫沖潎姣5鍒嗛挓鍚屾ヤ竴嬈¤ヨ〃鏁版嵁錛屾渶澶т繚瀛樻渶榪5澶╃殑璁板綍錛屽洜姝ゅ氨鐩稿綋浜12錛堟瘡灝忔椂鏇存柊嬈℃暟錛*24*5=1440銆
鍙浠ョ敤sql楠岃瘉涓涓嬶細
Sql浠g爜
select scn,to_char錛坱ime_dp,'yyyy-mm-dd hh24:mi:ss'錛 from sys.smon_scn_time;
10g涓鎻愪緵浜嗕袱涓鍑芥暟scn_to_timestamp錛堬級 鍜宼imestamp_to_scn錛堬級 鐢ㄦ潵鎵ц屾椂闂存埑鍜孲CN鐨勮漿鎹銆
涓嬮潰浣跨敤闂鍥炶繘琛屾紨紺轟竴涓嬶細
1銆佺櫥闄嗗埌鏁版嵁搴撱
Sql浠g爜
C:sqlplus tivan/tivan
SQL*Plus: Release 10.2.0.1.0 - Proction on 鏄熸湡浜 10鏈 19 22:24:03 2010
Copyright 錛坈錛 1982, 2005, Oracle. All rights reserved.
榪炴帴鍒幫細
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Proction
With the Partitioning, OLAP and Data Mining options
2銆佹煡鐪嬭〃鐨勮板綍銆
Sql浠g爜
SQL select count錛*錛 from t1
2 ;
COUNT錛*錛
----------
8302
3銆佸垹闄ゆ墍鏈夌殑璁板綍鎻愪氦銆
Sql浠g爜
SQL delete from t1
2 ;
宸插垹闄8302琛屻
SQL commit;
鎻愪氦瀹屾垚銆
4銆佽幏寰楀綋鍓峉CN
濡傛灉鑳藉熺『鍒囩煡閬撳垹闄や箣鍓峉CN鏈濂斤紝濡傛灉涓嶇煡閬擄紝鍙浠ヨ繘琛岄棯鍥炴煡璇㈠皾璇曘
Sql浠g爜
SQL select dbms_flashback.get_system_change_number from al;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1482649
SQL select count錛*錛 from t1 as of scn 1482600;
COUNT錛*錛
----------
8302
SCN=1482600鏃訛紝t1琛ㄤ腑鐨勬墍鏈夎板綍閮借繕鍦ㄣ
5銆佸埄鐢ㄩ棯鍥炴仮澶嶆暟鎹銆
鏌ョ湅楠岃瘉涓涓嬶細
Sql浠g爜
SQL insert into t1 select * from t1 as of scn 1482600;
宸插壋寤8302琛屻
SQL commit;
鎻愪氦瀹屾垚銆
緇撴灉OK
鎴栬呰繕鍙浠ュ備笅鎿嶄綔
Sql浠g爜
SQLflashback table t1 to scn 1482600;
SQL commit;
Commit complete.
--瀵逛簬drop table t1 鐨勬搷浣渇lashback
SQL drop table t1;
SQLCOMMIT;
SQL flashback table t1to before drop;
SQLcommit;
瀵逛簬鎬庝箞鍙栫殑SCN鍙浠ヤ嬌鐢╰imestamp_to_scn錛堬級 鍑芥暟錛屽傦細
Sql浠g爜
select timestamp_to_scn錛坱o_timestamp錛-10-19 21:00:00','YYYY-MM-DD HH:MI:SS'錛夛級 from al;
❺ 高手指點oracle閃回表有哪些限制
用網路能搜大把出來吧。。。。
使用的限制和注意事項:
1. 使用閃回表語句恢復表到出現人為或應用錯誤事件之前的狀態。
2. 可以閃回到過去多長時間取決於系統中undo數據量的大小。
3. 並且oracle資料庫無法恢復通過DDL語句修改了結構的表。
4.oracle強烈建議設置UNDO_MANAGEMENT為AUTO(自動管理回滾數據)。另外,設置UNDO_RETENTION (回滾數據的保留時間)為一個合適的時間間隔。
5.你不能回滾flash back語句,然而你可以使用另外一個flash back語句並且指定一個當前時間之前的時間點。在聲明一個flash back語句之前先記錄下當前的SCN號。
另外如果要使用閃回表
1. 我們需要有在指定表上有flashback的許可權或者FLASHBACK ANYTABLE許可權才能閃回一個表到之前的時間點;
2.必須有對表的SELECT, INSERT, DELETE, andALTER object privileges一系列許可權;
3.除非是使用TO BEFORE DROP,對於分區表的閃回都應該開啟Row movement (alter table test_move enable row movement;)
一般用於分區表,某一行更新時,如果更新的是分區列,並且更新後的列值不屬於原來的這個分區,如果開啟了這個選項,就會把這行從這個分區中delete 掉,並加到更新後所屬的分區。相當於一個隱式的delete+insert,但是不會觸發insert/delete觸發器。如果沒有開啟這個選項,就會在更新時報錯。
4.恢復一個表到一個還原點,必須擁有SELECT ANY DICTIONARY orFLASHBACKANY TABLE system privilege or theSELECT_CATALOG_ROLE role。