国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

Oracle的恢復(fù)管理器及DBMS_JOB包分析

2024-08-29 13:33:50
字體:
供稿:網(wǎng)友
一、引言 隨著Oracle大型數(shù)據(jù)庫(kù)系統(tǒng)在企業(yè)的廣泛應(yīng)用,系統(tǒng)數(shù)據(jù)量的快速增長(zhǎng),相信為數(shù)不少的Oracle DBA天天都在忙于做著重復(fù)的工作--對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份。 假如一旦哪一天疏忽了,而這一天系統(tǒng)又恰恰發(fā)生了故障,需要進(jìn)行數(shù)據(jù)恢復(fù),那么此時(shí)對(duì) DBA來說可能就是一場(chǎng)災(zāi)難, 因?yàn)樗赡軣o(wú)法完整地恢復(fù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。此外,在數(shù)據(jù)庫(kù)的應(yīng)用中我們會(huì)經(jīng)常碰到這樣的需求:將一些重要數(shù)據(jù)表中的數(shù)據(jù)定期備份到另一些數(shù)據(jù)表中去。例如在企業(yè)員工工資治理系統(tǒng)中,每月工資報(bào)表打印完畢后,應(yīng)將當(dāng)月工資數(shù)據(jù)保存到工資歷史庫(kù)中去,以便今后查詢及統(tǒng)計(jì)使用。通常我們采用存儲(chǔ)過程來完成對(duì)數(shù)據(jù)的處理,這個(gè)過程由人工定期執(zhí)行完成,操作起來很不方便。對(duì)于第一種情況,現(xiàn)在我們可利用Oracle據(jù)庫(kù)實(shí)用工具恢復(fù)治理器來完成DBA天天必須做的備份工作,而且可設(shè)定一個(gè)固定的時(shí)間,讓系統(tǒng)自動(dòng)進(jìn)行備份。對(duì)后一種情況,我們可以使用DBMS_JOB包結(jié)合存儲(chǔ)過程來實(shí)現(xiàn)數(shù)據(jù)處理的自動(dòng)執(zhí)行。下面筆者結(jié)合實(shí)踐經(jīng)驗(yàn),分別介紹其實(shí)現(xiàn)方法。 二、Oracle數(shù)據(jù)庫(kù)備份與恢復(fù)方式及特點(diǎn) ORACLE 數(shù)據(jù)庫(kù)備份分為物理備份和邏輯備份。物理備份是數(shù)據(jù)庫(kù)文件拷貝的備份,冷備份、熱備份屬于物理備份。 導(dǎo)出/導(dǎo)入(EXPORT/IMPORT)工具用于進(jìn)行邏輯備份。 導(dǎo)出(EXPORT)備份可拷貝數(shù)據(jù)與數(shù)據(jù)庫(kù)定義,并以O(shè)racle的內(nèi)部格式保存為二進(jìn)制文件。相反,利用Import則可將數(shù)據(jù)從二進(jìn)制文件放回到Oracle數(shù)據(jù)庫(kù)中。但是導(dǎo)出(EXPORT)備份機(jī)制不能提供時(shí)間點(diǎn)恢復(fù),而且不能和歸檔重做日志文件一起使用。 冷備份是在數(shù)據(jù)庫(kù)被正常關(guān)閉之后進(jìn)行的數(shù)據(jù)文件的物理備份。當(dāng)數(shù)據(jù)庫(kù)被關(guān)閉時(shí),被數(shù)據(jù)庫(kù)使用的每一個(gè)文件都被備份下來。這些文件因而保持著數(shù)據(jù)關(guān)閉時(shí)的完整的映象。 熱備份是在數(shù)據(jù)庫(kù)運(yùn)行的情況下,采用archivelog mode方式備份數(shù)據(jù)的方法。這涉及到將每個(gè)表空間設(shè)置為備份狀態(tài),然后備份其數(shù)據(jù)文件,最后將表空間恢復(fù)成正常的狀態(tài)。數(shù)據(jù)庫(kù)可以從這個(gè)備份中完全地恢復(fù)過來,也可以通過歸檔的重做日志回滾到前面時(shí)間的任一個(gè)點(diǎn)上。 上述幾種備份方法的特性比較:方法類型恢復(fù)特性Export導(dǎo)出邏輯型可以將任何數(shù)據(jù)庫(kù)對(duì)象恢復(fù)到它被導(dǎo)出時(shí)的狀態(tài)冷備份物理型可將數(shù)據(jù)庫(kù)恢復(fù)到它被關(guān)閉時(shí)的狀態(tài)熱備份物理型可將數(shù)據(jù)庫(kù)恢復(fù)到任一時(shí)間點(diǎn)的狀態(tài)以上幾種備份方式都需要依靠DBA人工操作完成,從而增加了DBA維護(hù)系統(tǒng)的負(fù)擔(dān)。當(dāng)DBA需要維護(hù)多個(gè)Oracle數(shù)據(jù)庫(kù)系統(tǒng)時(shí),還輕易導(dǎo)致操作失誤,而且備份的數(shù)據(jù)不便于集中統(tǒng)一治理。 三、Oracle數(shù)據(jù)庫(kù)恢復(fù)治理器及DBMS_JOB包概述 恢復(fù)治理器(RMAN)是一個(gè)使DBA能很方便地對(duì)數(shù)據(jù)庫(kù)執(zhí)行備份和恢復(fù)任務(wù)的Oracle應(yīng)用工具,與以上介紹的幾種方式不同,它能夠提供DBA針對(duì)企業(yè)數(shù)據(jù)庫(kù)備份與恢復(fù)操作的集中控制。RMAN可以將備份記錄保存在恢復(fù)目錄中,Oracle服務(wù)器保持對(duì)備份的跟蹤。實(shí)際的物理備份拷貝將被存儲(chǔ)在指定的存儲(chǔ)系統(tǒng)上,可以是磁帶或磁盤。RMAN將全部備份數(shù)據(jù)以O(shè)racle特有的格式寫入到"備份集"文件中,通過RMAN應(yīng)用工具來讀取。RMAN支持建立除邏輯備份以外的所有類型的備份。 Oracle的恢復(fù)治理器及DBMS_JOB包分析RMAN的功能框圖利用RMAN進(jìn)行備份恢復(fù)的條件是: 1.建立一個(gè)recovery_catalog,存放RMAN使用和維護(hù)著的目標(biāo)數(shù)據(jù)庫(kù)的信息,RMAN使用這些信息去決定如何執(zhí)行備份和恢復(fù)的請(qǐng)求。通常是把它建在另一個(gè)Oracle數(shù)據(jù)庫(kù)的一個(gè)模式里,即需要建立一個(gè)用戶,該用戶需要有recovery_catalog_owner權(quán)限。 2.目標(biāo)數(shù)據(jù)庫(kù)必須是在archivelog模式下運(yùn)行,因?yàn)檫@樣,日志才能歸檔,而RMAN正是利用歸檔日志進(jìn)行數(shù)據(jù)恢復(fù),所以這是一個(gè)必備條件。同時(shí)archivelog模式也是數(shù)據(jù)庫(kù)在線備份的必備條件。 3.RMAN備份中,假如采用磁帶機(jī)備份,需要安裝第三方介質(zhì)治理庫(kù)(MML)。 恢復(fù)治理器保存在RMAN中注冊(cè)的全部數(shù)據(jù)庫(kù)的記錄。當(dāng)RMAN被用來啟動(dòng)備份或恢復(fù)數(shù)據(jù)庫(kù)時(shí),它將目標(biāo)數(shù)據(jù)庫(kù)與恢復(fù)目錄中可用的數(shù)據(jù)庫(kù)ID進(jìn)行驗(yàn)證。假如條件一致,RMAN對(duì)目標(biāo)數(shù)據(jù)庫(kù)至少建立兩個(gè)通道,其中一個(gè)通道只是對(duì)目標(biāo)數(shù)據(jù)庫(kù)的一個(gè)遠(yuǎn)程調(diào)用,使用PL/SQL接口來執(zhí)行備份與恢復(fù)操作。RMAN使用它自己的PL/SQL引擎編譯這些用戶命令,并在目標(biāo)數(shù)據(jù)庫(kù)上執(zhí)行這些命令。執(zhí)行過程不需要用戶干預(yù),RMAN記錄追蹤在數(shù)據(jù)庫(kù)上執(zhí)行的全部備份與恢復(fù)操作,因而在很大程度上避免了DBA錯(cuò)誤導(dǎo)致的危險(xiǎn)。同時(shí)RMAN提供了多種命令用于檢查和測(cè)試數(shù)據(jù)庫(kù)備份集與拷貝,并確保備份文件完整無(wú)缺且能夠用于實(shí)現(xiàn)恢復(fù)。由上述可見,采用恢復(fù)治理器做備份與恢復(fù)的治理與其他方式相比較具有明顯的優(yōu)勢(shì),可大大減少DBA做備份工作的工作量和操作失誤。 DBMS_JOB包是Oracle提供的內(nèi)部函數(shù)包,提供了治理和調(diào)度作業(yè)隊(duì)列中的作業(yè)定時(shí)執(zhí)行的控制機(jī)制。所有作業(yè)由SNP后臺(tái)進(jìn)程執(zhí)行。 當(dāng)SNP進(jìn)程運(yùn)行一個(gè)作業(yè)時(shí),進(jìn)程將首先創(chuàng)建會(huì)話,并恢復(fù)作業(yè)運(yùn)行時(shí)的環(huán)境參數(shù),再調(diào)度作業(yè)運(yùn)行。DBMS_JOB包的主要功能有:提交Submit(),執(zhí)行Run(),刪除Remove()等。這樣,我們就可以用這個(gè)包將創(chuàng)建的存儲(chǔ)過程放入Oracle數(shù)據(jù)庫(kù)系統(tǒng)的作業(yè)隊(duì)列中去,由系統(tǒng)按時(shí)調(diào)度運(yùn)行。
四、應(yīng)用實(shí)例 4.1、RMAN做數(shù)據(jù)庫(kù)在線備份應(yīng)用實(shí)例 這里以某公司業(yè)務(wù)處理計(jì)算機(jī)中心數(shù)據(jù)庫(kù)為例。用戶系統(tǒng)配置為:兩臺(tái)HP9000小型機(jī)(host1、host2),操作系統(tǒng)為HP-UX11.0,Oracle數(shù)據(jù)庫(kù)版本為8.0.5。兩臺(tái)機(jī)上各有一個(gè)Oracle數(shù)據(jù)庫(kù)實(shí)例,分別運(yùn)行不同的業(yè)務(wù)處理系統(tǒng)。用戶要求設(shè)備7X24小時(shí)在線工作,原則上運(yùn)行時(shí)不答應(yīng)數(shù)據(jù)庫(kù)關(guān)閉。這就使得我們只能采用在線備份方式解決問題。為安全起見,我們?cè)诹硪慌_(tái)IBM服務(wù)器(host3)上安裝Windows2000及一個(gè)獨(dú)立的Oracle數(shù)據(jù)庫(kù),恢復(fù)目錄就建在這個(gè)數(shù)據(jù)庫(kù)中,這臺(tái)服務(wù)器還配置了一臺(tái)磁帶加載機(jī),備份數(shù)據(jù)存放在磁帶上,這樣即便哪臺(tái)機(jī)器出現(xiàn)故障我們也能夠?qū)崿F(xiàn)數(shù)據(jù)庫(kù)的完全恢復(fù),不過DBA應(yīng)注重定期做恢復(fù)目錄數(shù)據(jù)庫(kù)的備份。在備份策略上,我們采用了全備份與歸檔日志備份相結(jié)合的方式,既不占用過多的系統(tǒng)時(shí)間,也相應(yīng)減少了備份的數(shù)據(jù)量。備份策略如下: (1)每周日晚11:00做數(shù)據(jù)庫(kù)在線全備份。

