一、如果是剛剛刪除,那么有兩方法:
金灣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
首先用show parameter undo;命令查看當(dāng)時(shí)的數(shù)據(jù)庫參數(shù)undo_retention設(shè)置。
顯示如下:
undo_management?string?AUTO
undo_retention?integer?10800
undo_suppress_errors?boolean?FALSE
undo_tablespace?string?UNDOTBS1
undo_retention(保持力),10800單位是秒。即3個(gè)小時(shí)。
修改默認(rèn)的undo_retention參數(shù)設(shè)置:
ALTER?SYSTEM?SET?undo_retention=10800?SCOPE=BOTH;
方法1,通過oracle提供的回閃功能:
exec?dbms_flashback.enable_at_time(to_date('2007-07-23?10:21:00','yyyy-mm-dd?hh24:mi:ss'));
set?serveroutput?on
DECLARE?r_temp?hr.job_history%ROWTYPE;
CURSOR?c_temp?IS?SELECT?*?FROM?hr.job_history;
BEGIN
OPEN?c_temp;
dbms_flashback.disable;
LOOP
FETCH?c_temp?INTO?r_temp;
EXIT?WHEN?c_temp%NOTFOUND;
insert?into?hr.job_history(EMPLOYEE_ID,JOB_ID,START_DATE,END_DATE)?values?(r_temp.EMPLOYEE_ID,r_temp.JOB_ID,r_temp.START_DATE,r_temp.END_DATE);
commit;
END?LOOP;
CLOSE?c_temp;
END;
方法2,insert into hr.job_history
select?*?from?hr.job_history?as?of?timestamp?to_timestamp('2007-07-23?10:20:00',?'yyyy-mm-dd?hh24:mi:ss');
這種方法簡(jiǎn)單,容易掌握,功能和上面的一樣時(shí)間為你誤操作之前的時(shí)間,最好是離誤操作比較近的,因?yàn)閛racle保存在回滾保持段里的數(shù)據(jù)時(shí)間有一定的時(shí)間限制由undo_retention 這個(gè)參數(shù)值決定。
二、如果是刪除一段時(shí)間了,但你有比較新的數(shù)據(jù)庫備份,就通過備份來恢復(fù)。新建一個(gè)庫,把備份還原上去,導(dǎo)出表數(shù)據(jù),再導(dǎo)入到現(xiàn)在用的庫中去。
三、如果刪除一段時(shí)間了,并且無備份,但是數(shù)據(jù)在寫入表的時(shí)候同時(shí)會(huì)寫入其它一些關(guān)聯(lián)表的話,那么就嘗試通過寫SQL語句從其它表取數(shù)據(jù)出來insert到被刪除的表中。
四、恢復(fù)到備份表中
create?table?tableName_bak
as
select?*?from?tableName?as?of?TIMESTAMP?to_timestamp('20081126?103435','yyyymmdd?hh24miss');
請(qǐng)使用 Oracle Database 10g 中的閃回表特性,它使得被刪除表的恢復(fù)過程如同執(zhí)行幾條語句一樣簡(jiǎn)單。讓我們來看該特性是如何工作的。
刪除那個(gè)表!
首先,讓我們查看當(dāng)前模式中的表。
SQL select * from tab;
TNAME
TABTYPE
CLUSTERID
--------------------- - -- -- --- ------
RECYCLETEST
TABLE
現(xiàn)在,我們意外地刪除了該表:
SQL drop table recycletest;
Table dropped.
現(xiàn)在讓我們來查看該表的狀態(tài)。
SQL select * from tab;
TNAME
一:表的恢復(fù)
對(duì)誤刪的表,只要沒有使用PURGE永久刪除選項(xiàng),那么從flash back區(qū)恢復(fù)回來希望是挺大的。一般步驟有:
1、從flash back里查詢被刪除的表
select * from recyclebin
2.執(zhí)行表的恢復(fù)
flashback table tb to before drop,這里的tb代表你要恢復(fù)的表的名稱。
二:表數(shù)據(jù)恢復(fù)
對(duì)誤刪的表記錄,只要沒有truncate語句,就可以根據(jù)事務(wù)的提交時(shí)間進(jìn)行選擇恢復(fù),一般步驟有:
1、先從flashback_transaction_query視圖里查詢,視圖提供了供查詢用的表名稱、事務(wù)提交時(shí)間、UNDO_SQL等字段。
如:select * from flashback_transaction_query where
table_name='TEST';
2、執(zhí)行表記錄恢復(fù)
一般先根據(jù)時(shí)間進(jìn)行查詢,查詢語句模式為select * from tb as of timestamp
to_timestamp(time,'yyyy-mm-dd hh24:mi:ss'); tb指表名稱,time指某個(gè)時(shí)間點(diǎn)
如select * from scott.test as of timestamp to_timestamp('2009-12-11
20:53:57','yyyy-mm-dd hh24:mi:ss');
若有數(shù)據(jù),恢復(fù)極為簡(jiǎn)單了,語句為flashback table tb to timestamp
to_timestamp(time,'yyyy-mm-dd hh24:mi:ss');
如flashback table scott.test to timestamp to_timestamp('2009-12-11
20:47:30','yyyy-mm-dd hh24:mi:ss');
注意:alter table testvarchar enable row movement;
這個(gè)命令的作用是,允許Oracle 修改分配給行的rowid。在Oracle
中,插入一行時(shí)就會(huì)為它分配一個(gè)rowid,而且這一行永遠(yuǎn)擁有這個(gè)rowid。閃回表處理會(huì)對(duì)EMP
完成DELETE,并且重新插入行,這樣就會(huì)為這些行分配一個(gè)新的rowid。要支持閃回就必須允許Oracle 執(zhí)行這個(gè)操作
誤刪數(shù)據(jù)(delete)的話,可以在undo空間找到最近的數(shù)據(jù)(根oracle設(shè)置的undo大小有關(guān))一般剛刪除的還是有機(jī)會(huì)找到的,自己根據(jù)SQL修改時(shí)間饑渴
SELECT?*
FROM?表名?AS?OF?TIMESTAMP?to_date('2018-07-19?08:01',?'yyyy-mm-dd?HH24:mi')
WHERE?可以帶條件;
如果是誤刪表(drop)的話。需要在回收站是否啟用,查看回收站中表
select?object_name,original_name,partition_name,type,ts_name,createtime,droptime?from?recyclebin;
flashback?table?表名?to?before?drop;
--或
flashback?table?"BIN$b+XkkO1RS5K10uKo9BfmuA==$0"?to?before?drop;
中間這一串BIN…… 是在回收站表中找到對(duì)應(yīng)的名字
一:表的恢復(fù)\x0d\x0a\x0d\x0a 對(duì)誤刪的表,只要沒有使用PURGE永久刪除選項(xiàng),那么從flash back區(qū)恢復(fù)回來希望是挺大的。一般步驟有:\x0d\x0a\x0d\x0a1、從flash back里查詢被刪除的表\x0d\x0a\x0d\x0a select * from recyclebin\x0d\x0a\x0d\x0a2.執(zhí)行表的恢復(fù)\x0d\x0a\x0d\x0a flashback table tb to before drop,這里的tb代表你要恢復(fù)的表的名稱。\x0d\x0a\x0d\x0a二:表數(shù)據(jù)恢復(fù)\x0d\x0a\x0d\x0a 對(duì)誤刪的表記錄,只要沒有truncate語句,就可以根據(jù)事務(wù)的提交時(shí)間進(jìn)行選擇恢復(fù),一般步驟有:\x0d\x0a\x0d\x0a1、先從flashback_transaction_query視圖里查詢,視圖提供了供查詢用的表名稱、事務(wù)提交時(shí)間、UNDO_SQL等字段。\x0d\x0a\x0d\x0a 如:select * from flashback_transaction_query where \x0d\x0atable_name='TEST';\x0d\x0a\x0d\x0a 2、執(zhí)行表記錄恢復(fù)\x0d\x0a\x0d\x0a 一般先根據(jù)時(shí)間進(jìn)行查詢,查詢語句模式為select * from tb as of timestamp \x0d\x0ato_timestamp(time,'yyyy-mm-dd hh24:mi:ss'); tb指表名稱,time指某個(gè)時(shí)間點(diǎn)\x0d\x0a\x0d\x0a 如select * from scott.test as of timestamp to_timestamp('2009-12-11 \x0d\x0a20:53:57','yyyy-mm-dd hh24:mi:ss');\x0d\x0a\x0d\x0a 若有數(shù)據(jù),恢復(fù)極為簡(jiǎn)單了,語句為flashback table tb to timestamp \x0d\x0ato_timestamp(time,'yyyy-mm-dd hh24:mi:ss');\x0d\x0a\x0d\x0a 如flashback table scott.test to timestamp to_timestamp('2009-12-11 \x0d\x0a20:47:30','yyyy-mm-dd hh24:mi:ss');\x0d\x0a\x0d\x0a注意:alter table testvarchar enable row movement;\x0d\x0a\x0d\x0a 這個(gè)命令的作用是,允許Oracle 修改分配給行的rowid。在Oracle \x0d\x0a中,插入一行時(shí)就會(huì)為它分配一個(gè)rowid,而且這一行永遠(yuǎn)擁有這個(gè)rowid。閃回表處理會(huì)對(duì)EMP \x0d\x0a完成DELETE,并且重新插入行,這樣就會(huì)為這些行分配一個(gè)新的rowid。要支持閃回就必須允許Oracle 執(zhí)行這個(gè)操作
1、安裝Oracle數(shù)據(jù)庫軟件,并且用Oracle管理工具中的Database Configuration Assistant 根據(jù)對(duì)方提供的數(shù)據(jù)庫名建立數(shù)據(jù)庫。數(shù)據(jù)庫版本則要和導(dǎo)出當(dāng)前dmp文件的數(shù)據(jù)庫版本一致。
2、透過腳本文件建立導(dǎo)入dmp文件所需的表空間、用戶、規(guī)則以及相關(guān)的授權(quán)。
3、將dmp文件復(fù)制到新安裝的Oracle數(shù)據(jù)庫服務(wù)器中,準(zhǔn)備導(dǎo)入這個(gè)數(shù)據(jù)庫文件。
4、通過cmd調(diào)出運(yùn)行窗口,用imp命令導(dǎo)入數(shù)據(jù)。
5、通過數(shù)據(jù)庫管理工具連接數(shù)據(jù)庫,就可以查詢到dmp文件中的數(shù)據(jù)了。