Oracle數(shù)據(jù)庫備份和恢復(fù)論文

時(shí)間:2022-03-11 11:08:00

導(dǎo)語:Oracle數(shù)據(jù)庫備份和恢復(fù)論文一文來源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

Oracle數(shù)據(jù)庫備份和恢復(fù)論文

摘要:本文從oracle的體系結(jié)構(gòu)開始,由原理到實(shí)踐,論述了Oracle數(shù)據(jù)庫備份的方式和策略。包括IMP/EXP,RMAN,OS備份等。

Abstract:StartingfromthearchitectureofORACLE,thispaperdiscussesthebackupmethodandstrategyofdatabaseOracle,includingIMP/EXP,PMANandOStheoreticallyandpractically.

關(guān)鍵字:Oracle,備份,恢復(fù),RMAN

Keywords:Oracle;Backup;Restoration;RMAN

概述

在大型軟件運(yùn)行系統(tǒng)中,存在著很多備份策略,如RAID技術(shù),CLUSTER技術(shù)等等。很多時(shí)候,這些系統(tǒng)的備份就能夠解決數(shù)據(jù)庫備份的問題。但是,這種備份成本很高。同時(shí),硬件的備份有時(shí)根本滿足不了現(xiàn)實(shí)的需要,如果用戶不小心誤刪了一個(gè)表,又想恢復(fù)的時(shí)候,數(shù)據(jù)庫的備份就變的重要了。

Introduction:Intherunningsystemofsomebigsoftware,thereexistmanybackupstrategiessuchasRAIDtechnologyandCLUSTERtechnologyetc.Inmostcases,thesesystembackupstrategiescanfulfillthedatabasebackup.Howeverthecostisratherhigh.Atthesametime,hardwarebackupsometimesisfarfromtheactualrequirement.Thedatabasebackupbecomesveryimportantwhenatableisdeletedbyaccidentandneedstoberestored.

Oracle的運(yùn)行方式

Oracle數(shù)據(jù)庫有兩種運(yùn)行方式:一是歸檔方式(ARCHIVELOG),歸檔方式的目的是當(dāng)數(shù)據(jù)庫發(fā)生故障時(shí)最大限度恢復(fù)數(shù)據(jù)庫,可以保證不丟失任何已提交的數(shù)據(jù);二是不歸檔方式(NOARCHIVELOG),只能恢復(fù)數(shù)據(jù)庫到最近的回收點(diǎn)(冷備份或是邏輯備份)。根據(jù)數(shù)據(jù)庫的高可用性和用戶可承受丟失的工作量的多少,對于實(shí)時(shí)性要求高的數(shù)據(jù)庫,強(qiáng)烈要求采用為歸檔方式;不歸檔方式只用在那些開發(fā)和調(diào)試的數(shù)據(jù)庫等。

如何改變數(shù)據(jù)庫的運(yùn)行方式,在創(chuàng)建數(shù)據(jù)庫時(shí),作為創(chuàng)建數(shù)據(jù)庫的一部分,就決定了數(shù)據(jù)庫初始的存檔方式。一般情況下為NOARCHIVELOG方式。當(dāng)數(shù)據(jù)庫創(chuàng)建好以后,根據(jù)我們的需要把需要運(yùn)行在歸檔方式的數(shù)據(jù)庫改成ARCHIVELOG方式。操作如下。

1.關(guān)閉數(shù)據(jù)庫,備份已有的數(shù)據(jù),改變數(shù)據(jù)庫的運(yùn)行方式是對數(shù)據(jù)庫的重要改動(dòng),所以要對數(shù)據(jù)庫做備份,對可能出現(xiàn)的問題作出保護(hù)。

2.修改初試化參數(shù),使能自動(dòng)存檔。

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

log_archive_start=true#啟動(dòng)自動(dòng)歸檔

log_archive_format=ARC%T%S.arc#歸檔文件格式

log_archive_dest=/archdir/arch#歸檔路徑

在8i中,可以最多有五個(gè)歸檔路徑,并可以歸檔到其它服務(wù)器,如備用數(shù)據(jù)庫(standbydatabase)服務(wù)器。

3.啟動(dòng)Instance到Mount狀態(tài),即加載數(shù)據(jù)庫但不打開數(shù)據(jù)庫。

$>svrmgrl

SVRMGRL>connectinternal

SVRMGRL>startupmount

SVRMGRL>alterdatabasearchivelog;//使數(shù)據(jù)庫運(yùn)行在歸檔方式

SVRMGRL>alterdatabaseopen;

Oracle的備份方案

