解壓完是乙個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 開啟...