天天看點

RMAN 系列(三),媒體管理問題

Oracle 10g中的RMAN 使用程式主要關注的是将磁盤備份作為媒體恢複解決方案的最佳方法。 随着磁盤價格的下跌,大量的存儲區網絡(Storage Area Network:SAN)已經在很多資料中心找到了永久的存儲空間。 随着業務向着價格越來越便宜而容量越來越大的磁盤發展,對RMAN的功能(如Flashback)進行了更新,進而可以最有效的利用可用存儲空間。

RMAN 備份實用程式是按邏輯執行的過程,而寫入到磁盤的操作正是Oracle 資料庫所擅長的工作。是以,當Oracle 資料庫開始改進磁盤寫入功能時,RDBMS也會做相應的工作來改進性能。 

但是在許多情況下,資料庫的大小及其位置都使得它無法備份到磁盤。或者仍然存在要履歷資料副本或者離站歸檔的業務需求。是以還是需要寫入到老式的錄音帶裝置。

Oracle 資料庫的錄音帶備份需要第三方的輔助裝置,這主要是因為市場上流行的連續媒體子系統具有完全不同的性質。 RMAN 開發人員通常使用那些大供應商提供的可讀寫錄音帶産品,而不去嘗試這些不同類型的錄音帶裝置的不同系統調用。

Oracle 擁有自己的媒體管理軟體解決方案,稱為 Oracle 安全備份(Oracle Secure Backup: OSB)。 OSB 是完全內建的,RMAN 到磁盤的解決方案,它不需要任何第三方供應商的軟體插件,但是OSB 不成熟。

一. 使用錄音帶備份的原因

第一個理由是由于資料庫的大小。現在的資料庫平均大小已經達到100GB,并且這個資料還在繼續增加。資料庫的大小決定了是否需要執行錄音帶備份操作。即使磁盤價格在迅速下降,但購買很多磁盤需要的花費很大。 磁盤備份的優點在于快速恢複,而磁盤的備份和還原相對較慢。

第二個理由是易管理性。通常,全企業備份政策的實作和執行是由中央系統上的人員集中管理的,這樣節省了備份的規模和開支,公司也有能力買大容量的錄音帶盒式裝置來存儲更多的資料。

第三個理由:可移植性。 為了歸檔和避免災難,可以很容易的将一堆錄音帶離站移動,而硬碟則無法這麼友善的傳輸。

集中備份資源的缺點:會導緻備份複雜話,尤其是Oracle 資料庫的複雜化。 Oracle資料檔案,日志檔案和控制檔案的複雜性意味着我們不能簡單的執行一個OS 作業。讓它在空閑時間複制檔案。 相反,我們必須使資料庫做好執行備份的操作,然後通知開始複制,最後重新配置資料庫。

使用RMAN可以避免這個資料庫的配置,備份操作可以發生在任何時候,任何情況下,不過,要将備份寫入集中的錄音帶備份位置,就必須執行一些特殊的RMAN 配置。

二. RMAN 和 媒體管理器 概述

通過使用媒體管理器,RMAN将資料備份到錄音帶上。 媒體管理器(media manager:MM)是由第三方軟體商提供的,它将資料塊中的資料流從RMAN通道程序傳遞到相應的錄音帶中。 通常,媒體伺服器位于一個企業網中。 媒體管理伺服器(Media management Server)是一個集中化系統,在這裡可以處理全企業的錄音帶備份操作。

計算機系統必須安裝了媒體管理(MM)用戶端軟體才能使用媒體管理器。媒體管理用戶端軟體可以連接配接MM伺服器,并且通過網絡傳輸資料。 如果RMAN要使用MM伺服器,還需要另外的軟體元件。 安裝用戶端軟體之後,我們還必須為媒體管理器安裝Oracle 子產品。 Oracle 子產品(Oracle Module)是一個用于Oracle RDMBS 的軟體插件,它可以連接配接RMAN與用戶端管理軟體,後者可以把資料傳送到MM伺服器。 Oracle 的這個插件也稱為媒體管理庫(Media management Library: MML).

2.1 媒體管理器目錄

媒體管理器是我們使用的整個備份系統中的一個獨立子系統。它有三個元件:與Oracle 結合的媒體管理庫(MML),媒體管理用戶端 和 媒體管理伺服器。MM 伺服器有多種元件,這些元件的規範由供應商提供,所有的MM伺服器都必須具有一些相同的元件。

