Truncate 表之恢復

2021-07-26 16:46:22 字數 2484 閱讀 6381

truncate 表之恢復

1.     測試環境:

linux:172.28.145.21

db:testdb01

2.     原理

truncate 不會逐個清除使用者資料塊上的資料,而僅僅重置資料字典和元資料塊上的元資料(如儲存斷頭和擴充套件段圖)。

也就是說,此時,基本資料表並未破壞,而是被系統**,等待被重新分配—因此,要恢復被truncate的資料,需要及時備份所在的資料檔案。

3.     儲存過程包:

4.     測試模擬:

建立表:

create

table

t_truncate

asselect

* from

tab;

truncate 表資料:

truncate

table

shiyu

.t_truncate;

恢復:執行fy_recover_data.sql 儲存過程

開始恢復:執行下面語句:

declare

tgtowner varchar2(30

); tgttable varchar2(30

); datapath varchar2

(4000);

datadir varchar2(30

); rects varchar2(30

); recfile varchar2(30

); rstts varchar2(30

); rstfile varchar2(30

); blksz number;

rectab varchar2(30

); rsttab varchar2(30

); copyfile varchar2(30

); begin

tgtowner :=

'shiyu'

;--table owner

tgttable :=

't_truncate'

;--table name

datapath :=

'/data/oradata/test01/';--

必須和t_truncate

表所在的資料檔案目錄相同

datadir :=

'dump_dir';-

oracle

中目錄的名字,可以修改

fy_recover_data.

prepare_files

(tgtowner

,tgttable

,datapath

,datadir

,rects

,recfile

,rstts

,rstfile

,blksz);

fy_recover_data.

fill_blocks

(tgtowner

,tgttable

,datadir

,rects

,recfile

,rstts,8

,tgtowner

,tgtowner

,rectab

,rsttab

,copyfile);

fy_recover_data.

recover_table

(tgtowner

,tgttable

,tgtowner

,rectab

,tgtowner

,rsttab

,datadir

,datadir

,recfile

,datadir

,copyfile

,blksz);

end; /

注:執行上面的

sql產生

2個表空間(

2個資料檔案),還有1個

copy

檔案。

如下截圖:

--把恢復的資料從shiyu. truncate$$ 中插入到shiyu. truncate表(shiyu. truncate$$ 中是shiyu. truncate表truncate之前的資料)

insert

into

shiyu

.t_truncate

select

* from

shiyu

.t_truncate$$;

這時在查詢剛才truncate掉的表

5.     收尾:

資料恢復後,把恢復時產生的2個表空間刪除,再刪除對應資料檔案

drop

tablespace

fy_rec_data

including

contents

anddatafiles;

drop

tablespace

fy_rst_data

including

contents

anddatafiles;

AUL恢復truncate刪除的表

背景 接到使用者申告,新畢業的兄弟不小心把資料庫中的3個關鍵表給truncate了,由於這個業務還在測試階段,系統沒有任何形式的備份。客戶的os平台是windows平台,資料庫是oracle9207 對於這種情況,嘗試了使用aul來進行恢復。這裡解釋其中乙個表 xm fxl 的恢復 恢復前的準備一 ...

恢復truncate資料 日常小記

解壓完是乙個sql指令碼檔案 在資料庫裡執行,會建立乙個package和package body,要用sys使用者操作,以下操作均為sys使用者 然後使用如下語句執行 select file name from dba data files f,dba tables t where t.owner ...

truncate 釋放表空間

truncate操作,同沒有where條件的delete操作十分相似,只是把表裡的資訊全部刪除,但是表依然存在.例如 truncate table xx truncate不支援回滾,並且不能truncate乙個帶有外來鍵的表,如果要刪除首先要取消外來鍵,然後再刪除.truncate table 後,...