Oracle數(shù)據(jù)庫的熱備份與完整恢復測試
1.首先,必需保證數(shù)據(jù)庫在歸檔模式下。
2.熱備份數(shù)據(jù)文件,通過alter tablespace xxx begin backup把表空間設為備份狀態(tài),可以手工或在sql下運行host copy把數(shù)據(jù)文件復制到指定地方,最后把表空間改為正常狀態(tài)(alter tablepace xxx end backup)。
3.數(shù)據(jù)庫恢復:使用語句rcover datafile,alter database open即可以實現(xiàn)數(shù)據(jù)庫的完整恢復。
具體的步驟如下:
SQL> conn / as sysdba
已連接。
//確定數(shù)據(jù)庫在歸檔模式下。
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
//查詢表空間對應的數(shù)據(jù)文件,一般表空間名跟對應數(shù)據(jù)文件名是相同的,可以跳過這一步。
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:ORACLEORADATAEBOOKSYSTEM01.DBF
UNDOTBS1
F:ORACLEORADATAEBOOKUNDOTBS01.DBF
CWMLITE
F:ORACLEORADATAEBOOKCWMLITE01.DBF
DRSYS
F:ORACLEORADATAEBOOKDRSYS01.DBF
EXAMPLE
F:ORACLEORADATAEBOOKEXAMPLE01.DBF
INDX
F:ORACLEORADATAEBOOKINDX01.DBF
ODM
F:ORACLEORADATAEBOOKODM01.DBF
TOOLS
F:ORACLEORADATAEBOOKTOOLS01.DBF
USERS
F:ORACLEORADATAEBOOKUSERS01.DBF
XDB
F:ORACLEORADATAEBOOKXDB01.DBF
已選擇10行。
//將表空間設為備份狀態(tài).
SQL> alter tablespace system begin backup;
表空間已更改。
//將數(shù)據(jù)文件備份到目錄f:oraclebackuparea下.
SQL> host copy f:oracleoradataebooksystem01.dbf f:oraclebackuparea
已復制 1 個文件。
SQL> alter tablespace system end backup;
表空間已更改。
//建表test的目的為測試此恢復是否是完整恢復。
SQL> create table scott.test(t int);
表已創(chuàng)建。
SQL> insert into scott.test values(1);
已創(chuàng)建 1 行。
SQL> insert into scott.test values(2);
已創(chuàng)建 1 行。
SQL> commit;
提交完成。
SQL> shutdown immediate
數(shù)據(jù)庫已經(jīng)關閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關閉。
//刪除system01.dbf或移動到其他目錄造成數(shù)據(jù)庫崩潰。
SQL> startup
ORACLE 例程已經(jīng)啟動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數(shù)據(jù)庫裝載完畢。
ORA-01157: 無法標識/鎖定數(shù)據(jù)文件 1 - 請大家參閱 DBWR 跟蹤文件
ORA-01110: 數(shù)據(jù)文件 1: 'F:ORACLEORADATAEBOOKSYSTEM01.DBF'
//將備份的數(shù)據(jù)文件復制回目錄f:oracleoradataebook下.
SQL> $ copy f:oraclebackupareasystem01.dbf f:oracleoradataebook
已復制 1 個文件。
//恢復數(shù)據(jù)文件system01.dbf。
SQL> recover datafile 'f:oracleoradataebooksystem01.dbf';
完成介質(zhì)恢復。
SQL> alter database open;
數(shù)據(jù)庫已更改。
//此說明數(shù)據(jù)庫是完整恢復了。
SQL> select * from scott.test;
T
----------
1
2
總結(jié):
1.熱備份必須在數(shù)據(jù)庫歸檔模式下進行
2.在備份的同時,數(shù)據(jù)庫的用戶可以進行操作。因此,數(shù)據(jù)庫對應的物理文件的內(nèi)容是不斷變化的,對這些物理文件內(nèi)容的更新是保留到有關操作已經(jīng)寫到重做日至文件中
后再進行。(這句引自別人敘述,我對后半句正確與否存在疑問,希望大家討論)。
3.歸檔日志必須是備份后的所有日至才可以實現(xiàn)數(shù)據(jù)庫的完全恢復。
4.可以備份除臨時文件以外的所有數(shù)據(jù)文件,如果在恢復過程中,發(fā)現(xiàn)損壞的是多個數(shù)據(jù)文件,即可以采用一個一個數(shù)據(jù)文件的恢復方法
5。 特別當損壞的不是系統(tǒng)表空間,可以先將損壞的表空間文件脫機,這時可以在恢復損壞文件前打開
數(shù)據(jù)庫,再完成恢復。例如:
SQL> alter tablespace tools begin backup;
表空間已更改。
SQL> $ copy f:oracleoradataebooktools01.dbf f:oraclebackuparea
已復制 1 個文件。
SQL> alter tablespace tools end backup;
表空間已更改。
SQL> shutdown immediate
數(shù)據(jù)庫已經(jīng)關閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關閉。
//刪除tools01.dbf造成數(shù)據(jù)庫無法正常啟動.
SQL> startup
ORACLE 例程已經(jīng)啟動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數(shù)據(jù)庫裝載完畢。
ORA-01157: 無法標識/鎖定數(shù)據(jù)文件 8 - 請參閱 DBWR 跟蹤文件
ORA-01110: 數(shù)據(jù)文件 8: 'F:ORACLEORADATAEBOOKTOOLS01.DBF'
SQL> alter database datafile 'f:oracleoradataebooktools01.dbf' offline;
數(shù)據(jù)庫已更改。
SQL> alter database open;
數(shù)據(jù)庫已更改。
SQL> $ copy f:oraclebackupareatools01.dbf f:oracleoradataebook
已復制 1 個文件。
SQL>recover datafile 'f:oracleoradataebooktools01.dbf';
介質(zhì)恢復完成。