媒體管理器目錄是MM伺服器上的資訊資料庫,它儲存了關于實體錄音帶本身,錄音帶的通路權限 和 錄音帶存儲内容的相關資訊。 備份完成時,媒體管理器目錄則記錄RMAN檔案句柄,句柄(Handle)是使用RMAN執行備份操作時建立的備份片名稱。 如果執行磁盤備份操作,句柄就是實體檔案名。如果執行錄音帶備份,媒體管理器目錄中使用的句柄就是備份所在的錄音帶位置。

RMAN 完成錄音帶備份操作時會向管理器提供句柄名,媒體管理器把該句柄記錄在目錄中。需要執行還原操作時,RMAN會基于自身的目錄向媒體管理器請求指定的句柄。随後,媒體管理器查找這個句柄,将該句柄與指定錄音帶關聯在一起,同時判斷錄音帶是否有效。 如果錄音帶有效,媒體管理器會使用這個錄音帶,并且開始将資料流傳送回RMAN,這樣就可以重新建構資料檔案。

2.2 媒體管理器的其他軟體元件 

除了 媒體管理器目錄 以外,MM 管理器還包含兩個基本元件:

(1) 裝置代理程式(Device agent):裝置代理程式是負責使用實際錄音帶裝置并在該裝置上傳送資料的元件

(2) 自動機器接口(Robotic Interface): 自動機器接口控制所有自動機器的軟體,這些自動機器負責在錄音帶滿時或在請求寫入已填滿的錄音帶時更換錄音帶。

Oracle 中的RMAN 不了解這些元件的存在。 RMAN 隻是簡單地把指令請求發送給MML,随後MM 軟體會處理相應的所有事件。 不過,由于備份和恢複的成功取決于這些元件,是以熟悉這些軟體元件也是至關重要的。使用RMAN出現的問題大多數都與裝置代理程式或自動機器接口有關,但從RMAN 接口幾乎察覺不到這些問題。

2.3 媒體管理庫(MML)

MML 是一個庫檔案,它将RMAN的一緻性的備份或還原請求解釋為在據诶是管理伺服器上的具體的系統調用,以實作要求的操作。 MML 與 MM 用戶端軟體和MM 伺服器軟體一樣是由同一個供應商提供的,但是我們需要單獨購買MML 和取得許可。

首次配置設定錄音帶通道時,MML 作為一個內建的庫檔案加載到Oracle 記憶體空間,它是Oracle RDBMS 軟體的邏輯部分,是以RMAN可以生成正确的MM用戶端軟體調用。  這個內建實際上非常簡單:配置設定錄音帶通道時,Oracle 加載一個名為libobk.so 的檔案。 這個檔案位于ORACLE_HOM/BIN 目錄中,它隻是一個要使用的MML 檔案的符号連接配接。 在Windows平台上,Oracle 會在搜尋路徑中查找一個名為orasbt.dll 的庫檔案。 不論是哪一種媒體管理器,在媒體管理DDL 檔案都名為: orasbt.dll, 媒體管理器通常将其寫入到WINDOWS/system32 目錄中。 如果這個檔案沒有位于該目錄中,在系統路徑環境變量中有一個能夠查找到orasbt.dll 檔案的搜尋路徑。

示例: 使用Oracle 預設SBT 接口測試錄音帶通道

RMAN> run

2> {

3> allocate channel c1 type 'sbt_tape'

4> PARMS="SBT_LIBRARY=oracle.disksbt,

5> ENV=(BACKUP_DIR=f:/BACKUP/)";

6> BACKUP DATABASE FORMAT='%U';}

釋放的通道: ORA_DISK_1

配置設定的通道: c1

通道 c1: SID=21 裝置類型=SBT_TAPE

通道c1: WARNING: Oracle Test Disk API

啟動 backup 于 18-6月 -10

通道 c1: 正在啟動全部資料檔案備份集

通道 c1: 正在指定備份集内的資料檔案

輸入資料檔案: 檔案号=00001 名稱=D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF

輸入資料檔案: 檔案号=00002 名稱=D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF

輸入資料檔案: 檔案号=00003 名稱=D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF

輸入資料檔案: 檔案号=00004 名稱=D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF

通道 c1: 正在啟動段 1 于 18-6月 -10

通道 c1: 已完成段 1 于 18-6月 -10

段句柄=06lghd3f_1_1 标記=TAG20100618T085926 注釋=API Version 2.0,MMS Version 8.1.3.0

通道 c1: 備份集已完成, 經過時間:00:01:35

