昨天,遇到一件讓自己膽戰心驚的事情,就是數據庫導出的DMP文件由原來的800多M變為了現在的300多M,整整少了500M!
仔細回想,自己平時操作數據庫還是很小心的,就算有失誤,也不可能造成那么大的損失啊!
在這里記錄一下解決過程:
1,首先當然想到了Oracle的重做日志功能,也學習了Oracle自帶的日志分析工具LogMiner的使用方法,等會在另外一篇文章里記錄一下這個工具的使用方法。
2,在使用LogMiner之前,突然想到,能不能把800M的數據庫和300M的數據庫的每張表都單獨導出為DMP文件,進行一下大小的對比
3,在用exp導出時,有一個log選項設定導出日志的文件路徑,此文件記錄了所有導出的數據庫表名和記錄數,用UltraEdit32的正則表達式功能去除了除開表名的其他不相關數據。
4,用Java編寫了一個小程序,讀入所有表名,對每個表名單獨進行exp操作。
5,果然不出所料,其中有一個表被某個管理員清理過,那個表本來就很大,占到了500多M!
至此,問題解決,總結一下,不管碰到什么意外的問題,不要慌張,冷靜分析才是王道!
PS:被刪除數據的那張表竟然占到了500多M,而整個數據庫才800M,很不解,然后看了一下這張表的模式,發現設計的很有問題,這張表里面表達了多對多的關系,所以數據冗余太大,而且這些冗余根本就不是必須的,反而影響了性能!找常理來說,針對多對多的關系應該轉化為兩個多對一的關系。
文章來源:
http://localhost/wp2/?p=48