Oracle邏輯結構故障的處理方法:
邏輯結構的故障一般指由於人為的誤操作而導致重要數據丟失的情況。在這種情況下數據庫物理結構是完整的也是一致的。對於這種情況采取對原來數據庫的全恢復是不合適的,我們一般采用三種方法來恢復用戶數據。
采用exp/imp工具來恢復用戶數據:
如果丟失的數據存在一個以前用exp命令的備份,則可以才用這種方式。
1. 在數據庫內創建一個臨時用戶:
svrmgrl>create user test_user identifIEd by test;
svrmgrl>grant connect,resource to test_user;
2. 從以前exp命令備份的文件中把丟失數據的表按照用戶方式倒入測試用戶:
$imp system/manager file=export_file_name tables=(lost_data_table_name…) fromuser=lost_data_table_owner touser=test_user constraint=n;
3. 用相應的DML語句將丟失的數據從測試用戶恢復到原用戶。
4. 將測試用戶刪除:
svrmgrl>drop user test_user cascede;
采用logminer來恢復用戶數據:
Logminer是Oracle提供的一個日志分析工具。它可以根據數據字典對在線聯機日志、歸檔日志進行分析,從而可以獲得數據庫的各種DML操作的歷史記錄以及各種DML操作的回退信息。根據這些用戶就可以將由於誤操作而丟失的數據重新加入數據庫內。
1. 確認數據庫的utl_file_dir參數已經設置,如果沒有則需要把這個參數加入Oracle的初始化參數文件,然後重新啟動數據庫。下面例子中假設utl_file_dir=’/opt/Oracle/db01’;
2. 創建logminer所需要的數據字典信息,假設生成的數據字典文本文件為dict.ora:
svrmgrl>execute dbms_logmnr_d.build(dictionary_filename=>'dict.ora', dictionary_location=>'/opt/Oracle/db01’);
3. 確定所需要分析的日志或者歸檔日志的范圍。這可以根據用戶誤操作的時間來確定大概的日志范圍。假設用戶誤操作時可能的日志文件為/opt/oracle/db02/oradata/ORCL/redo3.log和歸檔日志’/opt/Oracle/arch/orcl/orclarc_1_113.ora’。
4. 創建要分析的日志文件列表,按日志文件的先後順序依次加入:
svrmgrl>execute dbms_logmnr.add_logfile(logfilename=>’/opt/Oracle/arch/orcl/orclarc_1_113.ora’,options=>dbms_logmnr.NEW);
svrmgrl> execute dbms_logmnr.add_logfile(logfilename=>’ /opt/Oracle/db02/oradata/ORCL/redo3.log’,options=>dbms_logmnr.ADDFILE);
5. 開始日志分析,假設需要分析的時間在’2003-06-28 12:00:00’和’2003-06-28 13:00:00’之間:
svrmgrl>execute dbms_logmnr.start_logmnr(dictfilename=>’ /opt/Oracle/db01/dict.ora’,starttime=>to_date(’ 2003-06-28 12:00:00’,’YYYY-MM-DD HH:MI:SS’),endtime=>to_date(to_date(‘2003-06-28 13:00:00’,’YYYY-MM-DD HH:MI:SS’));
6. 獲取分析結果:
svrmgrl>select Operation,sql_redo,sql_undo from v$logmnr_contents;
7. 根據分析結果修復數據。
8.結束logmnr:
svrmgrl>dbms_logmnr.end_logmnr;
9. 用適當的方法對原數據庫進行數據庫全備份。利用備份恢復用戶數據:
采用這種方法時並不是在原數據庫進行恢復,而是利用數據庫備份在新的機器上重新建立一個新的數據庫。通過備份恢復在新機器上將數據庫恢復到用戶誤操作前,這樣就可以獲得丟失的數據將其恢復到原數據庫。
1. 在新的機器上安裝數據庫軟件。
2. 對於采用帶庫備份的現場,需要在新的數據庫服務器上安裝調試相應的備份管軟件。
3. 根據用戶誤操作的時間點進行基於時間點的數據庫恢復操作。對於沒有采用帶庫備份的現場,可以選取用戶誤操作前最近的備份磁帶進行恢復;對於才用帶庫備份的點可以通過基於時間恢復點恢復的rman腳本來進行恢復。
4.重新打開數據庫:
svrmgrl>alter database open resetlogs;
5. 從新的數據庫中獲取丟失的用戶數據,通過DML操作將其恢復到原數據庫中。
6. 用適當的方法對原數據庫進行數據庫全備份。