通道 c1: 正在啟動全部資料檔案備份集

通道 c1: 正在指定備份集内的資料檔案

備份集内包括目前控制檔案

備份集内包括目前的 SPFILE

通道 c1: 正在啟動段 1 于 18-6月 -10

通道 c1: 已完成段 1 于 18-6月 -10

段句柄=07lghd6e_1_1 标記=TAG20100618T085926 注釋=API Version 2.0,MMS Version 8.1.3.0

通道 c1: 備份集已完成, 經過時間:00:00:01

完成 backup 于 18-6月 -10

釋放的通道: c1

也可以永久性配置指令設定Oracle 庫:

Configure channel device type 'SBT_TAPE' 

PARMS 'SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=f:/BACKUP/)';

如果視圖分析媒體管理器備份解決方案可能存在的問題或無法使備份工作時,上面的的示例就是一個很好的測試方法。 通過配置設定一個‘僞造的’錄音帶通道,可以測試RMAN 配置是否正确。

注意: 不要在産品備份時測試MML 檔案。如果要在産品環境中執行磁盤備份操作,就配置設定磁盤通道。 僞造MML的性能非常糟糕,這是因為RMAN為錄音帶而不是磁盤配置設定記憶體緩沖區,因而磁盤寫操作的速度遠大于錄音帶寫速度這一點沒有展現。

2.4 連接配接MML 的接口

連結Oracle 與 MML時,意味着RMAN 可以通過它來傳遞指令以連接配接MML,或者進一步說,在資料庫伺服器上安裝的MM 用戶端軟體。

要指定MM 伺服器,我們必須在RMAN 會話中傳遞指定伺服器名的環境變量。 具體來講,在配置設定錄音帶通道時,我們将伺服器名指定為環境變量。 在上面的示例中,我們用allocate channel 指令的PARMS 選項來傳遞環境變量。不同的MM 産品具有不同的環境變量。 如Veritas NetBackup 要求使用NB_ORA_SERV 參數。

Allocate channel t1 type 'sbt_tape' PARMS="ENV=(NB_ORA_SERV=storage1)";

這裡的MM伺服器名稱就是storage1,同時資料庫伺服器在MM 伺服器中已注冊并具有寫錄音帶裝置的權限。

除了伺服器名之外,我們還可以在通道配置設定時傳遞其他一些參數來利用伺服器上的管理功能。 如Netbackup 允許我們指定用于備份操作的類或排程,而EMC Networker 允許我們指定資源池。

三. SBT API

RMAN可以不受影響地使用不同的媒體管理器,這是因為不管加載哪一種MML,RMAN都會發送相同的指令。Oracle 使用SBT API 來開發RMAN,SBT API 是一種通用API, 提供給Oracle 資料庫備份操作編碼內建産品的第三方軟體商,是RMAN向媒體管理器發送指令的工具。

SBT API 負責向MM 伺服器發送指令以初始化在錄音帶上備份檔案的建立,還發送基于媒體管理器目錄中的檔案句柄來查找先前備份的指令。 SBT API 可以發送删除備份的指令,也可以寫新備份以及從備份位置讀取備份。 Oracle RMAN SBT API 有1.1 和2.0 兩種版本。 1.1 版本是與Oracle 8.0.x 一起釋出和使用的。其後,RMAN 使用2.0 版本的規範生成媒體管理器調用,運作備份時我們可以在RMAN輸出中看到這個版本号。

RMAN 還會傳回通道配置設定時的初始化的MML 版本,這可以在通道配置設定期間的RMAN輸出中看到。 如果看到了MML 版本資訊,也就說明已經成功連結了MML 與 RMAN,否則RMAN輸出中就不能解析版本資訊。

四. 錄音帶備份的全過程

概述一下錄音帶備份的全過程,具體細節是有編寫內建MML的供應商來處理。

配置設定錄音帶通道時,RMAN 會在目标資料庫上生成一個伺服器程序,這個伺服器程序随後生成sbtinit()的 SBT API 調用,該調用初始化MML 檔案并将這個檔案加載到記憶體,同時還向RMAN 傳回MML支援的SBT API 版本。 調用sbtinit()後,RMAN還會調用sbtinit2(),sbtinit2()調用将向媒體管理器軟體提供更多詳細的配置資訊。

