歸檔模式和非歸檔模式下的數據恢復區別

首先,歸檔模式和非歸檔模式下的數據恢復是物理恢復。

歸檔模式下試驗流程

1.  創建一個表空間test1 使用test01.dbf

2.  test01.dbf創建一個副本(備份);

3.  做一些操作使test01.dbf文件中的數據發生變化;

4.  切換聯機日誌文件,讓它歸檔;

5.  關閉數據庫,刪除test01.dbf,啓動數據庫找不到文件;

6.  把最初的副本複製過去,或者讓alter database renamed file

7.  然後開啓提示要恢復。最後恢復成功,步驟3的操作也都在

非歸檔模式下的流程:

與歸檔模式基本一致,區別:

1.  步驟4對於非歸檔模式意義不大;

2.  test1 之類都都變成了2

3.  步驟7恢復很快捷,不過恢復方法是有區別的。

總結:

非歸檔模式和歸檔模式都能進行數據文件的恢復,共同點是都必須有依靠一個備份文件才能恢復備份之後的操作。區別在於:

1.  歸檔模式依靠歸檔日誌文件,使用arc放入data buffer cache再寫入以此恢復

2.  非歸檔模式依靠聯機日誌文件,放入data buffer cache再寫入以此恢復


我們知道,聯機日誌文件本身不大,是通過arc把它裏面日誌放到大得多的歸檔日誌文件進行歸檔,以此保存更長久的日誌。


步驟1: 創建一個表空間test1 使用test01.dbf

SQL> archive log list

數據庫日誌模式非存檔模式

自動存檔禁用

存檔終點            USE_DB_RECOVERY_FILE_DEST

最早的聯機日誌序列     86

當前日誌序列           88


SQL> alter database close;//到mount階段

數據庫已更改。

SQL> alter database archivelog;

數據庫已更改。

SQL> archive log list

數據庫日誌模式存檔模式

自動存檔啓用

存檔終點            USE_DB_RECOVERY_FILE_DEST

最早的聯機日誌序列     86

下一個存檔日誌序列   88

當前日誌序列          88

SQL> shutdown immediate

ORA-01109: 數據庫未打開

已經卸載數據庫。

ORACLE 例程已經關閉。

SQL> startup

ORACLE 例程已經啓動。

Total System Global Area 1653518336 bytes

Fixed Size                  2176288 bytes

Variable Size            1073744608 bytes

Database Buffers          570425344 bytes

Redo Buffers                7172096 bytes

數據庫裝載完畢。

數據庫已經打開。

SQL> create tablespace test datafile 'D:/test01.dbf' size 5M;

表空間已創建。



步驟2:test01.dbf創建一個副本(備份);


SQL> host copy D:\test01.dbf E:\test01.dbf

已複製         1 個文件。


這裏數據庫打開也可以複製


步驟3:做一些操作使test01.dbf文件中的數據發生變化;

SQL> conn scott/tiger

已連接。

SQL> create table test tablespace test as select * from emp;//修改了數據

表已創建。


步驟4: 切換聯機日誌文件,讓它歸檔;

SQL> conn sys/xuhan1992 as sysdba

已連接。

SQL>  select group#,sequence#,bytes,members,archived,status from v$log;

   GROUP#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- --- ----------------

        1         88   52428800          1 NO  CURRENT  

        2         86   52428800          1 YES INACTIVE

        3         87   52428800          1 YES INACTIVE

經過多次 alter system switch logfile······

SQL>  select group#,sequence#,bytes,members,archived,status from v$log;

   GROUP#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- --- ----------------

        1         94   52428800          1 YES INACTIVE

        2         95   52428800          1 NO  CURRENT

        3         93   52428800          1 YES INACTIVE

這裏要說明:

CURRENT表示LGWR正在使用

ACTIVE表示LGWR沒有使用,但是實例恢復還需要它,歸檔模式的話它就現在等待歸檔

INACTIVE表示LGWR沒有使用,實例恢復也不需要它,歸檔模式的話它就已經被arc進程拿去歸檔。


現在它是INACTIVE了,歸檔就是在ACTIVEINACTIVE的切換中完成的(我們剛剛是手動切換的)


步驟5:關閉數據庫,刪除test01.dbf,啓動數據庫找不到文件;


SQL> shutdown immediate

數據庫已經關閉。

已經卸載數據庫。

ORACLE 例程已經關閉。

SQL> host del d:\test01.dbf

SQL> startup

ORACLE 例程已經啓動。

Total System Global Area 1653518336 bytes

Fixed Size                  2176288 bytes

Variable Size            1073744608 bytes

Database Buffers          570425344 bytes