(2)天天12:00,18:00 做數(shù)據(jù)庫(kù)歸檔日志文件的在線備份。 建立備份機(jī)制的操作如下(以host1機(jī)為例): 1) 建立恢復(fù)目錄并注冊(cè)目標(biāo)數(shù)據(jù)庫(kù)。 SVRMGR> create tablespace rmanspace datafile 'rmandata' size 500m;

SVRMGR> create user rman identified by rman default tablespace

Rmanspace temporary tablespace temp;

SVRMGR> grant connect,resource,recovery_catalog_owner to rman;以上為建立RMAN表空間和用戶。 $ sqlplus rman/rman

sql> start "/ora_01/app/oracle/PRodUCt/8.0.5/rdbms/admin/catrman";--執(zhí)行創(chuàng)建恢復(fù)目錄操作$ rman target system/manager@host1 rcvcat rman/rman@host3;

--連接目標(biāo)數(shù)據(jù)庫(kù)和恢復(fù)目錄

rman> register database;   --將目標(biāo)數(shù)據(jù)庫(kù)注冊(cè)到恢復(fù)目錄中

rman> resync catalog;      --進(jìn)行同步目錄操作 2) 將目標(biāo)數(shù)據(jù)庫(kù)改為歸檔模式運(yùn)行。 SVRMGR> connect internal

