第5章:從開啟的資料庫備份與恢復之從開啟的資料庫備份中進行不完全恢復

mengzhaoliang發表於2008-05-28

/* 2008/05/28
*環境:Windows XP +Oracle10.2.0.1
*Oracle 備份與恢復培訓教程 Kenny Smith,Stephan Haisley著 周琪、韓岷、李渝琳等譯
*第二部分:使用者管理的備份與恢復
*第5章:從開啟的資料庫備份與恢復
*/


練習5.4:從開啟的資料庫備份中進行不完全恢復

1、刪除一個表
對使用者scott解瑣
SQL> alter user scott account unlock;

使用者已更改。

SQL> connect scott/tiger
ERROR:
ORA-28001: the password has expired


更改 scott 的口令
新口令:
重新鍵入新口令:
口令已更改
已連線。

SQL> select id,to_char(time,'yyyy-mm-dd HH24:MI:SS') time from test;

        ID TIME
---------- -------------------
         1 2008-05-28 15:33:31

 


刪除scott.emp表
SQL> drop table scott.emp;

表已刪除。


SQL> insert into test values(2,sysdate);

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> select id,to_char(time,'yyyy-mm-dd HH24:MI:SS') time from test;

        ID TIME
---------- -------------------
         1 2008-05-28 15:33:31
         2 2008-05-28 15:42:50

不完全恢復到刪除表只前,也就是test表只有1資料。

2、重新命名一個歸檔日誌
用基於取消的恢復,當某個歸檔日誌檔案損壞或丟失時,常常使用基於取消的恢復。
確定當前日誌檔案:
SQL> select sequence#,status from v$log;

 SEQUENCE# STATUS
---------- ----------------
         8 CURRENT
         6 INACTIVE
         7 ACTIVE

當前日誌檔案序號為8,找到日誌檔案序號為7的歸檔O1_MF_1_7_43T38PB7_.ARC  重新命名為

O1_MF_1_7_43T38PB7_.ARC.backup。

 

3、檢查恢復
找出需要恢復到某一時間點
SQL> select sequence#,first_change#,to_char(first_time,'yyyy-mm-dd hh24:mi:ss')
  2  first_time from v$log_history;

 SEQUENCE# FIRST_CHANGE# FIRST_TIME
---------- ------------- -------------------
         1        534907 2008-05-28 15:19:11
         2        541971 2008-05-28 15:19:43
         3        550006 2008-05-28 15:34:21
         4        550018 2008-05-28 15:34:47
         5        551127 2008-05-28 15:37:24
         6        551180 2008-05-28 15:38:47
         7        551263 2008-05-28 15:39:34

已選擇7行。

4、還原資料庫
關閉資料庫,把原來備份的資料檔案複製回來
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> host del G:\oracle\product\10.2.0\oradata\risenet\*.dbf
G:\oracle\product\10.2.0\oradata\risenet\*, 是否確認(Y/N)? y

SQL> host copy e:\backup\*.dbf  G:\oracle\product\10.2.0\oradata\risenet
e:\backup\open_backup_output.lst
e:\backup\SYSTEM01.DBF
e:\backup\UNDOTBS01.DBF
e:\backup\SYSAUX01.DBF
e:\backup\USERS01.DBF
e:\backup\RISE.DBF

已複製         6 個檔案。


SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area  272629760 bytes
Fixed Size                  1248476 bytes
Variable Size             104858404 bytes
Database Buffers          159383552 bytes
Redo Buffers                7139328 bytes
資料庫裝載完畢。

5、將資料庫恢復到某一點上

檢視哪些需要恢復
SQL> select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR              CHANGE# TIME
---------- ------- ------- --------------- ---------- --------------
         1 ONLINE  ONLINE                      551181 28-5月 -08
         2 ONLINE  ONLINE                      551205 28-5月 -08
         3 ONLINE  ONLINE                      551218 28-5月 -08
         4 ONLINE  ONLINE                      551236 28-5月 -08
         5 ONLINE  ONLINE                      551249 28-5月 -08

SQL> alter database recover automatic until time '2008-05-28:15:33:31';
alter database recover automatic until time '2008-05-28:15:33:31'
                                                                *
第 1 行出現錯誤:
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01195: 檔案 1 的聯機備份需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1: 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\RISENET\SYSTEM01.DBF'


SQL> alter database recover until cancel using backup controlfile;
alter database recover until cancel using backup controlfile
*
第 1 行出現錯誤:
ORA-00279: 更改 551181 (在 05/28/2008 15:38:48 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
G:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\RISENET\ARCHIVELOG\2008_05_28\O1_MF

_1_6_%U_.ARC
ORA-00280: 更改 551181 (用於執行緒 1) 在序列 #6 中

 

注意:需要歸檔日誌時,需要把剛才重新命名的日誌改回來。


SQL> recover database using backup controlfile until time '2008-05-28:15:33:31';

ORA-00279: 更改 551263 (在 05/28/2008 15:39:34 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
G:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\RISENET\ARCHIVELOG\2008_05_28\O1_MF

_1_7_%U_.ARC
ORA-00280: 更改 551263 (用於執行緒 1) 在序列 #7 中


指定日誌: {=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消。
SQL> alter database open resetlogs;

資料庫已更改。

 

6、驗證資料庫恢復
SQL> select * from test;

        ID TIME
---------- --------------
         1 28-5月 -08

SQL> select * from scott.emp;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
    DEPTNO
----------
      7369 SMITH      CLERK           7902 17-12月-80            800

 

問答:
 1、某個處於備份模式的聯機表空間中的資料檔案並不發生變化,或由資料庫寫程式用更改過的資料塊予以

更新
A、True
B、False

答案:B
在熱備份模式中,資料檔案塊被持續不斷地讀出和寫入,資料檔案首部和重做內容的控制不一樣。


2、為什麼要清理歸檔日誌目的路徑中已經歸檔的重做日誌檔案?
A、這些已經歸檔的重做日誌檔案與資料庫引數檔案衝突了
B、將它們離線以防不測
C、這樣歸檔目的路徑有空間容納更多的歸檔檔案
D、以防一個新資料庫的檔案覆蓋已有的歸檔檔案

答案:BCD

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12778571/viewspace-321869/,如需轉載,請註明出處,否則將追究法律責任。

相關文章