前段時間資料庫故障600內部錯誤導致部分兩個schema下部分資料丟失,包含普通表資料和分割槽表資料。嘗試過許多方法都沒能恢復回來,最後通過AUL6做恢復,現在這次的恢復做一個簡單總結
工具/原料
oracle11gR2軟體
AUL6_win32軟體
方法/步驟
建立AUL6的cfg配製檔案,主要包括需要恢復的資料檔案(必須包括system.dbf,否則即使AUL6恢復流程不報錯,卻不會匯出文字資料),格式如下示:
0 0 D:\AUL_TEST\SUN.DBF
0 0 D:\AUL_TEST\SYSTEM01.DBF
將AUL匯出的文字資料通過oracle的sqlloader裝載入與要恢復表結果完全相同的一張臨時表。匯出文字格式如下示:
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20
7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950 30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 20
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10
通過核心主鍵欄位做minus找出需要恢復的紀錄,插入到新建的另外一張臨時表中,指令碼如下示:
create table org_info_temp as (select * from org_info_bk t1 where t1.org_name in (select t2.org_name from org_info_bk t2 minus(select t3.org_name from org_info t3) ));
將校對出的丟失資料通過plsql匯出成sql指令碼,然後批量append插入到需要恢復的表中,當然最好事先做個數據庫備份
心得體會:個人感覺此次恢復過程難度不大,細節很重要,如果不是分割槽表,表資料又很大,單單AUL6匯出資料就需要不少時間,還有一個需要注意的東西就是sqlloader做批量匯入時的文字格式,由其欄位是日期格式的,處理過程中還發現AUL6匯出文字資料時有時會漏了表最後幾個欄位值(如果是空的話)
分享:最後,和大家分享海倫.凱勒的一句話:一個人要想獲得真才實學,必須自己去攀登奇峻險峰
注意事項
oracle資料庫版本的差異
AUL6的版本和與作業系統的相容