ORACLE備份策略

dukewyh發表於2012-02-28
轉發一篇文章:http://www.itpub.net/forum.phpmod=viewthread&tid=436969&highlight=
ORACLE備份策略
(ORACLE BACKUP STRATEGY)
第一章. 概要
1、瞭解什麼是備份
2、瞭解備份的重要性
3、理解資料庫的兩種執行方式
4、理解不同的備份方式及其區別
5、瞭解正確的備份策略及其好處
第二章. 瞭解備份的重要性
可以說,從計算機系統出世的那天起,就有了備份這個概念,計算機以其強大的速度處理能力,取代了很多人為的工作,但是,往往很多時候,它又是那麼弱不禁風,主機板上的晶片、主機板電路、記憶體、電源等任何一項不能正常工作,都會導致計算機系統不能正常工作。當然,這些損壞可以修復,不會導致應用和資料的損壞。但是,如果計算機的硬碟損壞,將會導致資料丟失,此時必須用備份恢復資料。
其實,在我們的現實世界中,已經就存在很多備份策略,如RAID技術,雙機熱備,叢集技術發展的不就是計算機系統的備份和高可用性嗎?有很多時候,系統的備份的確就能解決資料庫備份的問題,如磁碟介質的損壞,往往從鏡相上面做簡單的恢復,或簡單的切換機器就可以了。
但是,上面所說的系統備份策略是從硬體的角度來考慮備份與恢復的問題,這是需要代價的。我們所能選擇備份策略的依據是:丟是資料的代價與確保資料不丟失的代價之比。還有的時候,硬體的備份有時根本滿足不了現實需要,假如你誤刪了一個表,但是你又想恢復的時候,資料庫的備份就變的重要了。ORACLE本身就提供了強大的備份與恢復策略,這裡我們只討論ORACLE備份策略,以下的備份都是指ORACLE資料庫備份,恢復將放到下一講中。
所謂備份,就是把資料庫複製到轉儲裝置的過程。其中,轉儲裝置是指用於放置資料庫複製的磁帶或磁碟。
能夠進行什麼樣的恢復依賴於有什麼樣的備份。作為 DBA,有責任從以下三個方面維護資料庫的可恢復性:
·使資料庫的失效次數減到最少,從而使資料庫保持最大的可用性;
·當資料庫不可避免地失效後,要使恢復時間減到最少,從而使恢復的效率達到最高;
·當資料庫失效後,要確保儘量少的資料丟失或根本不丟失,從而使資料具有最大的可恢復性。
災難恢復的最重要的工作是設計充足頻率的硬碟備份過程。備份過程應該滿足系統要求的可恢復性。例如,如果資料庫可有較長的關機時間,則可以每週進行一次冷備份,並歸檔重做日誌,對於24*7的系統,或許我們考慮的只能是熱備份。 如果每天都能備份當然會很理想,但要考慮其現實性。企業都在想辦法降低維護成本,現實的方案才可能被採用。只要仔細計劃,並想辦法達到資料庫可用性的底線,花少量的錢進行成功的備份與恢復也是可能的。
第三章. 瞭解ORACLE的執行方式
ORACLE資料庫有兩種執行方式:一是歸檔方式(ARCHIVELOG),歸檔方式的目的是當資料庫發生故障時最大限度恢復資料庫,可以保證不丟失任何已提交的資料;二是不歸檔方式(NOARCHIVELOG),只能恢復資料庫到最近的回收點(冷備份或是邏輯備份)。我們根據資料庫的高可用性和使用者可承受丟失的工作量的多少,對於生產資料庫,強烈要求採用為歸檔方式;那些正在開發和除錯的資料庫可以採用不歸檔方式。
如何改變資料庫的執行方式,在建立資料庫時,作為建立資料庫的一部分,就決定了資料庫初始的存檔方式。一般情況下為NOARCHIVELOG方式。當資料庫建立好以後,根據我們的需要把需要執行在歸檔方式的資料庫改成ARCHIVELOG方式。
3.1改變不歸檔方式為為歸檔方式
1.關閉資料庫,備份已有的資料,改變資料庫的執行方式是對資料庫的重要改動,所以要對資料庫做備份,對可能出現的問題作出保護。
2. 修改初試化引數,使能自動存檔修改(新增)初始化檔案init[SID].ora引數:
log_archive_start=true #啟動自動歸檔
log_archive_format=ARC%T%S.arc #歸檔檔案格式
log_archive_dest=/arch12/arch #歸檔路徑
在8i中,可以最多有五個歸檔路徑,並可以歸檔到其它伺服器,如備用資料庫(standby database)伺服器
3.啟動Instance到Mount狀態,即載入資料庫但不開啟資料庫:
$>SVRMGRL
SVRMGRL >connect internal
SVRMGRL >startup mount
4.發出修改命令
SVRMGRL >alter database archivelog;
SVRMGRL>alter database open;
3.2 改變歸檔狀態為不歸檔狀態
與以上步驟相同,但有些操作不一樣,主要是在以上的b操作中,現在為刪除或註釋該引數,在d操作中,命令為
SVRMGRL >alter database noarchivelog;
注意,從歸檔方式轉換到非歸檔方式後一定要做一次資料庫的全冷備份,防止意外事件的發生。
第四章. ORACLE備份的分類
簡單的按照備份進行的方式,可以分為邏輯備份、冷備份(離線備份)、熱備份(聯機備份),其實冷備份與熱備份又可以合稱為物理備份
按照備份的工具,可以分為EXP/IMP備份、OS複製、RMAN、第三方工具,如VERITAS
以下我們將從多個角度來說明以上的各種備份方式
4.1 EXP/IMP邏輯備份
匯入/匯出是ORACLE倖存的最古老的兩個命令列工具了,其實我從來不認為Exp/Imp是一種好的備份方式,正確的說法是Exp/Imp只能是一個好的轉儲工具,特別是在小型資料庫的轉儲,表空間的遷移,表的抽取,檢測邏輯和物理衝突等中有不小的功勞。當然,我們也可以把它作為小型資料庫的物理備份後的一個邏輯輔助備份,也是不錯的建議。
對於越來越大的資料庫,特別是TB級資料庫和越來越多資料倉儲的出現,EXP/IMP越來越力不從心了,這個時候,資料庫的備份都轉向了RMAN和第三方工具。下面我們還是簡要介紹一下EXP/IMP的使用。
4.1.1 使用方法
Exp parameter_name=value
Or Exp parameter_name=(value1,value2……)
只要輸入引數help=y就可以看到所有幫助
如:
C:\>set nls_lang=simplified chinese_china.zhs16gbk
C:\>exp -help
Export: Release 8.1.6.0.0 - Production on 星期四 4月 10 19:09:21 2003
(c) Copyright 1999 Oracle Corporation. All rights reserved.

