Oracle impdp的實際操作方案詳解
以下的文章主要介紹的Oracle impdp的具體操作方法,如果你是Oracle impdp實際應用方面的新手,你就可以通過以下的文章對Oracle impdp是如何正確使用的方法有一個更好的了解,以下就是文章的詳細內容的介紹。
立馬打開查詢窗口,查詢相關的表,結果返回:no rows selected.數(shù)據(jù)已經(jīng)全部清掉了。
一瞬間一下子就懵了:我Kao,搞什么鬼?怎么能把生產(chǎn)機的數(shù)據(jù)truncate掉?是不是腦子進水了?馬上打電話給H,電話占線,Shit,再打,還是占線...... 急,先上洗手間,掏出手機,繼續(xù)打,終于通了,第一句話:怎么在生產(chǎn)機上導數(shù)據(jù)?為什么動生產(chǎn)機的數(shù)據(jù)?
H給出的答復是由于剛才導網(wǎng)上查詢數(shù)據(jù)時誤操作把一張表的數(shù)據(jù)刪掉了,沒有把問題反饋上來,直接就想通過18:30左右的備份恢復該表,由于缺乏IMPDP的相關知識,以為導出文件有的表,在Oracle impdp的時候都必須制定,結果把其他十來各表都全部truncate。
出現(xiàn)問題沒有反饋,掩蓋問題試圖自己解決,由于缺乏相關的知識,結果誤操作導致更嚴重的后果。
由于有下班后的Expdp備份,本來是一張表的數(shù)據(jù),而且該表數(shù)據(jù)在下班后不會變化,簡單的通過Oracle impdp就可以恢復,結果用truncate選項把其他表統(tǒng)統(tǒng)清除掉,當時心里那個苦啊!
事已至此,沒有辦法,馬上組織其他人手先通過備份恢復數(shù)據(jù)。
1.把大表和小表分開,大表先drop索引再導入,小表直接導入。
2.大表導入完畢后同步建立索引。
其他表都比較順利,最后有兩張表(大表A和中表B),死活導不進去。當時已經(jīng)是凌晨0點10分左右。出現(xiàn)的現(xiàn)象是:
大表A導入了1.5個小時,沒有任何反應,中表B導入時通過后臺查詢發(fā)現(xiàn)有其他進程lock該表,進程是ORACLE.EXE(DW01)。
再等了十分鐘,還是如此,覺得不能這樣坐以待斃,重啟數(shù)據(jù)庫,重寫執(zhí)行導入數(shù)據(jù),還是如此。
大表A的導入沒有任何異常情況,就是Hang著不動,這時候想到該表是復合分區(qū)表,如果改成普通表是否可以?通過rename原來的表,通過CTAS創(chuàng)建普通表,重新導入,It works!數(shù)據(jù)導入后,通過insert into as select導入到正式表,然后通過rename等操作把正式表恢復到正常的表名。
大表A導完后,發(fā)現(xiàn)中表B還是在等待ORACLE.EXEC(DW01),本想著通過alter system kill session把相關的session kill掉,半個小時過去,沒有kill掉,只是mark kill。這時候查詢session時發(fā)現(xiàn)相關schema是XDB,把XDB用戶account lock,再導入,還是如此。
這時候已經(jīng)凌晨一點,就剩下這張表,頭都有點大了,再仔細分析session的信息,發(fā)現(xiàn)module是Data pump,不是Oracle的必須后臺進程,同時想起幾年前在windows平臺可以用orakill殺掉windows線程,抱著試試的心態(tài),用 orakill殺掉了ORACLE.EXE(DW01)的線程,然后用Oracle impdp嘗試導入,God,It works!謝天謝地,總算,數(shù)據(jù)都恢復了,這時候是凌晨1:30.
索引都創(chuàng)建完畢后,再次一張一張表檢查一次,確保數(shù)據(jù)和索引都存在。
最后執(zhí)行dbms_stats.gather_table_stats過程對相關的表執(zhí)行一遍信息,并設定定時任務對數(shù)據(jù)庫進行備份。
【編輯推薦】















 
 
 
 
 
 
 