資料庫熱備份與完整恢複測試:
1.首先,必需保證資料庫在歸檔模式下。
2.熱備份資料檔案,通過alter tablespace xxx begin backup把資料表空間設為備份狀態,可以手工或在sql下運行host copy把資料檔案複製到指定地方,最後把資料表空間改為正常狀態(alter tablepace xxx end backup)。
3.資料庫恢複:使用語句rcover datafile,alter database open即可以實現資料庫的完整恢複。
具體的步驟如下:
SQL> conn / as sysdba
已串連。
//確定資料庫在歸檔模式下。
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
//查詢資料表空間對應的資料檔案,一般資料表空間名跟對應資料檔案名是相同的,可以跳過這一步。
SQL> select v$tablespace.name,v$datafile.name from v$tablespace, v$datafile
2 where v$tablespace.ts#=v$datafile.ts#;
NAME
------------------------------
NAME
--------------------------------------------------------------------------------
SYSTEM
F:\ORACLE\ORADATA\EBOOK\SYSTEM01.DBF
UNDOTBS1
F:\ORACLE\ORADATA\EBOOK\UNDOTBS01.DBF
CWMLITE
F:\ORACLE\ORADATA\EBOOK\CWMLITE01.DBF
DRSYS
F:\ORACLE\ORADATA\EBOOK\DRSYS01.DBF
EXAMPLE
F:\ORACLE\ORADATA\EBOOK\EXAMPLE01.DBF
INDX
F:\ORACLE\ORADATA\EBOOK\INDX01.DBF
ODM
F:\ORACLE\ORADATA\EBOOK\ODM01.DBF
TOOLS
F:\ORACLE\ORADATA\EBOOK\TOOLS01.DBF
USERS
F:\ORACLE\ORADATA\EBOOK\USERS01.DBF
XDB
F:\ORACLE\ORADATA\EBOOK\XDB01.DBF
已選擇10行。
//將資料表空間設為備份狀態.
SQL> alter tablespace system begin backup;
資料表空間已更改。
//將資料檔案備份到目錄f:\oracle\backuparea下.
SQL> host copy f:\oracle\oradata\ebook\system01.dbf f:\oracle\backuparea\
已複製 1 個檔案。
SQL> alter tablespace system end backup;
資料表空間已更改。
//建表test的目的為測試此恢複是否是完整恢複。
SQL> create table scott.test(t int);
表已建立。
SQL> insert into scott.test values(1);
已建立 1 行。
SQL> insert into scott.test values(2);
已建立 1 行。
SQL> commit;
提交完成。
SQL> shutdown immediate
資料庫已經關閉。 已經卸載資料庫。 ORACLE 常式已經關閉。 //刪除system01.dbf或移動到其他目錄造成資料庫崩潰。 SQL> startup ORACLE 常式已經啟動。 Total System Global Area 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 資料庫裝載完畢。 ORA-01157: 無法標識/鎖定資料檔案 1 - 請大家參閱 DBWR 追蹤檔案 ORA-01110: 資料檔案 1: ’F:\ORACLE\ORADATA\EBOOK\SYSTEM01.DBF’ //將備份的資料檔案複製回目錄f:\oracle\oradata\ebook\下. SQL> $ copy f:\oracle\backuparea\system01.dbf f:\oracle\oradata\ebook\ 已複製 1 個檔案。 //恢複資料檔案system01.dbf。 SQL> recover datafile ’f:\oracle\oradata\ebook\system01.dbf’; 完成介質恢複。 SQL> alter database open; 資料庫已更改。 //此說明資料庫是完整恢複了。 SQL> select * from scott.test; T ---------- 1 2 總結: 1.熱備份必須在資料庫歸檔模式下進行 2.在備份的同時,資料庫的使用者可以進行操作。因此,資料庫對應的物理檔案的內容是不斷變化的,對這些物理檔案內容的更新是保留到有關操作已經寫到重做日至檔案中 後再進行。(這句引自別人敘述,我對後半句正確與否存在疑問,希望大家討論)。 3.歸檔日誌必須是備份後的所有日至才可以實現資料庫的完全恢複。 4.可以備份除臨時檔案以外的所有資料檔案,如果在恢複過程中,發現損壞的是多個資料檔案,即可以採用一個一個資料檔案的恢複方法 5。 特別當損壞的不是系統資料表空間,可以先將損壞的資料表空間檔案離線,這時可以在恢複損壞檔案前開啟 資料庫,再完成恢複。例如: SQL> alter tablespace tools begin backup; 資料表空間已更改。 SQL> $ copy f:\oracle\oradata\ebook\tools01.dbf f:\oracle\backuparea 已複製 1 個檔案。 SQL> alter tablespace tools end backup; 資料表空間已更改。 SQL> shutdown immediate 資料庫已經關閉。 已經卸載資料庫。 ORACLE 常式已經關閉。 //刪除tools01.dbf造成資料庫無法正常啟動. SQL> startup ORACLE 常式已經啟動。 Total System Global Area 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 資料庫裝載完畢。 ORA-01157: 無法標識/鎖定資料檔案 8 - 請參閱 DBWR 追蹤檔案 ORA-01110: 資料檔案 8: ’F:\ORACLE\ORADATA\EBOOK\TOOLS01.DBF’ SQL> alter database datafile ’f:\oracle\oradata\ebook\tools01.dbf’ offline; 資料庫已更改。 SQL> alter database open; 資料庫已更改。 SQL> $ copy f:\oracle\backuparea\tools01.dbf f:\oracle\oradata\ebook\ 已複製 1 個檔案。 SQL>recover datafile ’f:\oracle\oradata\ebook\tools01.dbf’; 介質恢複完成。