熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

教你快速掌握Oracle數據庫的備份策略

2013-11-13 15:39:03  來源: Oracle 

  主要介紹了Oracle數據庫備份策略的相關概念及使用中的注意事項詳細內容請大家參考下文

  了解備份的重要性

  可以說從計算機系統出世的那天起就有了備份這個概念計算機以其強大的速度處理能力取代了很多人為的工作但是往往很多時候它又是那麼弱不禁風主板上的芯片主板電路內存電源等任何一項不能正常工作都會導致計算機系統不能正常工作當然這些損壞可以修復不會導致應用和數據的損壞但是如果計算機的硬盤損壞將會導致數據丟失此時必須用備份恢復數據

  其實在我們的現實世界中已經就存在很多備份策略如RAID技術雙機熱備集群技術發展的不就是計算機系統的備份和高可用性嗎?有很多時候系統的備份的確就能解決數據庫備份的問題如磁盤介質的損壞往往從鏡相上面做簡單的恢復或簡單的切換機器就可以了

  但是上面所說的系統備份策略是從硬件的角度來考慮備份與恢復的問題這是需要代價的我們所能選擇備份策略的依據是丟是數據的代價與確保數據不丟失的代價之比還有的時候硬件的備份有時根本滿足不了現實需要假如你誤刪了一個表但是你又想恢復的時候數據庫的備份就變的重要了Oracle本身就提供了強大的備份與恢復策略這裡我們只討論ORACLE備份策略以下的備份都是指Oracle數據庫備份恢復將放到下一講中

  所謂備份就是把數據庫復制到轉儲設備的過程其中轉儲設備是指用於放置數據庫拷貝的磁帶或磁盤

  能夠進行什麼樣的恢復依賴於有什麼樣的備份作為 DBA有責任從以下三個方面維護數據庫的可恢復性

  ·使數據庫的失效次數減到最少從而使數據庫保持最大的可用性

  ·當數據庫不可避免地失效後要使恢復時間減到最少從而使恢復的效率達到最高

  ·當數據庫失效後要確保盡量少的數據丟失或根本不丟失從而使數據具有最大的可恢復性

  災難恢復的最重要的工作是設計充足頻率的硬盤備份過程備份過程應該滿足系統要求的可恢復性例如如果數據庫可有較長的關機時間則可以每周進行一次冷備份並歸檔重做日志對於*的系統或許我們考慮的只能是熱備份 如果每天都能備份當然會很理想但要考慮其現實性企業都在想辦法降低維護成本現實的方案才可能被采用只要仔細計劃並想辦法達到數據庫可用性的底線花少量的錢進行成功的備份與恢復也是可能的

  了解Oracle的運行方式

  ORACLE數據庫有兩種運行方式一是歸檔方式(ARCHIVELOG)歸檔方式的目的是當數據庫發生故障時最大限度恢復數據庫可以保證不丟失任何已提交的數據二是不歸檔方式(NOARCHIVELOG)只能恢復數據庫到最近的回收點(冷備份或是邏輯備份)我們根據數據庫的高可用性和用戶可承受丟失的工作量的多少對於生產數據庫強烈要求采用為歸檔方式那些正在開發和調試的數據庫可以采用不歸檔方式

  如何改變數據庫的運行方式在創建數據庫時作為創建數據庫的一部分就決定了數據庫初始的存檔方式一般情況下為NOARCHIVELOG方式當數據庫創建好以後根據我們的需要把需要運行在歸檔方式的數據庫改成ARCHIVELOG方式

  改變不歸檔方式為為歸檔方式

  a關閉數據庫備份已有的數據改變數據庫的運行方式是對數據庫的重要改動所以要對數據庫做備份對可能出現的問題作出保護

  b 修改初試化參數使能自動存檔

  修改(添加)初始化文件init[SID]ora參數

  log_archive_start=true #啟動自動歸檔

  log_archive_format=ARC%T%Sarc #歸檔文件格式

  log_archive_dest=/arch/arch #歸檔路徑

  在i中可以最多有五個歸檔路徑並可以歸檔到其它服務器如備用數據庫(standby database)服務器

  c啟動Instance到Mount狀態即加載數據庫但不打開數據庫

  $>SVRMGRL

  SVRMGRL >connect internal

  SVRMGRL >startup mount

  d發出修改命令

  SVRMGRL >alter database archivelog;

  SVRMGRL>alter database open;
    改變歸檔狀態為不歸檔狀態

  與以上步驟相同但有些操作不一樣主要是在以上的b操作中現在為刪除或注釋該參數在d操作中命令為

  SVRMGRL >alter database noarchivelog;

  注意從歸檔方式轉換到非歸檔方式後一定要做一次數據庫的全冷備份防止意外事件的發生

  Oracle備份的分類

  簡單的按照備份進行的方式可以分為邏輯備份冷備份(脫機備份)熱備份(聯機備份)其實冷備份與熱備份又可以合稱為物理備份

  按照備份的工具可以分為EXP/IMP備份OS拷貝RMAN第三方工具如VERITAS

  以下我們將從多個角度來說明以上的各種備份方式

  EXP/IMP邏輯備份

  導入/導出是ORACLE幸存的最古老的兩個命令行工具了其實我從來不認為Exp/Imp是一種好的備份方式正確的說法是Exp/Imp只能是一個好的轉儲工具特別是在小型數據庫的轉儲表空間的遷移表的抽取檢測邏輯和物理沖突等中有不小的功勞當然我們也可以把它作為小型數據庫的物理備份後的一個邏輯輔助備份也是不錯的建議

  對於越來越大的數據庫特別是TB級數據庫和越來越多數據倉庫的出現EXP/IMP越來越力不從心了這個時候數據庫的備份都轉向了RMAN和第三方工具下面我們還是簡要介紹一下EXP/IMP的使用

  i使用方法

  Exp parameter_name=value

  Or Exp parameter_name=(valuevalue……)

  只要輸入參數help=y就可以看到所有幫助

  如

  C:\>set nls_lang=simplified chinese_chinazhsgbk

  C:\>exp help

  Export: Release Production on 星期四 ::

  (c) Copyright Oracle Corporation All rights reserved

  

  通過輸入 EXP 命令和用戶名/口令您可以

  在用戶 / 口令之後的命令:

  

  實例: EXP SCOTT/TIGER

  或者您也可以通過輸入跟有各種參數的 EXP 命令來控制導出

  的運行方式要指定參數您可以使用關鍵字:

  

  格式: EXP KEYWORD=value 或 KEYWORD=(valuevaluevalueN)

  實例: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMPDEPTMGR)

  或 TABLES=(T: PT: P)如果 T 是分區表

  USERID 必須是命令行中的第一個參數

  關鍵字 說明(默認) 關鍵字 說明(默認)

  

  USERID 用戶名/口令 FULL 導出整個文件 (N)

  BUFFER 數據緩沖區的大小 OWNER 所有者用戶名列表

  FILE 輸出文件 (EXPDATDMP) TABLES 表名列表

  COMPRESS 導入一個范圍 (Y) RECORDLENGTH IO 記錄的長度

  GRANTS 導出權限 (Y) INCTYPE 增量導出類型

  INDEXES 導出索引 (Y) RECORD 跟蹤增量導出 (Y)

  ROWS 導出數據行 (Y) PARFILE 參數文件名

  CONSTRAINTS 導出限制 (Y) CONSISTENT 交叉表一致性

  LOG 屏幕輸出的日志文件 STATISTICS 分析對象 (ESTIMATE)

  DIRECT 直接路徑 (N) TRIGGERS 導出觸發器 (Y)

  FEEDBACK 顯示每 x 行 () 的進度

  FILESIZE 各轉儲文件的最大尺寸

  QUERY 選定導出表子集的子句

  

  下列關鍵字僅用於可傳輸的表空間

  TRANSPORT_TABLESPACE 導出可傳輸的表空間元數據 (N)

  TABLESPACES 將傳輸的表空間列表

  在沒有警告的情況下成功終止導出

  C:\>

  幫助已經很詳細的說明了參數的意義和使用方法並列舉了幾個簡單的例子注意的是i開始已經開始支持數據子集的方法就是可以指定自己的Where條件可以從表中導出一行或多行數據

  注意上面的set nls_lang=simplified chinese_chinazhsgbk通過設置環境變量可以讓exp的幫助以中文顯示如果set nls_lang=American_america字符集那麼你的幫助就是英文的了

  增量和累計導出必須在全庫方式下才有效而且大多數情況下增量和累計導出並沒有想象中的那麼有效ORACLE從i開始不再支持增量導出和累計導出

  ii表空間傳輸

  表空間傳輸是i新增加的一種快速在數據庫間移動數據的一種辦法是把一個數據庫上的格式數據文件附加到另外一個數據庫中而不是把數據導出成Dmp文件這在有些時候是非常管用的因為傳輸表空間移動數據就象復制文件一樣快

  關於傳輸表空間有一些規則

  ·源數據庫和目標數據庫必須運行在相同的平台上

  ·源數據庫與目標數據庫必須使用相同的字符集

  ·源數據庫與目標數據庫一定要有相同大小的數據塊(i已經不用)

  ·目標數據庫不能有與遷移表空間同名的表空間

  ·SYS的對象不能遷移

  ·必須傳輸自包含的對象集

  ·有一些對象如物化視圖基於函數的索引等不能被傳輸

  可以用以下的方法來檢測一個表空間或一套表空間是否符合傳輸標准

  exec sysdbms_ttstransport_set_check(tablespace_nametrue);

  select * from systransport_set_violation;

  如果沒有行選擇表示該表空間只包含表數據並且是自包含的對於有些非自包含的表空間如數據表空間和索引表空間可以一起傳輸

  以下為簡要使用步驟如果想參考詳細使用方法也可以參考ORACLE聯機幫助

  a設置表空間為只讀(假定表空間名字為APP_Data 和APP_Index)

  alter tablespace app_data read only;

  alter tablespace app_index read only;

  b發出EXP命令

  SQL>host exp userid=sys/password as sysdba

  transport_tablespace=y tablespace=(app_data app_index)

  以上需要注意的是

  ·為了在SQL中執行EXPUSERID必須用三個引號在UNIX中也必須注意避免/的使用

  ·在和以後必須使用sysdba才能操作

  ·這個命令在SQL中必須放置在一行(這裡是因為顯示問題放在了兩行)

  c拷貝數據文件到另一個地點即目標數據庫

  可以是cp(unix)或copy(windows)或通過ftp傳輸文件(一定要在bin方式)

  d把本地的表空間設置為讀寫

  e在目標數據庫附加該數據文件

  imp file=expdatdmp userid=sys/password as sysdba

  transport_tablespace=y

  datafile=(c:\temp\app_datac:\temp\app_index)

  f設置目標數據庫表空間為讀寫

  alter tablespace app_data read write;

  alter tablespace app_index read write;

  iii導出/導入與字符集

  明白ORACLE的多國語言設置ORACLE多國語言設置是為了支持世界范圍的語言與字符集一般對語言提示貨幣形式排序方式和CHARVARCHARCLOBLONG字段的數據的顯示等有效ORACLE的多國語言設置最主要的兩個特性就是國家語言設置與字符集設置國家語言設置決定了界面或提示使用的語言種類字符集決定了數據庫保存與字符集有關數據(如文本)時候的編碼規則正如剛才上面的一個小例子環境變量NLS_LANG的不同導致EXP幫助發生變化這就是多國語言設置的作用(NLS_LANG包含國家語言設置與字符集設置這裡起作用的是國家語言設置而不是字符集)

  ORACLE字符集設定分為數據庫字符集和客戶端字符集環境設置在數據庫端字符集在創建數據庫的時候設定並保存在數據庫props$表中對於i以上產品已經可以采用Alter database character set 字符集來修改數據庫的字符集但也僅僅是從子集到超集不要通過update props$來修改字符集如果是不支持的轉換可能會失去所有與字符集有關的數據就是支持的轉換也可能導致數據庫的不正常工作字符集分為單字節字符集與多字節字符集USASCII就是典型的單字節字符集在這種字符集中length=lengthb而ZHSGBK就是常用的雙字節字符集在這裡lengthb=*length

  在客戶端的字符集環境比較簡單主要就是環境變量或注冊表項NLS_LANG注意NLS_LANG的優先級別為參數文件à注冊表à環境變量àalter sessionNLS_LANG的組成為國家語言設置字符集如nls_lang=simplified chinese_chinazhsgbk客戶端的字符集最好與數據庫端一樣(國家語言設置可以不一樣如zhsgbk的字符集客戶端可以是nls_lang =simplified chinese_chinazhsgbk或Ameircan_Americazhsgbk都不影響數據庫字符的正常顯示)如果字符集不一樣而且字符集的轉換也不兼容那麼客戶端的數據顯示與導出/導入的與字符集有關的數據將都是亂碼

  使用一點點技巧就可以使導出/導入在不同的字符集的數據庫上轉換數據這裡需要一個進制文件編輯工具即可如uedit用編輯方式打開導出的dmp文件獲取字節的內容 先把它轉換為進制數使用函數NLS_CHARSET_NAME即可獲得該字符集

  SQL> select nls_charset_name() from dual;

  NLS_CHARSET_NAME()

  

  USASCII

  可以知道該dmp文件的字符集為USASCII如果需要把該dmp文件的字符集換成ZHSGBK則需要用NLS_CHARSET_ID獲取該字符集的編號

  SQL> select nls_charset_id(zhsgbk) from dual;

  NLS_CHARSET_ID(ZHSGBK)

  

  

  把換成進制數字節的 換成 即完成了把該dmp文件字符集從usascii到zhsgbk的轉化這樣再把該dmp文件導入到zhsgbk字符集的數據庫就可以了(注意十進制數與十六進制之間的轉換想明白其中的道理)

  Iv跨版本使用Exp/Imp

  Exp/Imp很多時候可以跨版本使用如在版本與版本之間導出導入數據但這樣做必須選擇正確的版本規則為

  ·總是使用IMP的版本匹配數據庫的版本如果要導入到則使用的導入工具

  ·總是使用EXP的版本匹配兩個數據庫中低的那個版本如在之間互導則使用的EXP工具

  OS備份

  操作系統備份有兩類冷備份(Cold backup)與熱備份(Hot backup)操作系統備份與以上的邏輯備份有本質的區別邏輯備份提取數據庫的數據內容而不備份物理數據塊而操作系統備份則是拷貝整個的數據文件

  i冷備份

  在文件級備份開始前數據庫必須徹底關閉關閉操作必須用帶有normalimmediatetransaction選項的shutdown來執行

  數據庫使用的每個文件都被備份下來這些文件包括

  ☆所有數據文件

  ☆所有控制文件

  ☆所有聯機REDO LOG 文件

  ☆INITORA文件(可選)

  作冷備份一般步驟是

  a正常關閉要備份的實例(instance);

  b備份整個數據庫到一個目錄

  c啟動數據庫

  如

  SVRMGRL>connect internal

  SVRMGRL >shutdown immediate

  SVRMGRL >! cp

  或

  SVRMGRL >!tar cvf /dev/rmt/ /u/oradata/prod

  SVRMGRL >startup

  注意如果利用腳本對數據庫進行冷備份必須對關閉數據庫的命令進行邏輯檢查如果發生關閉數據庫的命令不能正常執行而導致數據庫沒有正常關閉那麼所有的冷備份將回是無效的

  ii熱備份

  熱備份是當數據庫打開並對用戶有效是的OS級的數據備份熱備份只能用於ARCHIVELOG方式的數據庫在數據文件備份之前對應的表空間必須通過使用ALTER TABLESPACE …… BEGIN BACKUP以備份方式放置然後組成表空間的數據文件可以使用類似冷備份的操作系統命令進行拷貝在數據文件用操作系統命令拷貝後應使用ALTER TABLESPACE …… END BACKUP命令使表空間脫離熱備份方式

  熱備份沒有必要備份聯機日志但必須是歸檔狀態在實例恢復的時候可能需要用到歸檔日志當前聯機日志一定要保護好或是處於鏡相狀態當前聯機日志的損壞對於數據庫的損壞是巨大的只能以數據的丟失來進行數據庫的恢復工作

  對於臨時表空間存放的是臨時信息在熱備份是也可以考慮不用備份如果臨時文件發生故障可以刪除該數據文件與表空間重建一個臨時表空間

  熱備份的優點是顯而易見的

   a.可在表空間或數據文件級備份備份時間短

   b.備份時數據庫仍可使用

   c.可達到秒級恢復(恢復到某一時間點上)

   d.可對幾乎所有數據庫實體作恢復

   e.恢復是快速的在大多數情況下在數據庫仍工作時恢復

  操作系統作熱備份的一般步驟為

  ①連接數據庫

  SVRMGRL>connect internal;

  ②將需要備份的表空間(如User)設置為備份方式

  SVRMGRL>Alter tablespace User begin backup;

  ③拷貝數據文件

  SVRMGRL>!cp /u/oradata/prod/userora /backup/prod/userora

  Or

  $cp cp /u/oradata/prod/userora /backup/prod/userora

  ④在數據文件拷貝完成後將表空間拖體備份方式

  SVRMGRL>Alter tablespace User end backup;

  ⑤對所有需要備份的表空間重復

  ⑥使用如下的命令備份控制文件ALTER DATABSE …… BACKUP CONTROLFILE

  如備份成二進制文件

  alter database backup controlfile to new fielname;

  備份成文本文件

  alter database backup controlfile to trace;

  因為熱備份的時候用戶還在操作數據庫所以最好是每個表空間處於備份狀態的時間最短這樣就要求一個表空間一個表空間的備份不要一起使表空間處於備份狀態而同時拷貝數據文件

  注意如果在熱備份的時候如果數據庫中斷(如斷電)那麼在重新啟動數據庫的時候數據庫將提示有數據文件需要恢復你需要把正在斷電時候的處於備份狀態的數據文件通過ALTER TABLESPACE …… END BACKUP結束備份方式具體哪個數據文件或表空間處於備份狀態可以通過v$backup與v$datafile來獲得

  RMAN(備份與恢復管理器)

  i使用RMAN進行備份

  Recovery manager(RMAN)是ORACLE提供的DBA工具用語管理備份和恢復操作RMAN只能用於ORACLE或更高的版本中它能夠備份整個數據庫或數據庫部件其中包括表空間數據文件控制文件和歸檔文件RMAN可以按要求存取和執行備份和恢復

  RMAN備份有如下優點

  ☆支持在線熱備份

  ☆支持多級增量備份

  ☆支持並行備份恢復

  ☆減少所需要備份量

  ☆備份恢復使用簡單

  重要的是使用恢復管理器允許您進行增量數據塊級的備份(這個與導出/導入的增量截然不同)增量RMAN備份是時間和空間有效的因為他們只備份自上次備份以來有變化的那些數據塊另一個空間有效的RMAN特性是它只備份數據文件中使用的數據塊忽略空的未用的數據塊這個對於預分配空間的表空間有很大的好處

  從i開始還增加了RMAN的數據塊級別的恢復可以進一步減少數據庫恢復時間

  RMAN支持以下不同類型的備份

  FULL 數據庫全備份包括所有的數據塊

  INCREMENTAL 增量備份只備份自上次增量備份以來修改過的數據塊需要一個級的增量作為增量的基礎可以支持級增量

  OPEN 在數據庫打開的時候使用

  CLOSED 在數據庫安裝(MOUNT)但不打開的時候備份關閉備份可以是CONSISTENT或IN CONSISTENT類型的

  CONSISTENT 在數據庫安裝單不打開並且在安裝之前數據庫被徹底關閉(而不是被破壞或異常退出)時使用CONSISTENT備份可以簡單的進行復原(RESTORE)而不是恢復(RECOVER)

  INCONSISTENT 在數據庫打開或安裝(但不打開)時使用在該數據庫正常關閉或崩潰後INCONSISTENT備份需要恢復

  理解BACKUPRESTORERECOVER命令這是RMAN最基本的三個命令可以進行數據庫的備份復原以及恢復操作

  理解恢復目錄RMAN可以在沒有恢復目錄(NOCATALOG)下運行這個時候備份信息保存在控制文件保存在控制文件的備份信息是很危險的如果控制文件的破壞將導致備份信息的丟失與恢復的失敗而且沒有恢復目錄很多RMAN的命令將不被支持所以對於重要的數據庫建議創建恢復目錄恢復目錄也是一個數據庫只不過這個數據庫用來保存備份信息一個恢復目錄可以用來備份多個數據庫

  創建RMAN目錄以下步驟說明了在一個數據庫中盡力RMAN目錄的過程

  a為目錄創建一個單獨的表空間

  SQL>Create tablespace tools datafile fielname size m;

  b創建RMAN用戶

  SQL>Create user RMAN identified by RMAN default tablespace tools temporary tablespace temp;

  c給RMAN授予權限

  SQL>Grant connect resource recovery_catalog_owner to rman;

  d打開RMAN

  $>RMAN

  e連接數據庫

  RMAN>connect catalog rman/rman

  f創建恢復目錄

  RMAN>Create catalog tablespace rman

  注冊目標數據庫恢復目錄創建成功後就可以注冊目標數據庫了目標數據庫就是需要備份的數據庫一個恢復目錄可以注冊多個目標數據庫注冊目標數據庫的命令為

  $>RMAN target internal/password catalog rman/rman@rcdb;

  RMAN>Register database;

  數據庫注冊完成就可以用RMAN來進行備份了更多命令請參考ORACLE聯機手冊或《ORACLEi備份與恢復手冊》

  RMAN使用腳本來備份數據庫以下是RMAN進行備份的幾個例子

  a備份整個數據庫

  backup full tag basicdb format /bak/oradata/full_%u_%s_%p database;

  b備份一個表空間

  backup tag tsuser format /bak/oradata/tsuser_%u_%s_%p tablespace users;

  c備份歸檔日志

  backup tag alog format /bak/archivebak/arcbak_%u_%s_%p archivelog all delete input;

  ii維護RMAN

  RMAN的維護主要分為幾個方面

   查看RMAN的信息

  檢查現有備份

  RMAN>list backup

  列出過期備份

  RMAN>report obsolete

  刪除過期的備份

  RMAN>allocate channel for maintenance type disk;

  RMAN>change backupset id delete;

  RMAN>release channel;

   同步或重置RMAN

  如果目標數據庫物理對象發生了變化如添加了一個數據文件需要用如下命令同步

  RMAN>resync catalog;

  如果目標數據庫reset了數據庫需要用如下命令同步

  RMAN>reset database;

  當手工刪除了數據庫的歸檔文件後要執行以下腳本同步

  RMAN>allocate channel for maintenance type disk;

  RMAN> change archivelog all crosscheck;

  RMAN>release channel;

  當手工刪除了數據庫的RMAN備份後要執行以下腳本來同步

  RMAN>allocate channel for maintenance type disk;

  RMAN>crosscheck backup;

  RMAN>delete expired backup;

  RMAN>release channel;

  定制恰當的備份策略

  i定制正確的策略

  正確的備份策略不僅能保證數據庫服務器的*的高性能的運行還能保證備份與恢復的快速性與可靠性我們將以RMAN的多級增量備份作為一個備份策略的例子來討論采用多級備份就是為了減少每天備份所需要的時間而又保證系統有良好的恢復性恢復時間與備份時間要有一個權衡比如只要進行一個數據庫的全備份然後就只備份歸檔也可以保證能把數據庫恢復到最新的狀態但是這樣的恢復時間將是不可容忍的多級備份也正是 為了解決這種問題以下就是一個多級備份的例子

  每半年做一個數據庫的全備份(包括所有的數據和只讀表空間)

  每一個月做一次零級備份(不包含只讀表空間)

  每個星期做一次一級備份

  每天做一次二級備份

  任何數據庫的更改需要重新同步CATALOG目錄並重新備份(如添加數據文件)或重新備份(如修改表空間為只讀)

  每次備份後都可以備份歸檔日志或定期備份歸檔日志

  如果可能可以直接備份到磁帶上

  數據庫全備份的腳本

  run{

  allocate channel c type disk;

  allocate channel c type disk;

  allocate channel c type disk;

  backup full tag dbfull format /u/oradata/backup/full%u_%s_%p database

  include current controlfile;

  sql alter system archive log current;

  backup fileaperset format /u/oradata/backup/arch%u_%s_%p

  archivelog all delete input; #備份歸檔可選可以單獨定期備份

  release channel c;

  release channel c;

  release channel c;

  }

  零級備份的腳本

  run{

  allocate channel c type disk;

  allocate channel c type disk;

  allocate channel c type disk;

  backup incremental level tag db format /u/oradata/backup/db%u_%s_%p

  database skip readonly;

  sql alter system archive log current;

  backup fileaperset format /u/oradata/backup/arch%u_%s_%p

  archivelog all delete input; #備份歸檔可選可以單獨定期備份

  release channel c;

  release channel c;

  release channel c;

  }

  同理我們可以得到一級備份二級備份的腳本如一級備份的腳本

  run{

  allocate channel c type disk;

  allocate channel c type disk;

  allocate channel c type disk;

  backup incremental level tag db format /u/oradata/backup/db%u_%s_%p

  database skip readonly;

  sql alter system archive log current;

  backup fileaperset format /u/oradata/backup/arch%u_%s_%p

  archivelog all delete input; #備份歸檔可選可以單獨定期備份

  release channel c;

  release channel c;

  release channel c;

  }

  如果按照以上備份策略則每天的所需要備份的數據量只有一天的改變量而做恢復時最多要恢復當月的一個零級備份+三個一級備份+個二級備份+當天的歸檔文件如果不能接受這樣的恢復時間可以減少零級備份之間的時間間隔

  在每次備份後原則上在該備份點之前的歸檔日志就可以刪除掉了但是為了進一步的安全以及日後需要(如使用LOGMNR查找所需信息)建議有條件的話歸檔日志保存一年可以保存在磁帶等廉價存取設備上

  ii與RMAN備份有關的優化

  備份操作主要是完成以下三個步驟

  從磁盤上讀取數據

  在內存中處理數據塊

  寫入數據到磁盤或磁帶

  以上的讀寫操作可以同步或異步的完成在同步I/O操作中一個時間只允許有一個IO操作但是在異步I/O操作中一個時間允許有多個IO操作因此備份與恢復的調優主要集中在以下幾個方面

   提高同步或異步I/O操作能力

  在支持異步操作的操作系統上可以通過設置TAPE_AYSNCH_IODISK_ASYNCH_IO和BACKUP_TYPE_IO_SLAVES來支持異步操作提高寫的能力

   提高磁盤讀能力

  可以在backup命令後通過設置DISKRATIO來保證從多個磁盤上讀取數據保證連續的數據流

   正確設置緩沖區與參數值

  設置LARGE_POOL_SIZE使備份可以使用連續的緩沖池通過設置DB_FIL_DIRECT_IO_COUNT可以提高緩沖區的利用如果使用磁帶備份還可以設置BACKUP_TYPE_IO_SLAVES來提高磁帶的寫能力

  采用並行備份

  開辟多個通道可以實現並行備份與恢復

  

  iii備份RMAN數據庫

  RMAN自己的數據庫也需要備份但是本身很小而且不是經常發生變化所以在每次RMAN備份完成後都可以用如下腳本對RMAN數據庫備份

  EXP pafile =exprmansql

  exprmansql為

  USERID=RMAN/RMAN

  BUFFER=

  OWNER=RMAN

  FILE=RMANDMP

  ROWS=Y

  GRANTS=Y

  COMPRESS=Y

  CONSISTENT=Y

  iv使自動備份數據庫

  自動備份數據庫不外乎以下三種方式

  WINDOWS下的任務計劃(At命令)

  UNIX下的Crontab

  第三方工具如Viritas

  在以上三種方式中Viritas屬於第三方工具很多人可能都沒有接觸主要說一下windows的任務計劃與unix的cron

  生成腳本文件如backuprcv

  假定文件內容如下

  $>cat backuprcv

  connect target sys/password rcvcat rman/rman@localname;

  run{

  allocate channel c type disk;

  allocate channel c type disk;

  allocate channel c type disk;

  backup fileaperset format /u/oradata/backup/arch%u_%s_%p

  archivelog all delete input;

  release channel c;

  release channel c;

  release channel c;

  }

  生成執行文件

  在windows上生成backup_archivebat內容包括

  rman cmdfile = backuprcv

  在unix下生成 backup_archivesh內容包括

  /oracle/ramn/rman cmdfile = backuprcv

  加入調度

  在windows中用任務計劃向導即可或使用at命令

  在unix中在目標機器上編寫一個文件用以啟動自動備份進程假定文件名為ORACLE文件將放在/var/spool/cron/crontabs目錄下

  $>cat oracle

   * * backup_archivesh

  #表示星期天點對數據庫備份

   * * * backup_archivesh

  #表示每天點備份

  Crontab文件的每一行由六個域(minuteshoursday of monthmonthday of weekcommand)組成域之間用空格或Tab分隔開來

  

  1、使用EXP/IMP備份

  EXP/IMP不是一個良好的備份工具,在以後的發展之中,ORACLE對EXP/IMP用於備份的支持會越來越低。TW.winGWit.ComORACLE只是把EXP/IMP當作一個好的工具而不是備份工具,在對於大型數據庫,如TB級數據庫或數據倉庫,EXP/IMP肯定會力不從心。

  2、在應用程序中備份數據庫

  在論壇上,有很多這樣的要求,“我怎麼在程序中備份與恢復數據庫?”。首先說,這個並不是不可以實現,但是實現的過程會很復雜而且意外會很多。就我的感覺,提出這樣問題的人,首先一點就是對ORACLE或DBA的不了解,如果ORACLE可以這麼輕松的實現備份與恢復,那麼我可以說,就不需要DBA了。

  3、冷備份比熱備份更容易,效果會更好

  有人認為,冷備份是關閉數據庫進行的一致性備份,肯定比熱備份要好,使用也容易,其實不盡然,在熱備份中,一樣可以實現數據庫的全備份,而且不會影響到數據庫的運行。建議所有的生產機,都運行在歸檔方式下,采用熱備份方式。

  六、常見問題

  1、我導出的數據為什麼不能導入,提示不支持的字符集轉換

  答:參考上面的字符集原則,導出數據時客戶端與數據庫字符集一致,導入時修改為與目標數據庫字符集一致。

  2、我的歸檔日志越來越多,我什麼時候可以刪除歸檔日志?

  答:在每一次全備份(如OS全冷備份或全熱備份)或基於全備份的增量備份(如RMAN基於0級備份上的增量備份)後都可以刪除該備份點之前的歸檔日志,建議在磁帶上保留一年。

  3、全備份時一定需要備份所有數據文件嗎?

  答:不需要,起碼有兩類數據文件可以不備份,一類就是臨時數據文件,如果丟失,可以刪除後重建;一類是只讀表空間數據文件,如果上次備份以來,沒有修改過表空間的只讀屬性,就可以不需要備份。

  4、聯機日志需要備份嗎?

  答:如果是歸檔方式熱備份,就沒有必要備份聯機日志。但是對於冷備份,可以備份聯機日志,特別是不歸檔狀態。備份過聯機日志後的冷備份,因為數據庫是一致的,可以恢復到該備份點。

  小結

  1、什麼是數據庫備份,數據庫備份就是把數據庫復制到轉儲設備的過程。

  2、數據庫的運行方式,可以分為歸檔方式和非歸檔方式,建議運行在歸檔方式下運行熱備份。

  3、了解了數據庫的備份方式,邏輯備份、冷備份、熱備份

  4、了解數據庫的備份工具,EXP/IMP執行邏輯備份,OS腳本可以執行冷備份或熱備份,RMAN也可以執行冷備份或熱備份

  5、了解Oracle的備份策略,並怎樣選擇最佳的備份策略

  6、知道怎麼樣啟動自動備份,了解Windows的at命令與unix的cron進程。


From:http://tw.wingwit.com/Article/program/Oracle/201311/17073.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.