RMAN 分析備份指令後會執行遠端過程調用(RPC),RPC 會生成sys.dbms_backup_restore.backuppiececreate 調用。 這時,通道程序将調用sbtbackup(),該調用在指定的錄音帶位置處理備份片的建立。 Sbtbackup()調用會通知媒體管理器,Oracle 将開始推入資料塊流,這樣媒體管理器會為資料流準備好錄音帶備份。

RMAN 輸入緩沖區被填滿後會執行記憶體對記憶體的寫操作把内容寫入輸出緩沖區。 輸出緩沖區被填滿時,通道程序調用sbtwrite2(),進而将輸入緩沖區的内容寫到錄音帶上。一般情況下,這種方式會在MM 伺服器上使用裝置代理來通路錄音帶自身。

當用于特定備份的所有輸出緩沖區被清空,并且sbtwrite2() 調用的工作也完成時,通道會話會調用sbtclose2(), 該調用将徹底清空所有媒體管理器緩沖區,并且将備份片送出給錄音帶。

完成備份後,通道程序調用sbtinfo2(),該調用确認媒體管理器目錄已經記錄了備份片。Sbtinfo2() 調用向媒體管理器目錄請求備份的錄音帶,錄音帶位置和備份的完整時間,然後将備份片句柄寫入媒體管理器目錄。

在确認備份片位置後,通道程序調用sbtend(),該調用清楚剩餘的資源,并将他們釋放,以用于其他資料庫操作。最後執行的是收回通道程序的動作,它在目标資料庫中完成。

五. 從錄音帶還原的全過程

在還原操作期間,SBT API 将經過一系列步驟還原錄音帶備份到資料庫中。

還原配置設定錄音帶通道時,RMAN 會在目标資料庫上建立一個伺服器程序。随後通道程序調用sbtinit()來初始化媒體管理軟體。 這一步驟與備份操作相同,MML 檔案被加載到記憶體中。

基于RMAN中的restore 指令的參數,RMAN 會檢查RMAN目錄來确定要進行還原的備份句柄名。随後,它使用sbtrestore()調用将請求的備份片句柄傳遞給媒體管理器,該調用告訴媒體管理器要為還原操作朱備好相應的錄音帶,即使用媒體管理器目錄來查找相應的錄音帶,如果有必要則向自動機器指令傳遞取錄音帶的指令。加載錄音帶後,錄音帶必須繞回到備份片的起始點。

為還原準備好錄音帶後,通道程序調用sbtread2() 函數從錄音帶裝置讀取資料并将資料流發送至ORACLE 程序。 這些資料被加載到輸入緩沖區,然後被寫入到輸出緩沖區,最後被寫入控制檔案指定的資料檔案位置。

在錄音帶上檢測到備份片的結束點時,錄音帶通道程序調用sbtclose() 函數來斷開該裝置片所在的錄音帶,這表明Oracle 結束了對這個錄音帶的操作。 如果執行還原操作時需要多個備份片,通道程序會傳回第二個步驟并為另一個被分片調用sbtstore()。

還原操作完成并且RMAN不再請求備份片時,通道程序調用sbtend()函數,該函數清理并釋放通道資源以供其他方面使用。 然後通道程序結束,此後媒體管理器就可以解除安裝已經請求過的錄音帶。

六. 使用 sbttest 和 loadsbt.exe

通常總有一些提示說明是否成功連結了MML 與Oracle,如,來自通道配置設定的資訊說明了MML版本。不過這些訓示不能保證最後的成功,在更下層的網絡拓撲中(MM用戶端或MM伺服器)仍然可能出現故障。 

Oracle 提供了一個名為sbttest的實用程式,可用它來測試以確定RMAN能夠使用MM配置來執行錄音帶備份操作。 從指令可以調用這個實用程式,該程式執行一個完整的測試:sbttest 會向錄音帶寫一個資料塊,然後請求讀取這個資料庫。 通過這種方式,sbttest 運作備份操作期間執行的所有SBT API 函數,并确認這些函數能否成功。

Sbttest 的用法非常簡單: 隻要從指令提示符運作。 确認完成了所有的MM配置,然後進入RMAN運作環境中的指令提示符,并輸入sbttest 和測試檔案名。 

-bash-3.2$ sbttest

Error: backup file name must be specified

Usage: sbttest backup_file_name

               <-dbname database_name>

               <-trace trace_file_name>

               <-remove_before>

               <-no_remove_after>

               <-read_only>

               <-no_regular_backup_restore>

               <-no_proxy_backup>

               <-no_proxy_restore>

               <-file_type n>

               <-copy_number n>

               <-media_pool n>

               <-os_res_size n>

               <-pl_res_size n>

               <-block_size block_size>

               <-block_count block_count>

               <-proxy_file os_file_name bk_file_name

                           [os_res_size pl_res_size block_size block_count]>

               <-libname sbt_library_name>

