Oracle數據庫的熱備份與完整恢復測試
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: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行。
//將表空間設為備份狀態.
SQL> alter tablespace system begin backup;
表空間已更改。
//將數據文件備份到目錄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);
表已創建。
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:ORACLEORADATAEBOOKSYSTEM01.DBF'
//將備份的數據文件復制回目錄f:oracleoradataebook下.
SQL> $ copy f:oraclebackupareasystem01.dbf f:oracleoradataebook
已復制 1 個文件。
//恢復數據文件system01.dbf。
SQL> recover datafile 'f:oracleoradataebooksystem01.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:oracleoradataebooktools01.dbf f:oraclebackuparea
已復制 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:ORACLEORADATAEBOOKTOOLS01.DBF'
SQL> alter database datafile 'f:oracleoradataebooktools01.dbf' offline;
數據庫已更改。
SQL> alter database open;
數據庫已更改。
SQL> $ copy f:oraclebackupareatools01.dbf f:oracleoradataebook
已復制 1 個文件。
SQL>recover datafile 'f:oracleoradataebooktools01.dbf';
介質恢復完成。