學習和掌握如何使用NBU備份檔案系統,對于一個資料管理者來說,僅僅是一個開始。因為對于大部分企業來說,買來NBU主要是為了備份企業資料庫的資料,保護資料庫的資料安全,進而保證企業應用的安全運作。是以,從本文起,将陸續推出針對oracle、DB2和sybase的資料庫備份。 Oracle備份簡介: 簡單的按照備份進行的方式,可以分為邏輯備份、冷備份(脫機備份)、熱備份(聯機備份),其實冷備份與熱備份又可以合稱為實體備份。 按照備份的工具,可以分為EXP/IMP備份和RMAN。一般來說,Exp/Imp是oracle的一個好的轉儲工具,特别是在小型資料庫的轉儲,表空間的遷移,表的抽取,檢測邏輯和實體沖突等中有很強的功能。但是目前主要最廣泛的Oracle備份恢複工具是rman 。RMAN是Oracle提供的一個資料庫備份和恢複工具,利用rman可以友善進行資料庫的冷備份和熱備份。此外,有一些個人使用者,會使用OS拷貝,但是它的缺點是占用空間大,而且拷貝檔案的内容一般與系統環境有很大關系,轉移到其他機器不容易恢複,不是企業使用者的選擇。 在本文中,我們将介紹如何利用NBU和oracle的rman工具進行oracle的熱備份。熱備份也稱為聯機(Archivelog)備份,是當資料庫打開并對使用者有效是的OS級的資料備份。熱備份與冷備份最大的差別就在于備份時不需要關閉資料庫,适合于24×7業務類型的需要。 注意,筆者假設用于已經閱讀過前作《用NBU備份oracle系統-冷備份》,故在講述中會忽略一些基本的配置過程,重點在于将冷備份和熱備份的差別。是以如果對細節不是很清楚的使用者,可以翻閱前作。 熱備份的條件: 使用者如果需要進行熱備份,那麼必須将資料庫設定為archivelog模式。使用者可以登入資料庫後,通過“SQL> archive log list”檢視資料庫的模式是否是archivelog模式。如果使用者資料庫不是在archivelog模式下,可以通過下列指令将其設定為歸檔模式: • SQL>shutdown immediate • SQL>startup mount • SQL>alter database archivelog • SQL>alter database open 在歸檔模式下,使用者的資料庫會将所有的日志記錄起來,是以時間一久就會占用大量的磁盤空間,是以使用者可以按需,将資料庫改回到非歸檔模式,方法如下所示: • SQL>shutdown immediate • SQL>startup mount • SQL>alter database noarchivelog • SQL>alter database open 熱備份的類型: 從NBU的角度來說,oracle的熱備份分為兩種:一種是資料庫備份,可以在不關閉資料庫的情況下,備份某個資料庫的資料檔案、控制檔案和歸檔日志檔案等等;第二種備份模式是熱備份表空間,可以在資料庫關閉的情況下,備份某個資料庫表空間的内容。在本文中,我們就分别介紹一下如何進行資料庫級備份和表空間級備份。 注:在這裡,我隻會講到如何修改備份腳本來進行備份,如果使用者對于如何建立oracle備份政策、如何運作全備份和增量備份、如何尋找NBU提供的備份腳本模闆等問題存在疑惑的話,請參加前文《用NBU備份oracle系統-冷備份》。 資料庫級熱備份: 對于資料庫級熱備份來說,我們可以利用NBU提供的腳本檔案:/usr/openv/netbackup/ext/db_ext/oracle/samples/rman/hot_database_backup.sh,這是一個可執行腳本,内容就是在設定好運作oracle rman程式所需的一些環境變量後,從root使用者切換到oracle系統使用者的帳号下,利用rman程式,将資料庫的資料檔案、歸檔日志檔案和控制檔案備份到使用者指定的存儲單元中。在該檔案中,我們需要修改如下參數(建議将該檔案拷貝一份出來做修改,以免改錯): ORACLE_HOME:表示oracle所在的目錄,NBU需要到其目錄下執行相應的rman指令; ORACLE_SID:指明需要冷備份的資料庫; ORACLE_USER:oracle資料庫所屬的系統使用者,NBU會先用該使用者登入,再執行各種備份操作; TARGET_CONNECT_STR:登入oracle資料庫的帳号,必須是系統管理者,因為冷備份需要停止oracle資料庫先; 熱備份和冷備份模闆腳本修改的差別在于:冷備份需要指定oracle啟動檔案參數,這是因為冷備份需要關閉和重新啟動資料庫,是以需要啟動配置檔案;而熱備份不關閉資料庫,是以不需要該變量。 重要:另外需要使用者注意的是,NBU提供的腳本運作時,會在腳本所在目錄下生成一個同名的.out檔案,裡面記錄了NBU腳本運作時産生的日志,然而該腳本會将這個日志名稱作為參數傳遞給rman,而rman無法識别該參數中“.out”中的“.”,是以當運作該腳本時,會出現圖一所示的錯誤,解決辦法是:要麼使用者在hot_database_backup.sh腳本中,将這條rman指令中的記錄日志相關内容删除(圖二);要麼利用轉義字元處理該字元串,使得rman可以正确識别該指令。 圖一:執行NBU腳本出現的問題 圖二:使用者需要在腳本中所做的删除 這樣,使用者就可以将該腳本放到oracle備份政策中的備份選擇中并執行它了。 小竅門:為了保證NBU腳本沒有問題,使用者在運作NBU備份政策之前,最好手動運作該腳本,并通過檢視相關的“.out”檔案來檢查是否腳本可以運作正确,如果腳本運作錯誤,則使用者輸入“# echo $?”則傳回非零值,在這種情況下,使用者需要從輸入檔案中發現錯誤原因并修改運作腳本。隻有該腳本可以手動運作成功後,才能在備份政策中運作成功。 表空間級熱備份: 在使用表空間級備份之前,我們需要先解釋一下catalog資料庫(此catalog非NBU之catalog,是oracle的内容)。Catalog也是一個資料庫(幾十兆而已),隻不過這個資料庫用來儲存備份資訊,一個恢複目錄可以用來備份多個資料庫。RMAN可以在沒有恢複目錄(NOCATALOG)下運作,這個時候備份資訊儲存在控制檔案。儲存在控制檔案的備份資訊是很危險的,如果控制檔案的破壞将導緻備份資訊的丢失與恢複的失敗,而且,沒有恢複目錄,很多RMAN的指令将不被支援。是以對于重要的資料庫,建議建立恢複目錄。 在表空間級熱備份中,需要首先建立一個catalog資料庫,所需指令如下: 1, 為目錄建立一個單獨的表空間: SQL>Create tablespace TS_RMAN datafile '/oracle/catalog_rman.bdf size 50m; 2, 建立RMAN使用者: SQL>Create user RMAN identified by RMAN default tablespace TS_RMAN temporary tablespace temp; 3, 給RMAN授予權限: SQL>Grant connect , resource , recovery_catalog_owner to rman; 4, 連接配接到目标資料庫和CATALOG資料庫: rman target system/manager@target_tnsname rcvcat rman/rman@catalog_tnsname 其中,target_tnsname是我們想要備份的資料庫名稱,catalog_tnsname是剛才建立rman表空間和rman使用者所在資料庫的名稱,可以和備份資料庫一個,因為我們這裡僅僅是備份其他表空間。 5, 建立CATALOG使用者的表: rman>create catalog 6, 登記目标資料庫: rman>register database 這樣,我們就成功建立了catalog表空間來存放備份資訊。 為了使得使用者可以熱備份oracle表空間,NBU為使用者提供了一個模闆腳本:/usr/openv/netbackup/ext/db_ext/oracle/samples/rman/hot_tablespace_backup.sh。使用者需要修改的内容,除了和上述資料庫級熱備份需要的參數外,還需要下列參數: RCVCAT_TNS:就是catalog表空間所在的資料庫名稱; RCVCAT_CONNECT_STR:就是連接配接RCVCAT_TNS資料庫所需要的rman的帳号資訊,在本例中就是“RCVCAT_CONNECT_STR=rman/rman”。 此外,在模闆腳本中,隻是熱備份使用者的SYSTEM表空間,而使用者可以修改腳本,使得可以熱備份其他的表空間。首先我們需要查找到資料庫中所有的表空間,見圖三: 圖三:檢視資料庫的表空間 在找到需要熱備份的表空間後,使用者需要修改hot_tablespace_backup.sh腳本中的字段,見圖四: 圖四:修改表空間名稱 由圖四可知,我們在腳本中修改黃圈以内的名稱為任何存在的表空間名稱即可。 這樣,對于表空間級的備份腳本就修改完畢了,使用者可以試着運作該腳本,并通過輸入檔案hot_tablespace_backup.sh.out來解決可能出現的錯誤(一步一步教着,應該沒什麼錯誤吧!),如果腳本可以運作正常,那麼就需要将其加入到NBU的備份政策中,并設定好全備份和差分備份的日程表即可。 通過本文的介紹,使用者可以通過修改NBU自帶的備份腳本,對oracle系統做資料庫級或者表空間級的熱備份了。希望本文可以在使用者使用NBU oracle代理的過程中,加深使用者對于oracle資料庫和NBU的了解。