Oracle備份恢復(一)

備份恢復的兩個重要術語(MTBF和MTTR)

一、MTBF(Mean Time Between Failures)即平均故障間隔(時間/次)

計算公式爲:MTBF(時間/次)=總運行時間/總故障次數

MTBF表示的是某設備故障發生期間的時間平均值

例:某設備的使用情形如下,MTBF是多少?

100小時運行-3小時修理-120小時運行-2小時修理-140小時運行-4小時修理

MTBF=(100+120+140)/3=120(時間/次)

實際應用中將此公式稍微變換一下,就可有效地用來評價工裝的狀態了。

“ 用MTBF=產量/修理次數”,簡單理解就是MTBF表示的是修一次工裝可做多少個產品,從公式上可以看出MTBF越大則表示工裝的狀態越好。

有了反映工裝狀態的指標,就可以爲我們的行動提供依據了。我們每週就可以挑出MTBF小於一定標準的工裝進行檢修,使總體MTBF保持一個繳高的水平。

二、MTTR(Mean Time To Recover)(小時/次)平均修理時間

計算公式爲:MTTR(時間/次)=總修復時間/故障次數

例:某設備的使用經過如下,MTTR是多少?

100小時運行-3小時修理-120小時運行-2小時修理-140小時運行-4小時修理

MTTR=(3+2+4)/3=3(小時/次)

備份恢復DBA需要做什麼?

爲了縮短MTTR、延長MTBFDBA平時可以做的事情:
◎ 在網絡層需要做冗餘,比如雙線路、雙交換機、雙網卡、雙負載均衡器等
◎ 應用服務器做冗餘
◎ 硬件物理級做冗餘,如RAID1,RAID5等,10G後推出了ASM,自動存儲管理
◎ 邏輯級冗餘
⊕ 控制文件鏡像,將文件存放到不同磁盤控制器下的不同磁盤上當某個鏡像控制文件損壞時,對於控制文件讀和寫都會掛起數據庫。
⊕ 日誌文件鏡像,將文件存放到不同磁盤控制器下的不同磁盤上,日誌文件鏡像中某一個日誌文件成員介質損壞,不影響數據庫正常運行,但會報錯誤信息到告警日誌。其實鏡像還對讀的性能有好處,但是對寫的性能會有壞處
⊕ 數據文件
對於數據文件介質故障,讀的時候會在告警日誌報一個操作系統錯誤,在寫的時候要分如下情況:
◆ 如果是寫SYSTEM文件或者包含活動回滾段的數據文件失敗,實例將被關閉
◆ 如果寫其它文件失敗,要分是否歸檔模式
o 歸檔模式下:讀的時候只是拋錯,寫的時候發現文件寫錯誤,會自動將該文件設置成OFFLINE
o 非歸檔模式下:DBWR寫失敗,實例會DOWN,因爲不能直接把文件OFFLINE
⊕ 10G的回收站支持FLASHBACK DROP
⊙ 測試備份
DBA 可以通過制定計劃定期測試備份的有效性,來確保他們的策略可以縮短MTTR 並延長MTBF。有效的恢復取決於有效的備份

備份恢復DBA需要做那些考慮?

技術考慮

⊙ 資源:硬件、軟件、人力和時間
⊙ 操作系統文件的物理鏡像
⊙ 數據庫中各對象的邏輯鏡像
⊙ 數據庫配置
⊙ 事務處理量,這將影響需要備份的頻率

技術要求

⊙ 你有多少數據?
⊙ 你的計算機的能力及容量是否足以支持備份?
⊙ 數據是否易於重新創建?比如索引
⊙ 你是否可以將數據從純數據文件重新加載到數據庫?
⊙ 數據庫配置是否能支持從不同類型故障中復原?

從災難恢復考慮

⊙ 自然災害
你的數據可能非常重要,以至於你必須確保甚至在系統完全癱瘓的情況下也能夠復原
自然災害和其它問題可能影響你的數據的可用性,因此在創建災難恢復計劃時應考F慮這些問題,在選擇備份和恢復策略時,應考慮以下一些問題
⊙ 在發生以下嚴重災難時,你的業務會受到什麼樣的影響
◎ 水災、火災、地震或颶風
◎ 存儲硬件或軟件故障
⊙ 備份是否存儲在其它地方?如磁帶,磁盤,CDROM,閃存等
⊙ 容災考慮的是同樓、同區、同城、跨城、跨國
⊙ 容災考慮網絡帶寬,或者其它災備傳輸途徑,比如人工快遞

Oracle的物理結構

