恢復truncate資料 日常小記

2021-08-09 06:36:08 字數 3006 閱讀 6968

解壓完是乙個sql指令碼檔案

在資料庫裡執行,會建立乙個package和package body,要用sys使用者操作,以下操作均為sys使用者

然後使用如下語句執行:

select file_name from dba_data_files f, dba_tables t where t.owner=』test』 and t.table_name=』t1』 and t.tablespace_name = f.tablespace_name;

查出丟失的表所在的資料檔案,生產上要及時備份,防止覆蓋

隨後執行

執行 set serveroutput on 可以讓匿名塊顯示執行結果

–開始恢復

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 := 'test'; --table owner

tgttable := 't1'; --table name

datapath := '/var/db_file/download/'; --必須和test.t1表所在的資料檔案的目錄相同

datadir := 'fy_data_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;

/pl/sql procedure

successfully

completed

16:50:23: directory name: fy_data_dir2

16:50:23: recover tablespace: fy_rec_data; data file: fy_rec_data.dat

16:50:23: restore tablespace: fy_rst_data; data file: fy_rst_data.dat

16:50:24: recover table: scott.test$

16:50:24: restore table: scott.test$$

16:50:29: [fill_blocks] data blocks formatted.

16:50:29: [copy_file] begin copy file: fy_data_dir2\fy_rec_data.dat =>

fy_data_dir2\fy_rec_data_copy.dat

16:50:29: [copy_file] completed.

16:50:29: copy file

of recover tablespace: fy_rec_data_copy.dat

16:50:29: begin

to recover table scott.test

16:50:30: [restore_table] trying to restore data to scott.test$$

16:50:30: [restore_table] expected records in this round: 238

16:50:30: [restore_table] 238 records recovered

16:50:37: [restore_table] trying to restore data to scott.test$$

16:50:37: [restore_table] expected records in this round: 0

16:50:37: [restore_table] 0 records recovered

16:50:37: 5 truncated data blocks found.

16:50:37: 238 records recovered in backup table scott.test$$

16:50:37: recovery completed.

pl/sql procedure

successfully

completed.

結果大致如上,會有乙個中間表為 ***$$,複製此表即可恢復資料

4.收尾

恢復資料後,把

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

drop tablespace fy_rec_data including contents;

drop tablespace fy_rst_data including contents;

$ cd /var/db_file/download/

$ rm fy_rec_data_copy.dat fy_rec_data.dat fy_rst_data.dat

Truncate 表之恢復

truncate 表之恢復 1.測試環境 linux 172.28.145.21 db testdb01 2.原理 truncate 不會逐個清除使用者資料塊上的資料,而僅僅重置資料字典和元資料塊上的元資料 如儲存斷頭和擴充套件段圖 也就是說,此時,基本資料表並未破壞,而是被系統 等待被重新分配 因...

AUL恢復truncate刪除的表

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

日常小知識

關閉php警告報錯 error reporting 0 linux查詢檔案命令 find name print 獲取網頁內容 file get contents url 開啟mysql 慢查詢 log slow queries long query time 1 log long format 開啟...