按照備份的方式,可以分為邏輯備份、冷備份(脫機(jī)備份)、熱備份(聯(lián)機(jī)備份),其中冷備份與熱備份又可以合稱為物理備份。按照備份的工具,可以分為EXP/IMP備份、操作系統(tǒng)備份、RMAN、第三方工具備份,如VERITAS等。下面分別介紹Oracle本身提供的幾種備份工具和操作。

1.EXP/IMP備份(邏輯備份)

EXP/IMP屬于邏輯備份的范疇,邏輯備份是指只備份數(shù)據(jù)庫中的數(shù)據(jù)但不記錄數(shù)據(jù)物理位置的一種備份。導(dǎo)出為數(shù)據(jù)庫作一個(gè)二進(jìn)制的備份,并且這個(gè)備份只能由其姊妹程序imp(import)來讀取。具體的使用方法如下。(因?yàn)镋XP和IMP使用上參數(shù)基本相同,所以只以EXP為例。)

EXP的命令格式和參數(shù)

格式:KEYWORD=value或KEYWORD=(value1,value2,...,valueN)

例程:EXPSCOTT/TIGERGRANTS=YTABLES=(EMP,DEPT,MGR)

USERID必須是命令行中的第一個(gè)參數(shù)

關(guān)鍵字說明(默認(rèn))關(guān)鍵字說明(默認(rèn))

USERID用戶名/口令FULL導(dǎo)出整個(gè)文件(N)

BUFFER數(shù)據(jù)緩沖區(qū)的大小OWNER所有者用戶名列表

FILE輸出文件(EXPDAT.DMP)TABLES表名列表

COMPRESS導(dǎo)入一個(gè)范圍(Y)RECORDLENGTHIO記錄的長度

GRANTS導(dǎo)出權(quán)限(Y)INCTYPE增量導(dǎo)出類型

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

ROWS導(dǎo)出數(shù)據(jù)行(Y)PARFILE參數(shù)文件名

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

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

DIRECT直接路徑(N)TRIGGERS導(dǎo)出觸發(fā)器(Y)

FEEDBACK顯示每x行(0)的進(jìn)度FILESIZE各轉(zhuǎn)儲(chǔ)文件的最大尺寸

QUERY選定導(dǎo)出表子集的子句

注:可以通過exp-h(huán)elp命令查看exp的使用方法;imp-help命令查看imp的使用方法.

2.操作系統(tǒng)備份(冷備份和熱備份)

操作系統(tǒng)備份有兩類,冷備份(Coldbackup)和熱備份(Hotbackup)。操作系統(tǒng)備份和上面的邏輯備份有本質(zhì)的區(qū)別,它將拷貝整個(gè)的數(shù)據(jù)文件。

冷備份

在文件級備份開始前數(shù)據(jù)庫必須徹底關(guān)閉。關(guān)閉操作必須用帶有normal、immediate、transaction選項(xiàng)的shutdown來執(zhí)行。

數(shù)據(jù)庫使用的每個(gè)文件都被備份下來,這些文件包括:所有數(shù)據(jù)文件、所有控制文件、所有聯(lián)機(jī)重做日志文件和INIT.ORA文件(建議)。

作冷備份一般步驟是:

1)正常關(guān)閉要備份的實(shí)例(instance);

2)備份整個(gè)數(shù)據(jù)庫到一個(gè)目錄

3)啟動(dòng)數(shù)據(jù)庫

即:

SVRMGRL>connectinternal

SVRMGRL>shutdownimmediate

SVRMGRL>!cp<file><backupdirectory>

or

SVRMGRL>!tarcvf/dbbak/fullbk.tar/u01/oracle/oradata/dbname

SVRMGRL>startup

&#61548;熱備份

熱備份是當(dāng)數(shù)據(jù)庫打開時(shí)的操作系統(tǒng)備份。熱備份只能用于ARCHIVELOG方式的數(shù)據(jù)庫。熱備份沒有必要備份聯(lián)機(jī)日志,但必須是歸檔狀態(tài),在實(shí)例恢復(fù)的時(shí)候,可能需要用到歸檔日志。當(dāng)前聯(lián)機(jī)日志一定要保護(hù)好或是處于鏡相狀態(tài),當(dāng)前聯(lián)機(jī)日志的損壞,對于數(shù)據(jù)庫的損壞是巨大的,只能以數(shù)據(jù)的丟失來進(jìn)行數(shù)據(jù)庫的恢復(fù)工作。對于臨時(shí)表空間,存放的是臨時(shí)信息,在熱備份是也可以考慮不用備份,如果臨時(shí)文件發(fā)生故障,可以刪除該數(shù)據(jù)文件與表空間,重建一個(gè)臨時(shí)表空間。

