我的備份與恢復實驗(歸檔模式下用戶管理的不完全恢復,基于時間點的) os:winxp oracle:9.2.0.1.0 sid:xianhe 一:準備工作 把數據庫改為歸檔模式 SQL> startup mount ORACLE 例程已經啟動。 Total System Global Area 126950220 bytes Fixed Size 453452 bytes Variable Size 109051904 bytes Database Buffers 16777216 bytes Redo Buffers 667648 bytes 數據庫裝載完畢。 SQL> alter database archivelog; 數據庫已更改。 SQL> alter database open; 數據庫已更改。 SQL> 設置成自動歸檔 SQL> alter system set log_archive_start = true scope=spfile; 系統已更改。 確定數據庫在歸檔模式下并是自動存檔的 SQL> archive log list 數據庫日志模式 存檔模式 自動存檔 啟用 存檔終點 D:\oracle\ora92\RDBMS 最早的概要日志序列 2 下一個存檔日志序列 4 當前日志序列 4 SQL> 干凈的關閉數據庫,做一個完全的冷備份。 二:開始實驗 數據庫在很多情況下要進行不完全的恢復,如用戶誤刪除重要的表等。 1:time-based recovery SQL> select * from salgrade; GRADE LOSAL HISAL ---------- ---------- ---------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 把scott用戶的salgrade表刪除 SQL> drop table scott.salgrade; 表已丟棄。 時間是 SQL> select to_char(sysdate, 'yyyy-mm-dd:hh24:mm:ss') from dual; TO_CHAR(SYSDATE,'YY ------------------- 2005-03-18:20:03:51 關閉數據庫 SQL> shutdown immediate; 數據庫已經關閉。 已經卸載數據庫。 ORACLE 例程已經關閉。 然后做一次完全數據庫冷備份,保留現場,萬一恢復不成功可以恢復現場。以下恢復不是用的這個備份。 把原先備份的數據文件(不包括控制文件和日志文件)還原回去。 數據庫啟動到mount狀態 SQL> startup mount ORACLE 例程已經啟動。 Total System Global Area 126950220 bytes Fixed Size 453452 bytes Variable Size 109051904 bytes Database Buffers 16777216 bytes Redo Buffers 667648 bytes 數據庫裝載完畢。 SQL> recover database until time '2005-03-18:20:03:51'; 完成介質恢復。 SQL> alter database resetlogs; alter database resetlogs * ERROR 位于第 1 行: ORA-02231: 缺少或無效的 ALTER DATABASE 選項 SQL> alter database open resetlogs; 數據庫已更改。 SQL> select * from scott.salgrade; GRADE LOSAL HISAL ---------- ---------- ---------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 成功恢復,完成 |