SVRMGR> startup mount [dbname]

SVRMGR> alter database [dbname] archivelog; --起用歸檔模式

SVRMGR> archive log start                   --啟動(dòng)自動(dòng)歸檔模式

SVRMGR> alter database [dbname] open;       --打開數(shù)據(jù)庫(kù)修改數(shù)據(jù)庫(kù)初始化參數(shù)文件init.ora,定義歸檔模式(自動(dòng))、歸檔日志文件保存路徑、歸檔日志文件命名方法,重新啟動(dòng)數(shù)據(jù)庫(kù)。 3)建立全備份腳本文件hotbackup.rcv。 connect target internal/oracle@host1

connect rcvcat rman/rman@host3

run { allocate channel t1 type 'SBT_TAPE';

backup

incremental level 0

skip inaccessible

tag hot_db_bk_level0

filesperset 5

format 'bk_%s_%p_%t' (database);--備份全部數(shù)據(jù)庫(kù)控制文件和數(shù)據(jù)文件sql 'alter system archive log current';

backup

filesperset 20

format 'al_%s_%p_%t' (archivelog all delete input);--備份歸檔日志,備份成功后刪除歸檔日志。若不成功,則不做刪除。

}
歸檔日志備份腳本hotarcbackup.rcv文件如下: connect target internal/oracle@host1