熱備份備份的內(nèi)容和冷備份備份的內(nèi)容一樣,操作一般步驟是:

1)備份的表空間通過使用ALTERTABLESPACE……BEGINBACKUP使表空間進(jìn)入熱備份方式。

2)用類似冷備份的操作系統(tǒng)命令對組成表空間的數(shù)據(jù)文件進(jìn)行拷貝。

3)使用ALTERTABLESPACE……ENDBACKUP命令使表空間脫離熱備份方式。

4)使用ALTERDATABSE……BACKUPCONTROLFILE命令備份控制文件。

即:

SVRMGRL>connectinternal;

SVRMGRL>altertablespaceUserbeginbackup;

SVRMGRL>!cp/u01/oradata/dbname/user01.ora/dbbak/user01.ora

SVRMGRL>altertablespaceUserendbackup;

SVRMGRL>alterdatabasebackupcontrolfileto<fielname>;

or

SVRMGRL>alterdatabasebackupcontrolfiletotrace;

注意:因?yàn)闊醾浞莸臅r(shí)候,用戶還在操作數(shù)據(jù)庫,所以最好是讓每個(gè)表空間處于備份狀態(tài)的時(shí)間最短,這樣就要求一個(gè)表空間一個(gè)表空間的備份,不要一起使表空間處于備份狀態(tài)而同時(shí)拷貝數(shù)據(jù)文件。

3.RMAN

RecoveryManager(RMAN)是一個(gè)使DBA能很方便地對數(shù)據(jù)庫執(zhí)行備份和恢復(fù)任務(wù)的Oracle應(yīng)用工具,能夠提供DBA對企業(yè)數(shù)據(jù)庫備份與恢復(fù)操作的集中控制。RMAN只能用于ORACLE8或更高的版本中。它能夠備份整個(gè)數(shù)據(jù)庫或數(shù)據(jù)庫部件,其中包括表空間、數(shù)據(jù)文件,控制文件和歸檔文件。RMAN可以按要求存取和執(zhí)行備份和恢復(fù)。

RMAN支持六種不通的類型的備份,經(jīng)常用到的有兩種:

FULL數(shù)據(jù)庫全備份,包括所有的數(shù)據(jù)塊。

INCREMENTAL增量備份,是指只備份在同級別或更低級別上進(jìn)行的前一次備份之后的作過改動(dòng)的那些數(shù)據(jù)塊。這其中需要一個(gè)0級的增量作為增量的基礎(chǔ),它備份包括全部曾經(jīng)被數(shù)據(jù)庫使用過的數(shù)據(jù)塊(但不是完全數(shù)據(jù)庫備份)。RMAN共可以支持7級增量。

BACKUP,RESTORE,RECOVER是RMAN最基本的三個(gè)命令,分別可以進(jìn)行數(shù)據(jù)庫的備份,復(fù)原以及恢復(fù)操作。restore命令用于恢復(fù)來自備份集或映像拷貝的數(shù)據(jù)文件、控制文件或歸檔重做日志。recovery命令用于進(jìn)行介質(zhì)恢復(fù)應(yīng)用重做日志文件。

RMAN的備份信息一般保存在恢復(fù)目錄中,恢復(fù)目錄也是一個(gè)數(shù)據(jù)庫,只不過這個(gè)數(shù)據(jù)庫用來保存?zhèn)浞菪畔?,一個(gè)恢復(fù)目錄可以用來保存多個(gè)數(shù)據(jù)庫的備份信息。RMAN也可以在沒有恢復(fù)目錄(NOCATALOG)下運(yùn)行,這個(gè)時(shí)候備份信息保存在控制文件。這種情況比較危險(xiǎn),因?yàn)橐坏┛刂莆募黄茐?,將?dǎo)致所有數(shù)據(jù)庫備份信息的丟失和恢復(fù)的失敗,而且,沒有恢復(fù)目錄,很多RMAN的命令將不被支持。所以對于重要的數(shù)據(jù)庫,建議創(chuàng)建恢復(fù)目錄。

創(chuàng)建恢復(fù)目錄一般有以下步驟。(例子數(shù)據(jù)庫為db)

1)為目錄創(chuàng)建一個(gè)單獨(dú)的表空間

SQL>createtablespacetsrmandatafile’/dbbak/rman/rsrman.dbf’size50M;

2)創(chuàng)建RMAN用戶

SQL>createuserrmanidentifiedbyrmandefaulttablespacersrmantemporarytablespacetemp;

3)給RMAN授予權(quán)限

SQL>grantconnect,resource,recovery_catalog_ownertorman;