透過輸入 EXP 命令和使用者名稱/口令,您可以
在使用者 / 口令之後的命令:

例項: EXP SCOTT/TIGER
或者,您也可以透過輸入跟有各種引數的 EXP 命令來控制“匯出”
的執行方式。要指定引數,您可以使用關鍵字:

格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
例項: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2),如果 T1 是分割槽表
USERID 必須是命令列中的第一個引數。
關鍵字 說明(預設) 關鍵字 說明(預設)
--------------------------------------------------------------------------
USERID 使用者名稱/口令 FULL 匯出整個檔案 (N)
BUFFER 資料緩衝區的大小 OWNER 所有者使用者名稱列表
FILE 輸出檔案 (EXPDAT.DMP) 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 行 (0) 的進度
FILESIZE 各轉儲檔案的最大尺寸
QUERY 選定匯出表子集的子句

下列關鍵字僅用於可傳輸的表空間
TRANSPORT_TABLESPACE 匯出可傳輸的表空間後設資料 (N)
TABLESPACES 將傳輸的表空間列表
在沒有警告的情況下成功終止匯出。
C:\>
幫助已經很詳細的說明了引數的意義和使用方法,並列舉了幾個簡單的例子,注意的是,從8i開始,已經開始支援資料子集的方法,就是可以指定自己的Where條件,可以從表中匯出一行或多行資料。
注意上面的set nls_lang=simplified chinese_china.zhs16gbk,透過設定環境變數,可以讓exp的幫助以中文顯示,如果set nls_lang=American_america.字符集,那麼你的幫助就是英文的了。
增量和累計匯出必須在全庫方式下才有效,而且,大多數情況下,增量和累計匯出並沒有想象中的那麼有效。ORACLE從9i開始,不再支援增量匯出和累計匯出。
4.1.2 表空間傳輸
表空間傳輸是8i新增加的一種快速在資料庫間移動資料的一種辦法,是把一個資料庫上的格式資料檔案附加到另外一個資料庫中,而不是把資料匯出成Dmp檔案,這在有些時候是非常管用的,因為傳輸表空間移動資料就象複製檔案一樣快。
關於傳輸表空間有一些規則,即:
·源資料庫和目標資料庫必須執行在相同的硬體平臺上。
·源資料庫與目標資料庫必須使用相同的字符集。
·源資料庫與目標資料庫一定要有相同大小的資料塊
·目標資料庫不能有與遷移表空間同名的表空間
·SYS的物件不能遷移
·必須傳輸自包含的物件集
·有一些物件,如物化檢視,基於函式的索引等不能被傳輸
可以用以下的方法來檢測一個表空間或一套表空間是否符合傳輸標準:
exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);
select * from sys.transport_set_violation;
如果沒有行選擇,表示該表空間只包含表資料,並且是自包含的。對於有些非自包含的表空間,如資料表空間和索引表空間,可以一起傳輸。
以下為簡要使用步驟,如果想參考詳細使用方法,也可以參考ORACLE聯機幫助。
1.設定表空間為只讀(假定表空間名字為APP_Data 和APP_Index)
alter tablespace app_data read only;
alter tablespace app_index read only;
2.發出EXP命令
SQL>host exp userid=”””sys/password as sysdba”””
transport_tablespace=y tablespace=(app_data, app_index)
以上需要注意的是
·為了在SQL中執行EXP,USERID必須用三個引號,在UNIX中也必須注意避免“/”的使用
·在816和以後,必須使用sysdba才能操作
·這個命令在SQL中必須放置在一行(這裡是因為顯示問題放在了兩行)
3.複製資料檔案到另一個地點,即目標資料庫
可以是cp(unix)或copy(windows)或透過ftp傳輸檔案(一定要在bin方式)
4.把本地的表空間設定為讀寫
5.在目標資料庫附加該資料檔案
imp file=expdat.dmp userid=”””sys/password as sysdba”””
transport_tablespace=y
“datafile=(c:\temp\app_data,c:\temp\app_index)”
6.設定目標資料庫表空間為讀寫
alter tablespace app_data read write;
alter tablespace app_index read write;
4.1.3 匯出/匯入與字符集
明白ORACLE的多國語言設定,ORACLE多國語言設定是為了支援世界範圍的語言與字符集,一般對語言提示,貨幣形式,排序方式和CHAR,VARCHAR2,CLOB,LONG欄位的資料的顯示等有效。ORACLE的多國語言設定最主要的兩個特性就是國家語言設定與字符集設定,國家語言設定決定了介面或提示使用的語言種類,字符集決定了資料庫儲存與字符集有關資料(如文字)時候的編碼規則。正如剛才上面的一個小例子,環境變數NLS_LANG的不同,導致EXP幫助發生變化,這就是多國語言設定的作用(NLS_LANG包含國家語言設定與字符集設定,這裡起作用的是國家語言設定,而不是字符集)。
ORACLE字符集設定,分為資料庫字符集和客戶端字符集環境設定。在資料庫端,字符集在建立資料庫的時候設定,並儲存在資料庫props$表中,對於8i以上產品,已經可以採用“Alter database character set 字符集”來修改資料庫的字符集,但也僅僅是從子集到超集,不要透過update props$來修改字符集,如果是不支援的轉換,可能會失去所有與字符集有關的資料,就是支援的轉換,也可能導致資料庫的不正常工作。字符集分為單位元組字符集與多位元組字符集,US7ASCII就是典型的單位元組字符集,在這種字符集中length=lengthb,而ZHS16GBK就是常用的雙位元組字符集,在這裡lengthb=2*length。
在客戶端的字符集環境比較簡單,主要就是環境變數或登錄檔項NLS_LANG,注意NLS_LANG的優先順序別為:引數檔案à登錄檔à環境變數àalter session。NLS_LANG的組成為“國家語言設定.字符集”,如nls_lang=simplified chinese_china.zhs16gbk。客戶端的字符集最好與資料庫端一樣(國家語言設定可以不一樣,如zhs16gbk的字符集,客戶端可以是nls_lang =simplified chinese_china.zhs16gbk或Ameircan_America.zhs16gbk,都不影響資料庫字元的正常顯示),如果字符集不一樣,而且字符集的轉換也不相容,那麼客戶端的資料顯示與匯出/匯入的與字符集有關的資料將都是亂碼。
使用一點點技巧,就可以使匯出/匯入在不同的字符集的資料庫上轉換資料。這裡需要一個2進位制檔案編輯工具即可,如uedit32。用編輯方式開啟匯出的dmp檔案,獲取2、3位元組的內容,如00 01,先把它轉換為10進位制數,為1,使用函式NLS_CHARSET_NAME即可獲得該字符集:
SQL> select nls_charset_name(1) from dual;
NLS_CHARSET_NAME(1)
-------------------
US7ASCII
可以知道該dmp檔案的字符集為US7ASCII,如果需要把該dmp檔案的字符集換成ZHS16GBK,則需要用NLS_CHARSET_ID獲取該字符集的編號:
SQL> select nls_charset_id('zhs16gbk') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
852
把852換成16進位制數,為354,把2、3位元組的00 01換成03 54,即完成了把該dmp檔案字符集從us7ascii到zhs16gbk的轉化,這樣,再把該dmp檔案匯入到zhs16gbk字符集的資料庫就可以了。(注意,十進位制數與十六進位制之間的轉換,想明白其中的道理)
4.1.4 跨版本使用Exp/Imp
Exp/Imp很多時候,可以跨版本使用,如在版本7與版本8之間匯出匯入資料,但這樣做必須選擇正確的版本,規則為:
·總是使用IMP的版本匹配資料庫的版本,如果要匯入到816,則使用816的匯入工具。
·總是使用EXP的版本匹配兩個資料庫中低的那個版本,如在815與816之間互導,則使用815的EXP工具。
4.2 OS備份
作業系統備份有兩類,冷備份(Cold backup)與熱備份(Hot backup),作業系統備份與以上的邏輯備份有本質的區別。邏輯備份提取資料庫的資料內容,而不備份物理資料塊。而作業系統備份則是複製整個的資料檔案。
4.2.1 冷備份
在檔案級備份開始前資料庫必須徹底關閉。關閉操作必須用帶有normal、immediate、transaction選項的shutdown來執行。
資料庫使用的每個檔案都被備份下來,這些檔案包括:
☆所有資料檔案
☆所有控制檔案
☆所有聯機REDO LOG 檔案
☆INIT.ORA檔案(可選)
作冷備份一般步驟是:
a. 正常關閉要備份的例項(instance);
b. 備份整個資料庫到一個目錄
c. 啟動資料庫