connect rcvcat rman/rman@host3

run { allocate channel t1 type 'SBT_TAPE';

sql 'alter system archive log current';

backup

filesperset 20

format 'al_%s_%p_%t' (archivelog all delete input);

}4)利用Unix的crontab命令定期自動(dòng)執(zhí)行備份腳本 Crontab命令用于指定一個(gè)文件,其行計(jì)劃命令以固定時(shí)間間隔執(zhí)行。Cron是一個(gè)永久進(jìn)程,它由/etc/rc.local啟動(dòng)執(zhí)行。Cron程序讀取、解釋并執(zhí)行crontab文件。我們將需自動(dòng)定期執(zhí)行備份的腳本文件寫成shell命令行方式存入crontab文件中,由系統(tǒng)定期調(diào)度執(zhí)行。Crontab文件的每一行由六個(gè)域(minutes、hours、day of month、month、day of week、command)組成,域之間用空格或Tab分開。 現(xiàn)在,我們?cè)谀繕?biāo)機(jī)上編寫一個(gè)文件,用以啟動(dòng)自動(dòng)備份進(jìn)程。文件名定為Oracle,文件將放在/var/spool/cron/crontabs 目錄下。Oracle文件內(nèi)容: 0 23 * * 0 /oracle/rman/rman cmdfile ‘hotbackup.rcv’