Redo Buffers                7172096 bytes

數據庫裝載完畢。//證明數據庫已經到mount狀態,是打開數據文件,發現找不到而出錯的

ORA-01157: 無法標識/鎖定數據文件 5 - 請參閱 DBWR 跟蹤文件

ORA-01110: 數據文件 5: 'D:\TEST01.DBF'



6.  把最初的副本複製過去,或者讓alter database renamed file

關閉數據庫

SQL> host copy e:\test01.dbf d:\test01.dbf

已複製         1 個文件。


7.  然後開啓提示要恢復。最後恢復成功,步驟3的操作也都在

SQL> startup

ORACLE 例程已經啓動。

Total System Global Area 1653518336 bytes

Fixed Size                  2176288 bytes

Variable Size            1073744608 bytes

Database Buffers          570425344 bytes

Redo Buffers                7172096 bytes

數據庫裝載完畢。

ORA-01113: 文件 5 需要介質恢復

ORA-01110: 數據文件 5: 'D:\TEST01.DBF'


SQL> recover datafile 5;

ORA-00279: 更改 2684172 ( 11/16/2013 11:59:29 生成) 對於線程 1 是必需的

ORA-00289: 建議:

G:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\GUJUNPU\ARCHIVELOG\2013_11_16\O1_MF_1_8

8_98FW0GTV_.ARC

ORA-00280: 更改 2684172 (用於線程 1) 在序列 #88

指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}

auto

ORA-00279: 更改 2684951 ( 11/16/2013 12:09:50 生成) 對於線程 1 是必需的

ORA-00289: 建議:

G:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\GUJUNPU\ARCHIVELOG\2013_11_16\O1_MF_1_8

9_98FW0PTH_.ARC

ORA-00280: 更改 2684951 (用於線程 1) 在序列 #89

ORA-00279: 更改 2684956 ( 11/16/2013 12:09:58 生成) 對於線程 1 是必需的

ORA-00289: 建議:

G:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\GUJUNPU\ARCHIVELOG\2013_11_16\O1_MF_1_9

0_98FW0WMT_.ARC

ORA-00280: 更改 2684956 (用於線程 1) 在序列 #90

ORA-00279: 更改 2684959 ( 11/16/2013 12:10:03 生成) 對於線程 1 是必需的

ORA-00289: 建議:

G:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\GUJUNPU\ARCHIVELOG\2013_11_16\O1_MF_1_9

1_98FW0Z24_.ARC

ORA-00280: 更改 2684959 (用於線程 1) 在序列 #91

ORA-00279: 更改 2684963 ( 11/16/2013 12:10:06 生成) 對於線程 1 是必需的

ORA-00289: 建議:

G:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\GUJUNPU\ARCHIVELOG\2013_11_16\O1_MF_1_9

2_98FW1NFR_.ARC

ORA-00280: 更改 2684963 (用於線程 1) 在序列 #92

ORA-00279: 更改 2684977 ( 11/16/2013 12:10:27 生成) 對於線程 1 是必需的

ORA-00289: 建議:

G:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\GUJUNPU\ARCHIVELOG\2013_11_16\O1_MF_1_9

3_98FW1Q9P_.ARC

ORA-00280: 更改 2684977 (用於線程 1) 在序列 #93

已應用的日誌。

完成介質恢復。

SQL> select status from v$instance;

STATUS

------------

MOUNTED

SQL> alter database open; ;

數據庫已更改。

最後也查到內容了,太長就不貼出來了


接着做了一個測試:

1.我切換到非歸檔模式,還是刪除test01.dbf
2.複製、恢復
結果:由於已經歸檔,哪怕現在不是歸檔模式,恢復的時候還是用的歸檔文件

那如果一開始就是非歸檔模式,在恢復的時候會略有不同:

SQL> startup

ORA-01081: 無法啓動已在運行的 ORACLE - 請首先關閉它

SQL> alter database open;

alter database open

*

1 行出現錯誤:

ORA-01113: 文件 6 需要介質恢復

ORA-01110: 數據文件 6: 'E:\TEST02.DBF'

SQL> recover datafile 6;

完成介質恢復。   //這裏沒有像剛纔一樣啓用很多的線程,而這裏就這一行字,而且一下就結束了,速度也快得多。

最後是也是正常恢復。

   和歸檔模式使用歸檔日誌文件恢復不同,非歸檔模式下恢復數據文件使用的是聯機日誌文件(但跟實例恢復有區別,實例恢復是自動執行的),而且更快。

   但是這裏數據量小,而且受到聯機日誌文件大小的限制,不能長久的依賴它來進行數據恢復。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章