SVRMGRL>connect internal
SVRMGRL >shutdown immediate
SVRMGRL >! cp

SVRMGRL >!tar cvf /dev/rmt/0 /u01/oradata/prod
SVRMGRL >startup
注意:如果利用指令碼對資料庫進行冷備份,必須對關閉資料庫的命令進行邏輯檢查,如果發生關閉資料庫的命令不能正常執行而導致資料庫沒有正常關閉,那麼,所有的冷備份將回是無效的。
4.2.2熱備份
熱備份是當資料庫開啟並對使用者有效是的OS級的資料備份。熱備份只能用於ARCHIVELOG方式的資料庫。在資料檔案備份之前,對應的表空間必須透過使用ALTER TABLESPACE …… BEGIN BACKUP以備份方式放置。然後組成表空間的資料檔案可以使用類似冷備份的作業系統命令進行複製。在資料檔案用作業系統命令複製後,應使用ALTER TABLESPACE …… END BACKUP命令使表空間脫離熱備份方式。
熱備份沒有必要備份聯機日誌,但必須是歸檔狀態,在例項恢復的時候,可能需要用到歸檔日誌。當前聯機日誌一定要保護好或是處於鏡相狀態,當前聯機日誌的損壞,對於資料庫的損壞是巨大的,只能以資料的丟失來進行資料庫的恢復工作。
對於臨時表空間,存放的是臨時資訊,在熱備份是也可以考慮不用備份,如果臨時檔案發生故障,可以刪除該資料檔案與表空間,重建一個臨時表空間。
熱備份的優點是顯而易見的
---- a.可在表空間或資料檔案級備份,備份時間短。
---- b.備份時資料庫仍可使用。
---- c.可達到秒級恢復(恢復到某一時間點上)。
---- d.可對幾乎所有資料庫實體作恢復。
---- e.恢復是快速的,在大多數情況下在資料庫仍工作時恢復。
作業系統作熱備份的一般步驟為:
1. 連線資料庫
SVRMGRL>connect internal;
2. 將需要備份的表空間(如User)設定為備份方式
SVRMGRL>Alter tablespace User begin backup;
3. 複製資料檔案
SVRMGRL>!cp /u01/oradata/prod/user01.ora /backup/prod/user01.ora
Or
$cp cp /u01/oradata/prod/user01.ora /backup/prod/user01.ora
4. 在資料檔案複製完成後,將表空間拖體備份方式
SVRMGRL>Alter tablespace User end backup;
5. 對所有需要備份的表空間重複2,3,4
6. 使用如下的命令備份控制檔案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來獲得
4.3 RMAN(備份與恢復管理器)
4.3.1 使用RMAN進行備份
4.3.1.1 瞭解RMAN
Recovery manager(RMAN)是ORACLE提供的DBA工具,用語管理備份和恢復操作。RMAN只能用於ORACLE8或更高的版本中。它能夠備份整個資料庫或資料庫部件,其中包括表空間、資料檔案,控制檔案和歸檔檔案。RMAN可以按要求存取和執行備份和恢復。
RMAN備份有如下優點
☆ 支援線上熱備份
☆ 支援多級增量備份
☆ 支援並行備份、恢復
☆ 減少所需要備份量
☆ 備份、恢復使用簡單
重要的是,使用恢復管理器允許您進行增量資料塊級的備份(這個與匯出/匯入的增量截然不同)。增量RMAN備份是時間和空間有效的,因為他們只備份自上次備份以來有變化的那些資料塊。另一個空間有效的RMAN特性是它只備份資料檔案中使用的資料塊,忽略空的,未用的資料塊,這個對於預分配空間的表空間有很大的好處。
從9i開始,還增加了RMAN的資料塊級別的恢復,可以進一步減少資料庫恢復時間。
RMAN支援以下不同型別的備份
FULL 資料庫全備份,包括所有的資料塊
INCREMENTAL 增量備份,只備份自上次增量備份以來修改過的資料塊。需要一個0級的增量作為增量的基礎,可以支援7級增量。
OPEN 在資料庫開啟的時候使用
CLOSED 在資料庫安裝(MOUNT)但不開啟的時候備份,關閉備份可以是CONSISTENT或IN CONSISTENT型別的。
CONSISTENT 在資料庫安裝,單不開啟,並且在安裝之前資料庫被徹底關閉(而不是被破壞或異常退出)時使用。CONSISTENT備份可以簡單的進行復原(RESTORE)而不是恢復(RECOVER)
INCONSISTENT 在資料庫開啟或安裝(但不開啟)時使用。在該資料庫正常關閉或崩潰後,INCONSISTENT備份需要恢復。
理解BACKUP,RESTORE,RECOVER命令,這是RMAN最基本的三個命令,可以進行資料庫的備份,復原以及恢復操作。
4.3.1.2 瞭解恢復目錄
理解恢復目錄,RMAN可以在沒有恢復目錄(NOCATALOG)下執行,這個時候備份資訊儲存在控制檔案。儲存在控制檔案的備份資訊是很危險的,如果控制檔案的破壞將導致備份資訊的丟失與恢復的失敗,而且,沒有恢復目錄,很多RMAN的命令將不被支援。所以對於重要的資料庫,建議建立恢復目錄,恢復目錄也是一個資料庫,只不過這個資料庫用來儲存備份資訊,一個恢復目錄可以用來備份多個資料庫。
建立RMAN目錄,以下步驟說明了在一個資料庫中盡力RMAN目錄的過程。
1.為目錄建立一個單獨的表空間
SQL>Create tablespace tools datafile ‘fielname’ size 50m;
2.建立RMAN使用者
SQL>Create user RMAN identified by RMAN default tablespace tools temporary tablespace temp;
3.給RMAN授予許可權
SQL>Grant connect , resource , recovery_catalog_owner to rman;
4.開啟RMAN
$>RMAN
5.連線資料庫
RMAN>connect catalog rman/rman
6.建立恢復目錄
RMAN>Create catalog tablespace tools
註冊目標資料庫,恢復目錄建立成功後,就可以註冊目標資料庫了,目標資料庫就是需要備份的資料庫,一個恢復目錄可以註冊多個目標資料庫,註冊目標資料庫的命令為:
$>RMAN target internal/password catalog rman/rman@rcdb;
RMAN>Register database;
資料庫註冊完成,就可以用RMAN來進行備份了,更多命令請參考ORACLE聯機手冊或《ORACLE8i備份與恢復手冊》。
登出資料庫不是簡單的在RMAN提示下反註冊就可以了,需要執行一個程式包,過程如下:
1. 連線目標資料庫,獲得目標資料庫ID
$> RMAN target internal/password catalog rman/rman@rcdb;
RMAN-06005: connected to target database: RMAN (DBID=1231209694)
2. 查詢恢復目錄,得到更詳細的資訊
SQL> SELECT db_key, db_id FROM db WHERE db_id = 1231209694;