# 星期天23點(diǎn)對(duì)數(shù)據(jù)庫(kù)執(zhí)行在線全備份

0 12,18 * * * /oracle/rman/rman cmdfile ‘hotarcbackup.rcv’

# 天天12點(diǎn),18點(diǎn)執(zhí)行歸檔文件備份經(jīng)過以上的操作后,系統(tǒng)天天自動(dòng)產(chǎn)生兩個(gè)歸檔日志備份,每個(gè)星期天產(chǎn)生一個(gè)數(shù)據(jù)庫(kù)完全備份。DBA需要做的是,隔幾天換一盤磁帶(更換磁帶的周期取決于備份文件的大小和磁帶的容量)和用RMAN定期檢查備份執(zhí)行情況。 執(zhí)行恢復(fù)操作的RMAN腳本文件restore.rcv如下(在host1上運(yùn)行): connect target

connect rcvcat rman/rman@host3

run { allocate channel t1 type 'SBT_TAPE';

allocate channel t2 type 'SBT_TAPE';

restore controlfile;

sql 'alter database mount';

restore database;

recover database;

sql 'alter database open resetlogs';

}4.2、存儲(chǔ)過程定期自動(dòng)執(zhí)行的實(shí)例 以下為將Salary表數(shù)據(jù)定時(shí)轉(zhuǎn)入Salary_history表的應(yīng)用實(shí)例:創(chuàng)建存儲(chǔ)過程SQL> create or replace procedure ProcEmp

IS

begin

insert into Salary_history (EmpId,EmpName,DptName,Salary,Month)select EmpId,EmpName,DptName,Salary,

to_char(sysdate,'yyyy-mm') from Salary;commit;

end ProcEmp;

/提交作業(yè)SQL> variable jobno number;

SQL> begin

DBMS_JOB.SUBMIT(:jobno,

'ProcEmp;',

SYSDATE, 'SYSDATE + 30'); --每30天運(yùn)行一次

commit;

end;

/運(yùn)行作業(yè)SQL>begin

dbms_job.run(:jobno);end;

/五、結(jié)束語(yǔ) Oracle實(shí)用工具RMAN的應(yīng)用為DBA治理多個(gè)Oracle數(shù)據(jù)庫(kù)提供了集中備份治理與恢復(fù)控制的機(jī)制,大大地減輕了DBA的工作壓力,而DBMS_JOB包的使用增強(qiáng)了存儲(chǔ)過程的應(yīng)用功能,這樣,他們就可以從備份數(shù)據(jù)及重復(fù)處理數(shù)據(jù)的繁瑣中解脫出來,去做其它更有意義的工作。而數(shù)據(jù)庫(kù)既實(shí)現(xiàn)了在線磁帶備份,又實(shí)現(xiàn)了異機(jī)備份集中治理,相應(yīng)提高了系統(tǒng)運(yùn)行的安全性。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 固阳县| 黔南| 宜川县| 天镇县| 南汇区| 长宁区| 阿拉善右旗| 凌云县| 盐池县| 福泉市| 泾源县| 兴文县| 平昌县| 禹州市| 浦城县| 黄石市| 明水县| 鄂托克旗| 鄂尔多斯市| 长岭县| 榕江县| 林甸县| 修水县| 富源县| 浦东新区| 仲巴县| 东台市| 策勒县| 伊宁县| 沁水县| 清苑县| 潼南县| 天柱县| 宁河县| 井研县| 五台县| 朝阳市| 天长市| 崇文区| 宕昌县| 淳化县|