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 後,...