Oracle資料庫使用delete誤刪資料恢復

2022-05-25 05:57:09 字數 1649 閱讀 7924

恢復方式**:

一. 根據時間恢復:

1、查詢資料庫當前時間(目的是為了檢查資料庫時間是否與你電腦時間相近,避免時間不同而將資料恢復到錯誤時間點)

select to_char(sysdate,'

yyyy-mm-dd hh24:mi:ss

') from dual;

2、查詢刪除資料時間點之前的資料

select

*from 表名 as

oftimestamp to_timestamp('

2016-08-11 16:12:11

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

');

(若沒有資料 ,將時間繼續提前)

3、恢復資料

flashback table 表名 to

timestamp to_timestamp('

2016-08-11 16:12:11

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

');4、可能會出現問題,比如:

(1) 報錯:ora-08189:未啟用行移動功能,不能閃回表;

alter

table 表名 enable row movement;

然後再次執行上面sql即可;

(2) 報錯: ora-08194: 在實體化檢視上不允許閃回表操作;

第一步: 得到乙個存有原資料表中記錄的新錶(新錶的結構與原表一致)(摘錄自:

create

table 新建表名 as

select

*from 要恢復資料的表名 as

oftimestamp to_timestamp('

2016-08-11 16:12:11

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

');

不區分資料是否重複:

insert

into 要回覆資料的表 select

*from 新錶 (這裡可以輸入過濾條件);

不匯入重複資料:

insert

into 要恢復資料的表 select

*from 新錶 where

notexists (select

*from 要回覆資料的表 where 要回覆資料的表 .id=新錶.id)

可以指定字段插入(不做闡述):

insert

into tableb (col1, col2, ...) select col1, col2, ... from tablea;

二. 根據資料庫scn恢復資料

1、查詢當前資料庫scn號

select current_scn from v$database;(不能執行的話,切換到sys使用者或system使用者查詢)

查詢到的當前值為:91799986

2、縮小scn號查詢被刪除表資料(若無資料繼續縮小scn,由於資料庫操作不止一人,scn號變化比較多,可以多縮小幾個號)

select

*from 表名 as

of scn 91799980;

3、恢復資料

flashback table 表名 to scn 91799980;

恢復完成。

4、若報錯:結果方案同上。

每日一點點

openfire使用oracle資料庫

openfire本身支援oracle資料庫,也提供了相關sql,這裡主要解決的問題是,openfire雖然提供了這些,但是本身沒有提供oracle的jdbc驅動,這是由於oracle的版權問題造成的,解決方法是 d develop workspace idea openfire target ope...

Oracle記憶體資料庫使用

摘要 查詢是否為記憶體表,enabled 記憶體表 disabled 非記憶體表 普通當前使用者執行 t.table name,t.inmemory,t.inmemory priority,t.inmemory distribute,t.t.table name,t.inmemory,t.inmem...

Oracle資料庫基本使用

oracle建立使用者 角色 授權 建表 oracle資料庫的許可權系統分為系統許可權與物件許可權。系統許可權 database system privilege 可以讓使用者執行特定的命令集。例如,create table許可權允許使用者建立表,grant any privilege 許可權允許使...