oracle體系結構
Oracle 實例
Oracle的 進程結構,內存區域和後臺進程合稱爲一個Oracle實例
◎ SGA
◎ 後臺進程(即PMON、SMON、DBWn、LGWR 和CKPT)組成
◎LGWR
⊙ DBA 可以使用ALTER SYSTEM SWITCH LOGFILE 命令強制進行日誌切換
⊙ ALTER SYSTEM ARCHIVE LOG ALL 會歸檔除了CURRENT組外的所有未歸檔的日誌
⊙ ALTER SYSTEM ARCHIVE LOG CURRENT

數據文件
每一個ORACLE數據庫有一個或多個物理的數據文件(data file)。一個數據庫的數據文件包含全部數據庫數據。邏輯數據庫結構(如表、索引)的數據物理地存儲在數據庫的數據文件中。數據文件有下列特徵:
一個數據文件僅與一個數據庫聯繫。
一旦建立,數據文件不能改變大小.
一個表空間(數據庫存儲的邏輯單位)由一個或多個數據文件組成。
數據文件中的數據在需要時可以讀取並存儲在ORACLE內存儲區中。

日誌文件
每一個數據庫有兩個或多個日誌文件(redo log file)的組,每一個日誌文件組用於收集數據庫日誌。日誌的主要功能是記錄對數據所作的修改,所以對數據庫作的全部修改是記錄在日誌中。在出現故障時,如果不能將修改數據永久地寫入數據文件,則可利用日誌得到該修改,所以從不會丟失已有操作成果。
日誌文件主要是保護數據庫以防止故障。爲了防止日誌文件本身的故障,ORACLE允許鏡象日誌(mirrored redo log),以致可在不同磁盤上維護兩個或多個日誌副本。
日誌文件中的信息僅在系統故障或介質故障恢復數據庫時使用,這些故障阻止將數據庫數據寫入到數據庫的數據文件。然而任何丟失的數據在下一次數據庫打開時,ORACLE自動地應用日誌文件中的信息來恢復數據庫數據文件。Oralce兩種日誌文件類型:
1、聯機日誌文件 這是Oracle用來循環記錄數據庫改變的操作系統文件
2、歸檔日誌文件 這是指爲避免聯機日誌文件重寫時丟失重複數據而對聯機日誌文件所做的備份

控制文件
每一ORACLE數據庫有一個控制文件(control file),它記錄數據庫的物理結構,包含下列信息類型:
數據庫名;
數據庫數據文件和日誌文件的名字和位置;
數據庫建立日期。
爲了安全起見,允許控制文件被鏡象。
每一次ORACLE數據庫的實例啓動時,它的控制文件用於標識數據庫和日誌文件,當着手數據庫操作時它們必須被打開。當數據庫的物理組成更改時,ORACLE自動更改該數據庫的控制文件。數據恢復時,也要使用控制文件。

參數文件
參數文件記錄了Oracle數據庫的基本參數信息,主要包括數據庫名、控制文件所在路徑、進程等。與舊版本的初始化參數文件INITsid.ora不同,在Oracle10g及以上還可以使用二進進制服務器參數文件,並且該服務器參數文件在安裝Oracle數據庫系統時由系統自動創建,文件的名稱爲SPFILEsid.ora,sid爲所創建的數據庫實例名。

oracle的檢查點

⊙ 完全檢查點
當關閉數據庫shutdown normal、immediate 、transactional(異常關閉除外) 或通過ALTER SYSTEM CHECKPOINTA 命令手動啓動檢查點操作時,將執行稱爲完全檢查點的過程在完全檢查點操作中,DBWn 將數據庫緩衝區高速緩存中的所有髒緩衝區數據寫入數據文件,所以完全檢查點,要寫的數據最多## 如何改變文本的樣式

⊙ 增量檢查點
增量檢查點(跟快速啓動檢查點相關)是持續活動的檢查點,是一種心跳機制,每3秒檢查一次。DBWn 定期從檢查點隊列寫出緩衝區數據,從而不斷推進內存中的增量檢查點操作

⊙ 部分檢查點
ALTER TABLESPACE BEGIN BACKUP 命令僅對緩衝區高速緩存中屬於該表空間的髒緩衝區啓動部分檢查點操作
ALTER TABLESPACE tablespace OFFLINE NORMAL 命令也可用於啓動部分檢查點操作

⊙ 數據緩衝區
o redo buffer
o logfile
o undofile
o undo的髒緩存
一定要先寫日誌BUFFER,再修改髒數據塊
先寫LOGFILE,再寫DATAFILE。
先LGWR,再DBWR,這個順序不能錯