4)打開RMAN

$rman

5)連接恢復(fù)目錄數(shù)據(jù)庫

RMAN>connectcatalogrman/rman@db

6)創(chuàng)建恢復(fù)目錄

RMAN>createcatalogtablespacetsrman在對某個(gè)數(shù)據(jù)庫進(jìn)行備份之前,必須先在恢復(fù)目錄上注冊該數(shù)據(jù)庫,這一過程操作如下(假定目標(biāo)數(shù)據(jù)庫連接字符串為db100)。

1)連接到恢復(fù)目錄數(shù)據(jù)庫

$rmanrman/rman@db

2)在RMAN中連接到目標(biāo)數(shù)據(jù)庫(即要進(jìn)行備份的數(shù)據(jù)庫)

RMAN>connecttargetsys/change_on_install@db100

3)注冊數(shù)據(jù)庫

RMAN>registerdatabase;

注冊完數(shù)據(jù)庫后,就可以進(jìn)行數(shù)據(jù)庫的備份了。有完全數(shù)據(jù)庫備份、表空間備份、控制文件備份、和歸檔日志備份等。操作分別如下。

1)完全數(shù)據(jù)庫備份

要求:ARCHIVELOG模式,在DBOPEN的情況下進(jìn)行數(shù)據(jù)庫完全備份。

RMAN>run{

allocatechannelc1type=disk;

backupdatabase;

releasechannelc1;

}

2)表空間備份

要求:ARCHIVELOG模式

RMAN>run{

allocatechannelc1type=disk;

backuptablespace“ts_users”filesperset3format‘a(chǎn)atst_%t%s.%p’;

releasechannelc1;

}

3)控制文件備份

RMAN>run{

allocatechannelc1type=disk;

backupcurrentcontrolfiletag=weekly_sat_backup;

releasechannelc1;

}

在對數(shù)據(jù)庫進(jìn)行完全備份時(shí),控制文件自動(dòng)包含其中。也可以在表空間或數(shù)據(jù)文件的備份中包含一個(gè)控制文件。

RMAN>run{

allocatechannelc1type=disk;

backuptablespace“ts_users”

filesperset3format‘a(chǎn)atst_%t%s.%p’;

includecurrentcontrolfile;

releasechannelc1;

}

4)歸檔日志備份

通過查詢數(shù)據(jù)字典表V$ARCHIVED_LOG獲取要備份的日志序列號,然后執(zhí)行命令:

RMAN>run{

allocatechannelc1type=disk;

backuparchiveloglowlogseq3highlogseq10thread1;

releasechannelc1;

}

Oracle的備份策略

正確的備份策略不僅能保證數(shù)據(jù)庫服務(wù)器的24*7的高性能的運(yùn)行,還能保證備份與恢復(fù)的快速性與可靠性。我們將以RMAN的多級增量備份作為一個(gè)備份策略的例子來討論。采用多級備份就是為了減少每天備份所需要的時(shí)間,而又保證系統(tǒng)有良好的恢復(fù)性。恢復(fù)時(shí)間與備份時(shí)間要有一個(gè)權(quán)衡。比如只要進(jìn)行一個(gè)數(shù)據(jù)庫的全備份,然后就只備份歸檔也可以保證能把數(shù)據(jù)庫恢復(fù)到最新的狀態(tài),但是這樣的恢復(fù)時(shí)間將是不可容忍的。多級備份也正是為了解決這種問題,結(jié)合某些應(yīng)用的特點(diǎn),可以采用如下的備份策略:

&#61548;每個(gè)月做一個(gè)數(shù)據(jù)庫的全備份(包括所有的數(shù)據(jù)和只讀表空間);

&#61548;每個(gè)星期一做一次零級備份(不包含只讀表空間);

&#61548;每個(gè)星期三做一次一級備份;

&#61548;每天做一次二級備份。

&#61548;每天做一次恢復(fù)目錄的熱備份。

&#61548;任何數(shù)據(jù)庫的更改需要重新同步CATALOG目錄并重新備份(如添加數(shù)據(jù)文件)或重新備份(如修改表空間為只讀)。

&#61548;每次備份后都可以備份歸檔日志或定期備份歸檔日志。如果可能,可以直接備份到磁帶上。

Oracle的恢復(fù)

下面的操作約定恢復(fù)目錄存儲(chǔ)在db118中,目標(biāo)數(shù)據(jù)庫是db100。

1.數(shù)據(jù)庫恢復(fù)

1)啟動(dòng)SQL*PLUS,使用正確的init.ora文件,使用NOMOUNT選項(xiàng)啟動(dòng)目標(biāo)數(shù)據(jù)庫實(shí)例。

