一、備份與恢復概述
1、需要備份的原因
現實工作中有很多情況都可能造成數據丟失,造成數據丟失的主要因素如下。
n 介質故障:磁盤損壞、磁頭碰撞,瞬時強磁場干擾
n 用戶的錯誤操作
n 服務器的徹底崩潰
n 計算機病毒
n 不可預料的因素:自然災害、電源故障、盜竊
上面是一些可能的故障原因,根據原因可以將oracle中的故障分爲以下4種類型。
1)語句故障 2)戶進程故障 3)實例故障 4)介質故障
二、備份與恢復的定義及分類
1、備份的分類
1)從物理與邏輯角度分類
從物理與邏輯角度分,備份可以分爲物理備份和邏輯備份。
① 物理備份:
對數據庫操作系統的物理文件(如數據文件、控制文件和日誌文件)的備份。物理備份又可以分爲脫機備份(冷備份)和聯機備份(熱備份),前者是在關閉數據庫的時候進行的,後者對正以歸檔日誌方式運行的數據庫進行備份。可以使用oracle的恢復管理器(RMAN)或操作系統命令進行數據庫的物理備份。
② 邏輯備份:對數據庫邏輯組件(如表和存儲過程等數據庫對象)的備份。邏輯備份的手段很多,如傳統的EXP、數據泵EXPDP、數據庫閃回技術及第三方工具,都可以進行數據庫的邏輯備份。
2)從數據庫的備份策略角度分類
① 完全備份:
每次對數據進行完整的備份。當發生數據丟失的災難情況時,完全備份無須依賴其他信息,即可實現100%數據恢復,其恢復時間最短且操作最方便。
② 增量備份:
只有那些在上次完全備份或者增量備份後被修改的文件纔會備份。優點是備份數據量小,需要的時間短,缺點是恢復的時候需要依賴之前的備份記錄,出問題的風險較大。
③ 差異備份:
備份那些自從上次完全備份之後被修改過的文件。從差異備份中恢復數據庫時間較短,因此只需要兩份數據(最後一次完全備份和最後一次差異備份),缺點是每次備份需要的時間較長。
2、恢復的定義及分類
恢復就是發生故障後,利用已備份的數據或控制文件,重新建立一個完整的數據庫。恢復分爲以下兩種類型。
1)實例恢復:當oracle實例出現失敗後,oracle自動進行的恢復。
2)介質恢復:當存放數據庫的介質出現故障時所做的恢復。介質恢復又分爲完全恢復和不完全恢復。
完全恢復:將數據庫恢復到數據庫失敗時的狀態。這種恢復是通過裝載數據庫備份,並用全部的重做日誌做到的。
不完全恢復:將數據庫恢復到數據庫失敗前的某一時刻的狀態。這種恢復是通過裝載數據庫備份並應用部分的重做日誌做到的。進行不完全恢復後,必須在啓動數據庫時用resetlogs選型重設聯機重做日誌。
三、使用RMAN(recovery manager)工具
用於備份和恢復數據庫文件、歸檔日誌和控制文件。也可以用來執行完全或不完全的數據庫恢復。RMAN有3種不同的用戶接口:命令行方式,GUI方式(集成在OEM中的備份管理器)、api方式(用於集成到第三方的備份軟件中)。它具有如下優點:
1)支持在線熱備份
2)支持多級增量備份
3)支持並行備份、恢復
4)減少所需要的備份量
5)備份、恢復使用簡單
1.RMAN組件
1、創建恢復目錄(恢復目錄數據庫)
1)、創建恢復目錄數據庫
#mkdir -p /opt/oracle/oradata/rmandb1
#chown -R oracle /opt/oracle/oradata/rmandb1
#sqlplus /nolog
sql>conn sys/oracle11g as sysdba
SQL> create tablespace rmants datafile '/opt/oracle/oradata/rmandb/rmants.ora' size 20M ;
2)、在恢復目錄數據庫中創建RMAN 用戶並授權
SQL> create user rman identified by rman
default tablespace rmants
temporary tablespace temp;
SQL> grant connect,resource to rman;
SQL> grant recovery_catalog_owner to rman;
3)、在恢復目錄數據庫中創建恢復目錄
$rman catalog rman/rman
RMAN>create catalog tablespace rmants;
2、註冊目標數據庫到恢復目錄
1)、進入RMAN環境
$rman
2)、連接目標數據庫
RMAN>connect target sys/Oracle11g;
3)、連接恢復目錄數據庫
RMAN>connect catalog rman/rman@newrman;
4)、註冊
RMAN>register database;
3、在歸檔模式下備份和恢復
1).將數據庫設置未歸檔模式,數據庫實例要處於啓動狀態,數據庫已經加載或打開狀態
sql>shutdown immediate;
sql>startup mount;
sql>alter database archivelog;
2)、首先修改快閃恢復區的參數(將數據存儲到快閃恢復區)
Sql>alter system setdb_recovery_file_dest_size=2g;
3)、創建一個表空間和表
Sql>create tablespace tab1
Datafile‘/opt/oracle/oradata/rmandb/tab1.dbf’ size 10m;
4)、向表tab1中添加記錄
Insert into tab1 values(1);
Commit;
5)、使用數據庫用戶sys登錄RMAN
$rman target sys/oracle11g
6)、關閉數據庫,並從rman加載數據庫到mount狀態
RMAN>shutdown immediate
RMAN>startup mount;
7)、備份整個數據庫到快閃區
Rman>backup database;
(備份數據庫時默認不包含歸檔日誌文件,若要包含歸檔日誌文件,則加上plus archivelog關鍵字,delete input 的意思是在備份完成後,刪除archivelog文件。
RMAN〉backup database plus archivelog delete input)
8)、關閉數據庫
RMAN>shutdown immediate;
9)、刪除數據庫文件 rm /opt/oracle/oradata/rmandb/tab1.dbf
10)、恢復數據文件
在RMAN 中關閉數據庫庫並啓動到mount狀態
RMAN>startup mount;
使用RMAN重建數據庫
RMAN>restore database;(restore用於恢復到備份時刻,數據來源於備份數據)
恢復(recover)數據庫
RMAN>recover database;(restore用於恢復備份時刻到故障點之間的數據,數據來源於archivelog)
使用RMAN將數據庫從mount狀態切換到open狀態
RMAN>alter database open;
11)、驗證數據庫文件是否已經恢復
select * from tab1
4、備份與恢復表空間
rman>backup tablespace tab1;
rman>run{
sql 'alter tablespace tab1 offline immediate';
restore tablespace tab1;
recover tablespace tab1;
sql 'alter tablespace tab1 online';
}
5、數據文件備份與恢復
1).查看當前數據庫的所有數據文件
col file_name for a55
set line 100
Sql>select file_id,file_name,tablespac_name from dba_data_files;
2).使用RMAN備份數據文件
RMAN>backup datafile n;
3).使用RMAN備份控制文件
RMAN>backup currentcontrolfile;
4).關閉數據庫
RMAN>shutdown immediate;
5).模擬故障,刪除數據庫文件c:\data\tab1.dbf
6).rman>run{
sql 'alter tablespace tab1 offline immediate';
restore datafile n;
recover datafile n;
sql 'alter tablespace tab1 online';
}(也會遇到恢復時不需要先卸表空間,在掛載表空間)