DBA備份

1.基於表空間的熱備

–查詢表空間的名字和狀態

SQL> select file_id,tablespace_name,status from dba_data_files;

FILE_ID TABLESPACE_NAME STATUS


 4 USERS              AVAILABLE
 3 UNDOTBS1              AVAILABLE
 2 SYSAUX              AVAILABLE
 1 SYSTEM              AVAILABLE
 5 COSTCTL_TBS              AVAILABLE
 6 DEV_DATA              AVAILABLE
 7 PDMS_DATA              AVAILABLE

已選擇7行。

–開始備份,將會

SQL> alter tablespace PDMS_DATA begin backup;

表空間已更改。
  --拷貝數據文件到指定的備份磁盤上

SQL> host cp /opt/oracle/app/oradata/pdms/PDMS_DATA.dbf /u03/backup/hotbak
  --查看所有數據文件的備份狀態

SQL> select * from v$backup;

 FILE# STATUS         CHANGE# TIME

 1 NOT ACTIVE               0
 2 NOT ACTIVE               0
 3 NOT ACTIVE               0
 4 NOT ACTIVE               0
 5 NOT ACTIVE               0
 6 NOT ACTIVE               0
     7 ACTIVE               12657642 15-12月-16

–將表空間重新設置爲非備份狀態

SQL> alter tablespace PDMS_DATA end backup;

表空間已更改。
  --查看備份狀態

SQL> select * from v$backup;

 FILE# STATUS         CHANGE# TIME

 1 NOT ACTIVE               0
 2 NOT ACTIVE               0
 3 NOT ACTIVE               0
 4 NOT ACTIVE               0
 5 NOT ACTIVE               0
 6 NOT ACTIVE               0
     7 NOT ACTIVE           12657642 15-12月-16

已選擇7行。

2. 基於數據庫的熱備

alter database begin backup;

  拷貝所有的datafile到備份目錄

  alter database end backup;

3. 控制文件的熱備

alter database backup controlfile to '<dir>' [reuse];          --控制文件的完整備份
alter database backup controlfile to trace as '<dir>'  --用於創建控制文件的語句,丟失了部分信息,可以直接查看

SQL> alter database backup controlfile to ‘/u03/backup/hotbak/control01.ctl’;

數據庫已更改。

SQL> alter database backup controlfile to trace as ‘/u03/backup/hotbak/control02.ctl’;

數據庫已更改。

4. 參數文件的熱備

create pfile from spfile ;

  create pfile = '<dir>' from spfile;

SQL> create pfile = ‘/u03/backup/hotbak/initdbsrv1.ora’ from spfile;

文件已創建。

5. 臨時表空間的數據文件、日誌文件不需要備份

熱備腳本

基於表空間的熱備(推薦使用這種方式)
vim hotbak.sql

複製代碼
set feedback off
set heading off
set verify off
set trimspool off
set pagesize 0
set linesize 200
define dir = ‘/u03/backup/hotbak’
define script = ‘/tmp/hotbak_tb.sql’
ho rm &script
ho rm &dir/*
spool &script
select ‘alter tablespace ‘|| tablespace_name ||’ begin backup ;’ ||
chr(10)||'ho cp ’ || file_name || ’ &dir ’ ||
chr(10)||'alter tablespace ‘|| tablespace_name || ’ end backup;’
from dba_data_files order by tablespace_name;
spool off
start &script
alter database backup controlfile to ‘&dir/controlbak.ctl’;
create pfile = ‘&dir/initdbsrv1.ora’ from spfile;
複製代碼
其中char(10)表示換行,紅色部分需要自行修改

SQL> start hotbak.sql; --執行該腳本即可對數據庫基於表空間進行熱備

基於數據庫(數據文件)的熱備
vim hotbak.sql

複製代碼
set feedback off
set heading off
set verify off
set trimspool off
set pagesize 0
set linesize 200
define dir = ‘/u03/backup/hotbak’
define script = ‘/tmp/hotbak_tb.sql’
ho rm &script
ho rm &dir/*
spool &script
select ‘alter tablespace ‘|| tablespace_name ||’ begin backup ;’ ||
chr(10)||'ho cp ’ || file_name || ’ &dir ’ ||
chr(10)||'alter tablespace ‘|| tablespace_name || ’ end backup;’
from dba_data_files order by tablespace_name;
spool off
start &script
alter database backup controlfile to ‘&dir/controlbak.ctl’;
create pfile = ‘&dir/initdbsrv1.ora’ from spfile;

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