DB_KEY DB_ID
---------- ---------------
1 1237603294
1 row selected.
3. 執行過程dbms_rcvcat.unregisterdatabase登出資料庫,如
SQL> EXECUTE dbms_rcvcat.unregisterdatabase(1 , 1237603294)
4.3.1.3 採用RMAN進行備份
RMAN使用指令碼來備份資料庫,以下是RMAN進行備份的幾個例子。
1.備份整個資料庫
backup full tag ‘basicdb’ format ‘/bak/oradata/full_%u_%s_%p’ database;
2.備份一個表空間
backup tag ‘tsuser’ format ‘/bak/oradata/tsuser_%u_%s_%p’ tablespace users;
3.備份歸檔日誌
backup tag ‘alog’ format ‘/bak/archivebak/arcbak_%u_%s_%p’ archivelog all delete input;
4.3.2 維護RMAN
4.3.2.1 檢視RMAN的資訊
檢查現有備份
RMAN>list backup
列出過期備份
RMAN>report obsolete
刪除過期的備份
RMAN>allocate channel for maintenance type disk;
RMAN>change backupset id delete;
RMAN>release channel;
4.3.2.2 同步或重置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 expire backup;
RMAN>release channel;
第五章. 定製恰當的備份策略
5.1 定製正確的策略
正確的備份策略不僅能保證資料庫伺服器的24*7的高效能的執行,還能保證備份與恢復的快速性與可靠性。我們將以RMAN的多級增量備份作為一個備份策略的例子來討論。採用多級備份就是為了減少每天備份所需要的時間,而又保證系統有良好的恢復性。恢復時間與備份時間要有一個權衡。比如只要進行一個資料庫的全備份,然後就只備份歸檔也可以保證能把資料庫恢復到最新的狀態,但是這樣的恢復時間將是不可容忍的。多級備份也正是 為了解決這種問題,以下就是一個多級備份的例子:
每半年做一個資料庫的全備份(包括所有的資料和只讀表空間)
每一個月做一次零級備份(不包含只讀表空間)
每個星期做一次一級備份
每天做一次二級備份
任何資料庫的更改需要重新同步CATALOG目錄並重新備份(如新增資料檔案)或重新備份(如修改表空間為只讀)
每次備份後都可以備份歸檔日誌或定期備份歸檔日誌。
如果可能,可以直接備份到磁帶上。
資料庫全備份的指令碼
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup full tag ‘dbfull’ format ‘/u01/oradata/backup/full%u_%s_%p’ database
include current controlfile;
sql ‘alter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input; #備份歸檔可選,可以單獨定期備份
release channel c1;
release channel c2;
release channel c3;
}
零級備份的指令碼
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 0 tag ‘db0’ format ‘/u01/oradata/backup/db0%u_%s_%p’
database skip readonly;
sql ‘alter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input; #備份歸檔可選,可以單獨定期備份
release channel c1;
release channel c2;
release channel c3;
}
同理,我們可以得到一級備份,二級備份的指令碼,如一級備份的指令碼
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 1 tag ‘db1’ format ‘/u01/oradata/backup/db1%u_%s_%p’
database skip readonly;
sql ‘alter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input; #備份歸檔可選,可以單獨定期備份
release channel c1;
release channel c2;
release channel c3;
}
如果按照以上備份策略,則每天的所需要備份的資料量只有一天的改變數。而做恢復時最多要恢復當月的一個零級備份+三個一級備份+6個二級備份+當天的歸檔檔案。如果不能接受這樣的恢復時間,可以減少零級備份之間的時間間隔。
在每次備份後,原則上在該備份點之前的歸檔日誌就可以刪除掉了,但是為了進一步的安全以及日後需要(如使用LOGMNR查詢所需資訊),建議有條件的話,歸檔日誌儲存一年,可以儲存在磁帶等廉價存取裝置上。
5.2 與RMAN備份有關的最佳化
備份操作主要是完成以下三個步驟
1、從磁碟上讀取資料
2、在記憶體中處理資料塊
3、寫入資料到磁碟或磁帶
以上的讀寫操作可以同步或非同步的完成,在同步I/O操作中,一個時間只允許有一個IO操作,但是在非同步I/O操作中,一個時間允許有多個IO操作。因此,備份與恢復的調優主要集中在以下幾個方面:
1、 提高同步或非同步I/O操作能力
在支援非同步操作的作業系統上,可以透過設定TAPE_AYSNCH_IO,DISK_ASYNCH_IO和BACKUP_TYPE_IO_SLAVES來支援非同步操作,提高寫的能力。
2、 提高磁碟讀能力
可以在backup命令後透過設定DISKRATIO來保證從多個磁碟上讀取資料,保證連續的資料流。
3、 正確設定緩衝區與引數值
設定LARGE_POOL_SIZE,使備份可以使用連續的緩衝池,透過設定DB_FIL_DIRECT_IO_COUNT可以提高緩衝區的利用。如果使用磁帶備份,還可以設定BACKUP_TYPE_IO_SLAVES來提高磁帶的寫能力。
4、 採用並行備份
開闢多個通道,可以實現並行備份與恢復
5.3 備份RMAN資料庫
RMAN自己的資料庫也需要備份,但是本身很小,而且不是經常發生變化,所以在每次RMAN備份完成後,都可以用如下指令碼對RMAN資料庫備份。
EXP pafile =exprman.sql
exprman.sql為
USERID=RMAN/RMAN
BUFFER=32768
OWNER=RMAN
FILE=RMAN.DMP
ROWS=Y
GRANTS=Y
COMPRESS=Y
CONSISTENT=Y
5.4 使自動備份資料庫
自動備份資料庫不外乎以下三種方式
WINDOWS下的任務計劃(At命令)
UNIX下的Crontab
第三方工具如Viritas
在以上三種方式中Viritas屬於第三方工具,很多人可能都沒有接觸,主要說一下windows的任務計劃與unix的cron
1. 生成指令碼檔案,如backup.rcv
假定檔案內容如下:
$>cat backup.rcv
connect target sys/password rcvcat rman/rman@localname;
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input;
release channel c1;
release channel c2;
release channel c3;
}
2. 生成執行檔案
在windows上生成backup_archive.bat,內容包括
rman cmdfile = backup.rcv
在unix下生成 backup_archive.sh,內容包括
/oracle/ramn/rman cmdfile = backup.rcv
3. 加入排程
在windows中用任務計劃嚮導即可,或使用at命令。
在unix中,在目標機器上編寫一個檔案,用以啟動自動備份程式。假定檔名為ORACLE,檔案將放在/var/spool/cron/crontabs目錄下
$>cat oracle
0 23 * * 0 backup_archive.sh
#表示星期天23點對資料庫備份
0 12,18 * * * backup_archive.sh
#表示每天12點,18點備份
Crontab檔案的每一行由六個域(minutes,hours,day of month,month,day of week,command)組成,域之間用空格或Tab分隔開來
第六章. 常見誤區
1、使用EXP/IMP備份
EXP/IMP不是一個良好的備份工具,在以後的發展之中,ORACLE對EXP/IMP用於備份的支援會越來越低。ORACLE只是把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程式。
參考文獻:
Expert One-on-one Oracle [美] Thomas Kyte 著 清華大學出版社
Oracle 8i Web開發指南 [美] Dan Hotka,et al. 著 清華大學出版社
Oracle 8i DBA Architecture & Administration and backup & Recovery Study Guide
[美] Dong Stuns Biju Thomas著 電子工業出版社
Oracle 資料庫管理員技術指南 [美] Sumit Sarin著 機械工業出版社

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15592508/viewspace-717306/,如需轉載,請註明出處,否則將追究法律責任。

相關文章