2)啟動(dòng)RMAN并連接到恢復(fù)目錄,如下:

$rmancatalogrman/rman@db118

恢復(fù)管理器:Release9.2.0.1.0-Production

Copyright(c)1995,2002,OracleCorporation.Allrightsreserved.

連接到恢復(fù)目錄數(shù)據(jù)庫

RMAN>

3)連接到目標(biāo)數(shù)據(jù)庫

RMAN>connecttargetinternal/oracle@db100

連接到目標(biāo)數(shù)據(jù)庫:db(DBID=1142471523)

4)一旦連接到目標(biāo)數(shù)據(jù)庫,執(zhí)行restore命令執(zhí)行全數(shù)據(jù)庫恢復(fù)

RMAN>run{

2>allocatechannelc1typedisk;

3>restoredatabase;

4>releasechannelc1;

}

2.表空間和數(shù)據(jù)文件恢復(fù)

要執(zhí)行表空間或數(shù)據(jù)文件恢復(fù),數(shù)據(jù)庫必須以ARCHIVELOG模式運(yùn)行,并且用戶需要擁有介質(zhì)恢復(fù)所需的歸檔重做日志文件。在試圖恢復(fù)表空間之前,必須保證表空間已脫機(jī)。RMAN命令如下:

run{

allocatechannelc1typedisk;

sql“altertablespaceusers_dataofflineimmediate”;

restoretablespaceusers_data;

recovertablespaceusers_data;

sql“altertablespaceusers_dataonline”;

}

上面的腳本執(zhí)行了以下的工作:

1)RMAN分配通道從c1用于恢復(fù)操作。

2)將表空間users_data脫機(jī)

3)RMAN從備份集中恢復(fù)屬于表空間的數(shù)據(jù)文件

4)通過介質(zhì)恢復(fù)提供所需的歸檔日志文件,恢復(fù)屬于表空間users_data的數(shù)據(jù)文件。

5)RMAN將表空間聯(lián)機(jī)。

在腳本執(zhí)行期間,如果不能把數(shù)據(jù)文件恢復(fù)到指定位置,在執(zhí)行restore命令前使用setnewname命令。

3.控制文件恢復(fù)

1)啟動(dòng)SQL*PLUS,使用正確的init.ora文件,使用NOMOUNT選項(xiàng)啟動(dòng)目標(biāo)數(shù)據(jù)庫實(shí)例。

2)啟動(dòng)RMAN并連接到恢復(fù)目錄,如下:

$rmancatalogrman/rman@ora8i.oracle

恢復(fù)管理器:Release9.2.0.1.0-Production

Copyright(c)1995,2002,OracleCorporation.Allrightsreserved.

連接到恢復(fù)目錄數(shù)據(jù)庫

RMAN>

3)連接到目標(biāo)數(shù)據(jù)庫

RMAN>connecttargetinternal/oracle@demo.oracle

連接到目標(biāo)數(shù)據(jù)庫:db(DBID=1142471523)

4)一旦連接到目標(biāo)數(shù)據(jù)庫,執(zhí)行restore命令恢復(fù)控制文件

RMAN>run{

2>allocatechannelc1typedisk;

3>restorecontrolfile;

4>}

小結(jié)

保證Oracle數(shù)據(jù)庫的安全是系統(tǒng)安全的重要組成部分,必須要設(shè)計(jì)完善的數(shù)據(jù)庫備份和恢復(fù)方案。Oracle提供的各種工具結(jié)合起來使用能夠使數(shù)據(jù)庫的備份和恢復(fù)變得簡單。在實(shí)際的Oracle數(shù)據(jù)庫的備份和恢復(fù)中,會(huì)有許多不通的和復(fù)雜的情況出現(xiàn),針對不同的情況,要本著使數(shù)據(jù)具有最大的可恢復(fù)性和恢復(fù)時(shí)間最短的原則去進(jìn)行數(shù)據(jù)庫的恢復(fù),這需要大量的實(shí)踐和經(jīng)驗(yàn)積累。

參考文獻(xiàn)

[1]Oracle8iBackupandRecoveryGuideOracleDocument

[2]Oracle8iRecoveryManagerUser’sGuideandReferenceOracleDocument

[3]Oracle9i:ABeginner’sGuide(美)MichaelAbbeyMichaelCoreyIanAbramson2002.3機(jī)械工業(yè)出版社

[4]Oracle8i備份與恢復(fù)手冊(美)RamaVelpuriAnandAdkoli蔣蕊王磊等譯2001.9機(jī)械工業(yè)出版社