flashback有條件的解決使用者誤刪資料

2021-08-14 01:19:21 字數 1502 閱讀 8720

一、如果是剛剛刪除,還在undo保留策略所設定的時間裡面。

首先用show parameter undo;命令檢視當時的資料庫引數undo_retention設定。

顯示如下:

undo_management string auto

undo_retention integer 10800

undo_suppress_errors boolean false

undo_tablespace string undotbs1

undo_retention(保持力),10800單位是秒。即3個小時。

修改預設的undo_retention引數設定:

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(『2017-10-23 10:20:00』, 『yyyy-mm-dd hh24:mi:ss』);

create table tablename_bak as  select * from tablename as of timestamp to_timestamp('20171126 103435','yyyymmdd hh24miss');
這種方法簡單,容易掌握,功能和上面的一樣時間為你誤操作之前的時間,最好是離誤操作比較近的,因為oracle儲存在回滾保持段裡的資料時間有一定的時間限制由undo_retention 這個引數值決定。

二、如果是刪除一段時間了,但你有比較新的資料庫備份,就通過備份來恢復。新建乙個庫,把備份還原上去,匯出表資料,再匯入到現在用的庫中去,這個方法時間長,但也能恢復。

有條件的表聯接

表1和表2在聯接時,希望顯示表1的全部記錄以及表2的部分記錄。嘗試使用下面的 sql 語句 select table1.table2as.from table1 left outer join select from table2 where rightname 計畫編制員 as table2as ...

RAILS有條件的校驗

rails中所有的驗證宣告都可以接受 if 選項,可以指定一段在校驗之前執行的 比如 只有在郵箱位址不為空的時候才驗證郵箱位址的格式 使用proc物件,呼叫時,傳入當前的模型物件作為引數,返回false時,不做校驗 validates format of email,with a za z0 9 a...

myslq有條件插入資料

要求是這樣的 我有乙個表存著基礎資料有乙個欄位是 管理號 我的目的是先查詢最新的管理號按照規則生成新管理號 然後insert到表裡新資料 由於查詢並不鎖表 所以在查詢到insert這步中間會有可能兩線程查詢到相同的管理號?參考了關鍵是如下的mysql語句,插入多條記錄 insert into cli...