Required parameters:

  backup_file_name: The name of the backup file which will be created by

                    this program.  If a BFS or Backup Piece already exists

                    with this name, then this program will not create a new

                    backup file - the existing file will be read in its

                    entirety and its contents will not be verified

Optional parameters:

  -dbname  specifies the database name which will be used by SBT

           to identify the backup file. The default is "sbtdb"

  -trace   specifies the name of a file where the Media Management

           software will write diagnostic messages.

  -remove_before   if specified, then the specified backup file will be

                   deleted before it is opened.  This option is intended

                   for when sbttest has already been run but did not complete

                   successfully, leaving behind the backup file it created.

  -no_remove_after   The default behavior of this program is to delete the

                     backup file, if it was created by this program.  If this

                     option is specified, then the file will not be

                     removed when this program is complete.

  -read_only   if -read_only is specified, then backup_file_name must already

               exist. Its contents will be read. If it is determined that the

               file was created by this program, then its contents is validated.

  -no_regular_backup_restore  skips non-proxy backup and restore.

  -no_proxy_backup            skips proxy copy backup session.

  -no_proxy_restore           skips proxy copy restore session.

  -file_type    specifies file type - 1, 2 or 3.

  -copy_number  this is the copy_number parameter to sbtpcbackup.

  -media_pool   this is the media_pool  parameter to sbtpcbackup.

  -os_res_size  specifies the size in bytes of the os reserved block.

  -pl_res_size  specifies the size in bytes of the platform reserved block.

  -block_size   specifies the size in bytes of each block written to the

                backup file. The default is 16384.

  -block_count  specifies how many blocks will be written to the

                backup file. The default is 100.

  -proxy_file   specifies the os file name, backup file name, os reserved size,

                platform reserved size, block size, and block count for each

                proxy file.  For each proxy_file, the os_file_name and

                bk_file_name parameters are mandatory, the other four

                parameters are optional.  If none of the four is specified,

                either the default or the value specified with -os_res_size,

                pl_res_size, block_size, block_count will be used. It some of

                the four are the same as the values set with -os_res_size,

                pl_res_size, block_size, and block_count, a letter 'g' or 'G'

                can be used.

                For example,

                    stksbt2 -os_res_size 10 -pl_res_size 20 -block_count 30

                            -proxy_file file1.osf file1.bkf g g g 100

                then, for file1.osf, the backup file name is file1.bkf, the

                os reserved size is 10 bytes, and the platform reserved size

                is 20, block size is 16384 byte, and the block count is 100.

                But in this case,

                    stksbt2 -proxy_file file1.osf file1.bkf g g g 100

                            -os_res_size 10 -pl_res_size 20 -block_count 30

                for file1.osf, the os_res_size and pl_res_size will be the

                default value, 0 (instead of 10 and 20), and the block_count

                will be 100 (instead of 30) and the block_size will also be

                the default, 16384.

  -libname      specifies the SBT library to test. sbttest loads library

                using dlopen() call.  If this option is not used, sbttest

                tries to test against libobk.so. Otherwise uses statically

                linked library.

                Specify oracle.disksbt for oracle's disk SBT library.

Sbttest 實用程式已經相當完善。 現在,我們可以傳遞許多參數來測試MM系統的所有過程,包括命名要測試的資料庫,修改sbttest 寫入的資料塊數目,以及處理sbttest 寫入錄音帶的檔案。 從指令提示符簡單的輸入sbttest 會給出所有可以使用的參數開關和簡單的文本說明。

Sbttest 使用程式隻适用于Unix 平台;在windows 平台上,我們可以想Oracle Support 請求loadsbt.exe 實用程式。 遺憾的是,Loadsbt.exe 實用程式不具有與sbttest相同的性能,它隻是簡單的在搜尋路勁中查找orasbt.dll 檔案。 如果找到該檔案,loadsbt.exe 實用程式會試圖加載該檔案,其加載方法與Oracle 在錄音帶備份操作期間加載的方法相同。 如果可以加載orasbt.dll 檔案,loadsbt.exe 實用程式會通知使用者,但它不會在錄音帶上寫入資料塊。 是以我們無法檢視整個MM 配置工作。 是以,loadsbt.exe 的作用不如sbttest.