按照Oracle官方文檔,在用logminer獲取數據字典文件時,需要設置UTL_FILE_DIR參數,然而設置這個參數必須要重新啟動數據庫,在某些7×24的關鍵業務是做不到的,是否有其他的方法能夠構造字典信息呢?答案是肯定的。
具體的步驟為:
1.數據庫設置為歸檔
2.添加supplement log data
3. 將數據字典存儲在redolog中,EXECUTE DBMS_LOGMNR_D.BUILD ( - 2 OPTIONS=>DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
4.查看數據字典對應的歸檔日志
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN='YES'; -- 查詢開始
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_END='YES'; -- 查詢結束的歸檔日志
5.通過LogMiner,解析歸檔日志,將歸檔日志解析成sql語句
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
6.查詢v$logmnr_contents的sql_redo,將結果spool到某個文件中。
7.通過其他相同版本的測試數據庫創建數據字典文件,調出其中的create_table語句,放入到你輸出spool的文件中。
8.驗證其中的數據,與過程生成的數據字典文件比較,重要的ID值都是一樣的,測試後我們構造的數據字典文件可用。
最後鄙視一下Oracle,到11gR2了仍然需要設置這個參數,應該早就改成自己設置directory了。