概要
1、了解什么是備份
2、了解備份的重要性
3、理解數(shù)據(jù)庫(kù)的兩種運(yùn)行方式
4、理解不同的備份方式及其區(qū)別
5、了解正確的備份策略及其好處
??
一、了解備份的重要性
可以說(shuō),從計(jì)算機(jī)系統(tǒng)出世的那天起,就有了備份這個(gè)概念,計(jì)算機(jī)以其強(qiáng)大的速度處理能力,取代了很多人為的工作,但是,往往很多時(shí)候,它又是那么弱不禁風(fēng),主板上的芯片、主板電路、內(nèi)存、電源等任何一項(xiàng)不能正常工作,都會(huì)導(dǎo)致計(jì)算機(jī)系統(tǒng)不能正常工作。當(dāng)然,這些損壞可以修復(fù),不會(huì)導(dǎo)致應(yīng)用和數(shù)據(jù)的損壞。但是,如果計(jì)算機(jī)的硬盤(pán)損壞,將會(huì)導(dǎo)致數(shù)據(jù)丟失,此時(shí)必須用備份恢復(fù)數(shù)據(jù)。
其實(shí),在我們的現(xiàn)實(shí)世界中,已經(jīng)就存在很多備份策略,如RAID技術(shù),雙機(jī)熱備,集群技術(shù)發(fā)展的不就是計(jì)算機(jī)系統(tǒng)的備份和高可用性嗎?有很多時(shí)候,系統(tǒng)的備份的確就能解決數(shù)據(jù)庫(kù)備份的問(wèn)題,如磁盤(pán)介質(zhì)的損壞,往往從鏡相上面做簡(jiǎn)單的恢復(fù),或簡(jiǎn)單的切換機(jī)器就可以了。
但是,上面所說(shuō)的系統(tǒng)備份策略是從硬件的角度來(lái)考慮備份與恢復(fù)的問(wèn)題,這是需要代價(jià)的。我們所能選擇備份策略的依據(jù)是:丟是數(shù)據(jù)的代價(jià)與確保數(shù)據(jù)不丟失的代價(jià)之比。還有的時(shí)候,硬件的備份有時(shí)根本滿(mǎn)足不了現(xiàn)實(shí)需要,假如你誤刪了一個(gè)表,但是你又想恢復(fù)的時(shí)候,數(shù)據(jù)庫(kù)的備份就變的重要了。ORACLE本身就提供了強(qiáng)大的備份與恢復(fù)策略,這里我們只討論ORACLE備份策略,以下的備份都是指ORACLE數(shù)據(jù)庫(kù)備份,恢復(fù)將放到下一講中。
所謂備份,就是把數(shù)據(jù)庫(kù)復(fù)制到轉(zhuǎn)儲(chǔ)設(shè)備的過(guò)程。其中,轉(zhuǎn)儲(chǔ)設(shè)備是指用于放置數(shù)據(jù)庫(kù)拷貝的磁帶或磁盤(pán)。??
能夠進(jìn)行什么樣的恢復(fù)依賴(lài)于有什么樣的備份。作為 DBA,有責(zé)任從以下三個(gè)方面維護(hù)數(shù)據(jù)庫(kù)的可恢復(fù)性:??
·使數(shù)據(jù)庫(kù)的失效次數(shù)減到最少,從而使數(shù)據(jù)庫(kù)保持最大的可用性;??
·當(dāng)數(shù)據(jù)庫(kù)不可避免地失效后,要使恢復(fù)時(shí)間減到最少,從而使恢復(fù)的效率達(dá)到最高;??
·當(dāng)數(shù)據(jù)庫(kù)失效后,要確保盡量少的數(shù)據(jù)丟失或根本不丟失,從而使數(shù)據(jù)具有最大的可恢復(fù)性。??
災(zāi)難恢復(fù)的最重要的工作是設(shè)計(jì)充足頻率的硬盤(pán)備份過(guò)程。備份過(guò)程應(yīng)該滿(mǎn)足系統(tǒng)要求的可恢復(fù)性。例如,如果數(shù)據(jù)庫(kù)可有較長(zhǎng)的關(guān)機(jī)時(shí)間,則可以每周進(jìn)行一次冷備份,并歸檔重做日志,對(duì)于24*7的系統(tǒng),或許我們考慮的只能是熱備份。 如果每天都能備份當(dāng)然會(huì)很理想,但要考慮其現(xiàn)實(shí)性。企業(yè)都在想辦法降低維護(hù)成本,現(xiàn)實(shí)的方案才可能被采用。只要仔細(xì)計(jì)劃,并想辦法達(dá)到數(shù)據(jù)庫(kù)可用性的底線(xiàn),花少量的錢(qián)進(jìn)行成功的備份與恢復(fù)也是可能的。
二、了解ORACLE的運(yùn)行方式
ORACLE數(shù)據(jù)庫(kù)有兩種運(yùn)行方式:一是歸檔方式(ARCHIVELOG),歸檔方式的目的是當(dāng)數(shù)據(jù)庫(kù)發(fā)生故障時(shí)最大限度恢復(fù)數(shù)據(jù)庫(kù),可以保證不丟失任何已提交的數(shù)據(jù);二是不歸檔方式(NOARCHIVELOG),只能恢復(fù)數(shù)據(jù)庫(kù)到最近的回收點(diǎn)(冷備份或是邏輯備份)。我們根據(jù)數(shù)據(jù)庫(kù)的高可用性和用戶(hù)可承受丟失的工作量的多少,對(duì)于生產(chǎn)數(shù)據(jù)庫(kù),強(qiáng)烈要求采用為歸檔方式;那些正在開(kāi)發(fā)和調(diào)試的數(shù)據(jù)庫(kù)可以采用不歸檔方式。??
??如何改變數(shù)據(jù)庫(kù)的運(yùn)行方式,在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),作為創(chuàng)建數(shù)據(jù)庫(kù)的一部分,就決定了數(shù)據(jù)庫(kù)初始的存檔方式。一般情況下為NOARCHIVELOG方式。當(dāng)數(shù)據(jù)庫(kù)創(chuàng)建好以后,根據(jù)我們的需要把需要運(yùn)行在歸檔方式的數(shù)據(jù)庫(kù)改成ARCHIVELOG方式。??
1、改變不歸檔方式為為歸檔方式??
a.關(guān)閉數(shù)據(jù)庫(kù),備份已有的數(shù)據(jù),改變數(shù)據(jù)庫(kù)的運(yùn)行方式是對(duì)數(shù)據(jù)庫(kù)的重要改動(dòng),所以要對(duì)數(shù)據(jù)庫(kù)做備份,對(duì)可能出現(xiàn)的問(wèn)題作出保護(hù)。??
b. 修改初試化參數(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=/arch12/arch? ?? ???#歸檔路徑
在8i中,可以最多有五個(gè)歸檔路徑,并可以歸檔到其它服務(wù)器,如備用數(shù)據(jù)庫(kù)(standby database)服務(wù)器
c.啟動(dòng)Instance到Mount狀態(tài),即加載數(shù)據(jù)庫(kù)但不打開(kāi)數(shù)據(jù)庫(kù):??
$>SVRMGRL
SVRMGRL >connect internal
SVRMGRL >startup mount
? ? d.發(fā)出修改命令
SVRMGRL >alter database archivelog;
SVRMGRL>alter database open;
2、改變歸檔狀態(tài)為不歸檔狀態(tài)
? ? 與以上步驟相同,但有些操作不一樣,主要是在以上的b操作中,現(xiàn)在為刪除或注釋該參數(shù),在d操作中,命令為
SVRMGRL >alter database noarchivelog;
? ???注意,從歸檔方式轉(zhuǎn)換到非歸檔方式后一定要做一次數(shù)據(jù)庫(kù)的全冷備份,防止意外事件的發(fā)生。
三、ORACLE備份的分類(lèi)
簡(jiǎn)單的按照備份進(jìn)行的方式,可以分為邏輯備份、冷備份(脫機(jī)備份)、熱備份(聯(lián)機(jī)備份),其實(shí)冷備份與熱備份又可以合稱(chēng)為物理備份
按照備份的工具,可以分為EXP/IMP備份、OS拷貝、RMAN、第三方工具,如VERITAS
以下我們將從多個(gè)角度來(lái)說(shuō)明以上的各種備份方式
1、EXP/IMP邏輯備份
導(dǎo)入/導(dǎo)出是ORACLE幸存的最古老的兩個(gè)命令行工具了,其實(shí)我從來(lái)不認(rèn)為Exp/Imp是一種好的備份方式,正確的說(shuō)法是Exp/Imp只能是一個(gè)好的轉(zhuǎn)儲(chǔ)工具,特別是在小型數(shù)據(jù)庫(kù)的轉(zhuǎn)儲(chǔ),表空間的遷移,表的抽取,檢測(cè)邏輯和物理沖突等中有不小的功勞。當(dāng)然,我們也可以把它作為小型數(shù)據(jù)庫(kù)的物理備份后的一個(gè)邏輯輔助備份,也是不錯(cuò)的建議。
對(duì)于越來(lái)越大的數(shù)據(jù)庫(kù),特別是TB級(jí)數(shù)據(jù)庫(kù)和越來(lái)越多數(shù)據(jù)倉(cāng)庫(kù)的出現(xiàn),EXP/IMP越來(lái)越力不從心了,這個(gè)時(shí)候,數(shù)據(jù)庫(kù)的備份都轉(zhuǎn)向了RMAN和第三方工具。下面我們還是簡(jiǎn)要介紹一下EXP/IMP的使用。
i、使用方法
Exp parameter_name=value
Or Exp parameter_name=(value1,value2……)
只要輸入?yún)?shù)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.
??
通過(guò)輸入 EXP 命令和用戶(hù)名/口令,您可以
在用戶(hù) / 口令之后的命令:
??
實(shí)例: EXP SCOTT/TIGER
或者,您也可以通過(guò)輸入跟有各種參數(shù)的 EXP 命令來(lái)控制“導(dǎo)出”
的運(yùn)行方式。要指定參數(shù),您可以使用關(guān)鍵字:
??
格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
實(shí)例: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2),如果 T1 是分區(qū)表
USERID 必須是命令行中的第一個(gè)參數(shù)。
關(guān)鍵字??說(shuō)明(默認(rèn))? ?? ???關(guān)鍵字? ?? ?說(shuō)明(默認(rèn))
--------------------------------------------------------------------------
USERID? ?用戶(hù)名/口令? ?? ?? ?? ?FULL? ?? ?? ?導(dǎo)出整個(gè)文件 (N)
BUFFER? ?數(shù)據(jù)緩沖區(qū)的大小? ?? ?? ? OWNER? ?? ???所有者用戶(hù)名列表
FILE? ???輸出文件 (EXPDAT.DMP)? ? TABLES? ?? ? 表名列表
COMPRESS 導(dǎo)入一個(gè)范圍 (Y)? ?RECORDLENGTH??IO 記錄的長(zhǎng)度
GRANTS??導(dǎo)出權(quán)限 (Y)? ?? ?? ?? ?INCTYPE? ?? ?增量導(dǎo)出類(lèi)型
INDEXES 導(dǎo)出索引 (Y)? ?? ?? ???RECORD? ?? ? 跟蹤增量導(dǎo)出 (Y)
ROWS? ? 導(dǎo)出數(shù)據(jù)行 (Y)? ?? ?? ?PARFILE? ?? ?參數(shù)文件名
CONSTRAINTS 導(dǎo)出限制 (Y)? ? CONSISTENT? ?交叉表一致性
LOG? ?? ?屏幕輸出的日志文件? ? STATISTICS??分析對(duì)象 (ESTIMATE)
DIRECT? ?直接路徑 (N)? ?? ?? ?? ???TRIGGERS? ???導(dǎo)出觸發(fā)器 (Y)
FEEDBACK 顯示每 x 行 (0) 的進(jìn)度
FILESIZE 各轉(zhuǎn)儲(chǔ)文件的最大尺寸
QUERY? ? 選定導(dǎo)出表子集的子句
??
下列關(guān)鍵字僅用于可傳輸?shù)谋砜臻g
TRANSPORT_TABLESPACE 導(dǎo)出可傳輸?shù)谋砜臻g元數(shù)據(jù) (N)
TABLESPACES 將傳輸?shù)谋砜臻g列表
在沒(méi)有警告的情況下成功終止導(dǎo)出。
C:\>
幫助已經(jīng)很詳細(xì)的說(shuō)明了參數(shù)的意義和使用方法,并列舉了幾個(gè)簡(jiǎn)單的例子,注意的是,從8i開(kāi)始,已經(jīng)開(kāi)始支持?jǐn)?shù)據(jù)子集的方法,就是可以指定自己的Where條件,可以從表中導(dǎo)出一行或多行數(shù)據(jù)。
注意上面的set nls_lang=simplified chinese_china.zhs16gbk,通過(guò)設(shè)置環(huán)境變量,可以讓exp的幫助以中文顯示,如果set nls_lang=American_america.字符集,那么你的幫助就是英文的了。
增量和累計(jì)導(dǎo)出必須在全庫(kù)方式下才有效,而且,大多數(shù)情況下,增量和累計(jì)導(dǎo)出并沒(méi)有想象中的那么有效。ORACLE從9i開(kāi)始,不再支持增量導(dǎo)出和累計(jì)導(dǎo)出。
ii、表空間傳輸
表空間傳輸是8i新增加的一種快速在數(shù)據(jù)庫(kù)間移動(dòng)數(shù)據(jù)的一種辦法,是把一個(gè)數(shù)據(jù)庫(kù)上的格式數(shù)據(jù)文件附加到另外一個(gè)數(shù)據(jù)庫(kù)中,而不是把數(shù)據(jù)導(dǎo)出成Dmp文件,這在有些時(shí)候是非常管用的,因?yàn)閭鬏敱砜臻g移動(dòng)數(shù)據(jù)就象復(fù)制文件一樣快。
關(guān)于傳輸表空間有一些規(guī)則,即:
·源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)必須運(yùn)行在相同的平臺(tái)上。
·源數(shù)據(jù)庫(kù)與目標(biāo)數(shù)據(jù)庫(kù)必須使用相同的字符集。
·源數(shù)據(jù)庫(kù)與目標(biāo)數(shù)據(jù)庫(kù)一定要有相同大小的數(shù)據(jù)塊(9i已經(jīng)不用)
·目標(biāo)數(shù)據(jù)庫(kù)不能有與遷移表空間同名的表空間
·SYS的對(duì)象不能遷移
·必須傳輸自包含的對(duì)象集
·有一些對(duì)象,如物化視圖,基于函數(shù)的索引等不能被傳輸
可以用以下的方法來(lái)檢測(cè)一個(gè)表空間或一套表空間是否符合傳輸標(biāo)準(zhǔn):
exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);
select * from sys.transport_set_violation;
如果沒(méi)有行選擇,表示該表空間只包含表數(shù)據(jù),并且是自包含的。對(duì)于有些非自包含的表空間,如數(shù)據(jù)表空間和索引表空間,可以一起傳輸。
以下為簡(jiǎn)要使用步驟,如果想?yún)⒖荚敿?xì)使用方法,也可以參考ORACLE聯(lián)機(jī)幫助。
a.設(shè)置表空間為只讀(假定表空間名字為APP_Data 和APP_Index)
? ?alter tablespace app_data read only;
? ?alter tablespace app_index read only;
b.發(fā)出EXP命令
? ?SQL>host exp userid=”””sys/password as sysdba”””??
transport_tablespace=y tablespace=(app_data, app_index)
??以上需要注意的是
·為了在SQL中執(zhí)行EXP,USERID必須用三個(gè)引號(hào),在UNIX中也必須注意避免“/”的使用
·在816和以后,必須使用sysdba才能操作
·這個(gè)命令在SQL中必須放置在一行(這里是因?yàn)轱@示問(wèn)題放在了兩行)
? ? c.拷貝數(shù)據(jù)文件到另一個(gè)地點(diǎn),即目標(biāo)數(shù)據(jù)庫(kù)
? ???可以是cp(unix)或copy(windows)或通過(guò)ftp傳輸文件(一定要在bin方式)
? ? d.把本地的表空間設(shè)置為讀寫(xiě)
? ? e.在目標(biāo)數(shù)據(jù)庫(kù)附加該數(shù)據(jù)文件
imp file=expdat.dmp userid=”””sys/password as sysdba”””
? ?? ?transport_tablespace=y
? ?? ?“datafile=(c:\temp\app_data,c:\temp\app_index)”
? ?f.設(shè)置目標(biāo)數(shù)據(jù)庫(kù)表空間為讀寫(xiě)
alter tablespace app_data read write;
? ???alter tablespace app_index read write;
iii、導(dǎo)出/導(dǎo)入與字符集
明白ORACLE的多國(guó)語(yǔ)言設(shè)置,ORACLE多國(guó)語(yǔ)言設(shè)置是為了支持世界范圍的語(yǔ)言與字符集,一般對(duì)語(yǔ)言提示,貨幣形式,排序方式和CHAR,VARCHAR2,CLOB,LONG字段的數(shù)據(jù)的顯示等有效。ORACLE的多國(guó)語(yǔ)言設(shè)置最主要的兩個(gè)特性就是國(guó)家語(yǔ)言設(shè)置與字符集設(shè)置,國(guó)家語(yǔ)言設(shè)置決定了界面或提示使用的語(yǔ)言種類(lèi),字符集決定了數(shù)據(jù)庫(kù)保存與字符集有關(guān)數(shù)據(jù)(如文本)時(shí)候的編碼規(guī)則。正如剛才上面的一個(gè)小例子,環(huán)境變量NLS_LANG的不同,導(dǎo)致EXP幫助發(fā)生變化,這就是多國(guó)語(yǔ)言設(shè)置的作用(NLS_LANG包含國(guó)家語(yǔ)言設(shè)置與字符集設(shè)置,這里起作用的是國(guó)家語(yǔ)言設(shè)置,而不是字符集)。
ORACLE字符集設(shè)定,分為數(shù)據(jù)庫(kù)字符集和客戶(hù)端字符集環(huán)境設(shè)置。在數(shù)據(jù)庫(kù)端,字符集在創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候設(shè)定,并保存在數(shù)據(jù)庫(kù)props$表中,對(duì)于8i以上產(chǎn)品,已經(jīng)可以采用“Alter database character set 字符集”來(lái)修改數(shù)據(jù)庫(kù)的字符集,但也僅僅是從子集到超集,不要通過(guò)update props$來(lái)修改字符集,如果是不支持的轉(zhuǎn)換,可能會(huì)失去所有與字符集有關(guān)的數(shù)據(jù),就是支持的轉(zhuǎn)換,也可能導(dǎo)致數(shù)據(jù)庫(kù)的不正常工作。字符集分為單字節(jié)字符集與多字節(jié)字符集,US7ASCII就是典型的單字節(jié)字符集,在這種字符集中l(wèi)ength=lengthb,而ZHS16GBK就是常用的雙字節(jié)字符集,在這里lengthb=2*length。
在客戶(hù)端的字符集環(huán)境比較簡(jiǎn)單,主要就是環(huán)境變量或注冊(cè)表項(xiàng)NLS_LANG,注意NLS_LANG的優(yōu)先級(jí)別為:參數(shù)文件à注冊(cè)表à環(huán)境變量àalter session。NLS_LANG的組成為“國(guó)家語(yǔ)言設(shè)置.字符集”,如nls_lang=simplified chinese_china.zhs16gbk。客戶(hù)端的字符集最好與數(shù)據(jù)庫(kù)端一樣(國(guó)家語(yǔ)言設(shè)置可以不一樣,如zhs16gbk的字符集,客戶(hù)端可以是nls_lang =simplified chinese_china.zhs16gbk或Ameircan_America.zhs16gbk,都不影響數(shù)據(jù)庫(kù)字符的正常顯示),如果字符集不一樣,而且字符集的轉(zhuǎn)換也不兼容,那么客戶(hù)端的數(shù)據(jù)顯示與導(dǎo)出/導(dǎo)入的與字符集有關(guān)的數(shù)據(jù)將都是亂碼。
使用一點(diǎn)點(diǎn)技巧,就可以使導(dǎo)出/導(dǎo)入在不同的字符集的數(shù)據(jù)庫(kù)上轉(zhuǎn)換數(shù)據(jù)。這里需要一個(gè)2進(jìn)制文件編輯工具即可,如uedit32。用編輯方式打開(kāi)導(dǎo)出的dmp文件,獲取2、3字節(jié)的內(nèi)容,如00 01,先把它轉(zhuǎn)換為10進(jìn)制數(shù),為1,使用函數(shù)NLS_CHARSET_NAME即可獲得該字符集:
SQL> select nls_charset_name(1) from dual;
NLS_CHARSET_NAME(1)
-------------------
US7ASCII
可以知道該dmp文件的字符集為US7ASCII,如果需要把該dmp文件的字符集換成ZHS16GBK,則需要用NLS_CHARSET_ID獲取該字符集的編號(hào):
SQL> select nls_charset_id('zhs16gbk') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
? ?? ?? ?? ?? ?852
把852換成16進(jìn)制數(shù),為354,把2、3字節(jié)的00 01換成03 54,即完成了把該dmp文件字符集從us7ascii到zhs16gbk的轉(zhuǎn)化,這樣,再把該dmp文件導(dǎo)入到zhs16gbk字符集的數(shù)據(jù)庫(kù)就可以了。(注意,十進(jìn)制數(shù)與十六進(jìn)制之間的轉(zhuǎn)換,想明白其中的道理)
Iv、跨版本使用Exp/Imp
Exp/Imp很多時(shí)候,可以跨版本使用,如在版本7與版本8之間導(dǎo)出導(dǎo)入數(shù)據(jù),但這樣做必須選擇正確的版本,規(guī)則為:
? ?·總是使用IMP的版本匹配數(shù)據(jù)庫(kù)的版本,如果要導(dǎo)入到816,則使用816的導(dǎo)入工具。
? ?·總是使用EXP的版本匹配兩個(gè)數(shù)據(jù)庫(kù)中低的那個(gè)版本,如在815與816之間互導(dǎo),則使用815的EXP工具。
2、OS備份
操作系統(tǒng)備份有兩類(lèi),冷備份(Cold backup)與熱備份(Hot backup),操作系統(tǒng)備份與以上的邏輯備份有本質(zhì)的區(qū)別。邏輯備份提取數(shù)據(jù)庫(kù)的數(shù)據(jù)內(nèi)容,而不備份物理數(shù)據(jù)塊。而操作系統(tǒng)備份則是拷貝整個(gè)的數(shù)據(jù)文件。
i、冷備份
在文件級(jí)備份開(kāi)始前數(shù)據(jù)庫(kù)必須徹底關(guān)閉。關(guān)閉操作必須用帶有normal、immediate、transaction選項(xiàng)的shutdown來(lái)執(zhí)行。
數(shù)據(jù)庫(kù)使用的每個(gè)文件都被備份下來(lái),這些文件包括:
? ???☆所有數(shù)據(jù)文件
? ???☆所有控制文件
? ???☆所有聯(lián)機(jī)REDO LOG 文件
? ???☆I(lǐng)NIT.ORA文件(可選)
? ???作冷備份一般步驟是:
? ?? ???a.正常關(guān)閉要備份的實(shí)例(instance);
? ?? ???b.備份整個(gè)數(shù)據(jù)庫(kù)到一個(gè)目錄
c.啟動(dòng)數(shù)據(jù)庫(kù)
如
? ?? ?? ?? ? SVRMGRL>connect internal
? ?? ?? ?? ? SVRMGRL >shutdown immediate
? ?? ?? ?? ? SVRMGRL >! cp <file> <backup directory>
? ?? ?? ?? ? 或
? ?? ?? ?? ? SVRMGRL >!tar cvf /dev/rmt/0 /u01/oradata/prod
? ?? ?? ?? ? SVRMGRL >startup
? ? 注意:如果利用腳本對(duì)數(shù)據(jù)庫(kù)進(jìn)行冷備份,必須對(duì)關(guān)閉數(shù)據(jù)庫(kù)的命令進(jìn)行邏輯檢查,如果發(fā)生關(guān)閉數(shù)據(jù)庫(kù)的命令不能正常執(zhí)行而導(dǎo)致數(shù)據(jù)庫(kù)沒(méi)有正常關(guān)閉,那么,所有的冷備份將回是無(wú)效的。
ii、熱備份
熱備份是當(dāng)數(shù)據(jù)庫(kù)打開(kāi)并對(duì)用戶(hù)有效是的OS級(jí)的數(shù)據(jù)備份。熱備份只能用于ARCHIVELOG方式的數(shù)據(jù)庫(kù)。在數(shù)據(jù)文件備份之前,對(duì)應(yīng)的表空間必須通過(guò)使用ALTER TABLESPACE …… BEGIN BACKUP以備份方式放置。然后組成表空間的數(shù)據(jù)文件可以使用類(lèi)似冷備份的操作系統(tǒng)命令進(jìn)行拷貝。在數(shù)據(jù)文件用操作系統(tǒng)命令拷貝后,應(yīng)使用ALTER TABLESPACE …… END BACKUP命令使表空間脫離熱備份方式。
熱備份沒(méi)有必要備份聯(lián)機(jī)日志,但必須是歸檔狀態(tài),在實(shí)例恢復(fù)的時(shí)候,可能需要用到歸檔日志。當(dāng)前聯(lián)機(jī)日志一定要保護(hù)好或是處于鏡相狀態(tài),當(dāng)前聯(lián)機(jī)日志的損壞,對(duì)于數(shù)據(jù)庫(kù)的損壞是巨大的,只能以數(shù)據(jù)的丟失來(lái)進(jìn)行數(shù)據(jù)庫(kù)的恢復(fù)工作。
對(duì)于臨時(shí)表空間,存放的是臨時(shí)信息,在熱備份是也可以考慮不用備份,如果臨時(shí)文件發(fā)生故障,可以刪除該數(shù)據(jù)文件與表空間,重建一個(gè)臨時(shí)表空間。
熱備份的優(yōu)點(diǎn)是顯而易見(jiàn)的
---- a.可在表空間或數(shù)據(jù)文件級(jí)備份,備份時(shí)間短。??
---- b.備份時(shí)數(shù)據(jù)庫(kù)仍可使用。??
---- c.可達(dá)到秒級(jí)恢復(fù)(恢復(fù)到某一時(shí)間點(diǎn)上)。??
---- d.可對(duì)幾乎所有數(shù)據(jù)庫(kù)實(shí)體作恢復(fù)。??
---- e.恢復(fù)是快速的,在大多數(shù)情況下在數(shù)據(jù)庫(kù)仍工作時(shí)恢復(fù)。
操作系統(tǒng)作熱備份的一般步驟為:
①連接數(shù)據(jù)庫(kù)
SVRMGRL>connect internal;
②將需要備份的表空間(如User)設(shè)置為備份方式
SVRMGRL>Alter tablespace User begin backup;
③拷貝數(shù)據(jù)文件
SVRMGRL>!cp /u01/oradata/prod/user01.ora /backup/prod/user01.ora
Or
$cp cp /u01/oradata/prod/user01.ora /backup/prod/user01.ora
④在數(shù)據(jù)文件拷貝完成后,將表空間拖體備份方式
SVRMGRL>Alter tablespace User end backup;
⑤對(duì)所有需要備份的表空間重復(fù)2,3,4
⑥使用如下的命令備份控制文件ALTER DATABSE …… BACKUP CONTROLFILE
如備份成二進(jìn)制文件
alter database backup controlfile to ‘new fielname’;
備份成文本文件
alter database backup controlfile to trace;
因?yàn)闊醾浞莸臅r(shí)候,用戶(hù)還在操作數(shù)據(jù)庫(kù),所以,最好是每個(gè)表空間處于備份狀態(tài)的時(shí)間最短,這樣就要求一個(gè)表空間一個(gè)表空間的備份,不要一起使表空間處于備份狀態(tài)而同時(shí)拷貝數(shù)據(jù)文件。
? ? 注意:如果在熱備份的時(shí)候如果數(shù)據(jù)庫(kù)中斷(如斷電),那么在重新啟動(dòng)數(shù)據(jù)庫(kù)的時(shí)候,數(shù)據(jù)庫(kù)將提示有數(shù)據(jù)文件需要恢復(fù),你需要把正在斷電時(shí)候的處于備份狀態(tài)的數(shù)據(jù)文件通過(guò)ALTER TABLESPACE …… END BACKUP結(jié)束備份方式。具體哪個(gè)數(shù)據(jù)文件或表空間處于備份狀態(tài),可以通過(guò)v$backup與v$datafile來(lái)獲得。
3、RMAN(備份與恢復(fù)管理器)
i.使用RMAN進(jìn)行備份
Recovery manager(RMAN)是ORACLE提供的DBA工具,用語(yǔ)管理備份和恢復(fù)操作。RMAN只能用于ORACLE8或更高的版本中。它能夠備份整個(gè)數(shù)據(jù)庫(kù)或數(shù)據(jù)庫(kù)部件,其中包括表空間、數(shù)據(jù)文件,控制文件和歸檔文件。RMAN可以按要求存取和執(zhí)行備份和恢復(fù)。
RMAN備份有如下優(yōu)點(diǎn)
☆支持在線(xiàn)熱備份
☆支持多級(jí)增量備份
☆支持并行備份、恢復(fù)
☆減少所需要備份量
☆備份、恢復(fù)使用簡(jiǎn)單
? ? 重要的是,使用恢復(fù)管理器允許您進(jìn)行增量數(shù)據(jù)塊級(jí)的備份(這個(gè)與導(dǎo)出/導(dǎo)入的增量截然不同)。增量RMAN備份是時(shí)間和空間有效的,因?yàn)樗麄冎粋浞葑陨洗蝹浞菀詠?lái)有變化的那些數(shù)據(jù)塊。另一個(gè)空間有效的RMAN特性是它只備份數(shù)據(jù)文件中使用的數(shù)據(jù)塊,忽略空的,未用的數(shù)據(jù)塊,這個(gè)對(duì)于預(yù)分配空間的表空間有很大的好處。
? ?從9i開(kāi)始,還增加了RMAN的數(shù)據(jù)塊級(jí)別的恢復(fù),可以進(jìn)一步減少數(shù)據(jù)庫(kù)恢復(fù)時(shí)間。
RMAN支持以下不同類(lèi)型的備份
FULL? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???數(shù)據(jù)庫(kù)全備份,包括所有的數(shù)據(jù)塊
INCREMENTAL? ?? ?? ?? ?? ?? ?? ???增量備份,只備份自上次增量備份以來(lái)修改過(guò)的數(shù)據(jù)塊。需要一個(gè)0級(jí)的增量作為增量的基礎(chǔ),可以支持5級(jí)增量。
OPEN? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?在數(shù)據(jù)庫(kù)打開(kāi)的時(shí)候使用
CLOSED? ?? ?? ?? ?? ?? ?? ?? ?? ???在數(shù)據(jù)庫(kù)安裝(MOUNT)但不打開(kāi)的時(shí)候備份,關(guān)閉備份可以是CONSISTENT或IN CONSISTENT類(lèi)型的。
CONSISTENT? ?? ?? ?? ?? ?? ?? ?? ? 在數(shù)據(jù)庫(kù)安裝,單不打開(kāi),并且在安裝之前數(shù)據(jù)庫(kù)被徹底關(guān)閉(而不是被破壞或異常退出)時(shí)使用。CONSISTENT備份可以簡(jiǎn)單的進(jìn)行復(fù)原(RESTORE)而不是恢復(fù)(RECOVER)
INCONSISTENT? ?? ?? ?? ?? ?? ?? ?在數(shù)據(jù)庫(kù)打開(kāi)或安裝(但不打開(kāi))時(shí)使用。在該數(shù)據(jù)庫(kù)正常關(guān)閉或崩潰后,INCONSISTENT備份需要恢復(fù)。
理解BACKUP,RESTORE,RECOVER命令,這是RMAN最基本的三個(gè)命令,可以進(jìn)行數(shù)據(jù)庫(kù)的備份,復(fù)原以及恢復(fù)操作。
? ? 理解恢復(fù)目錄,RMAN可以在沒(méi)有恢復(fù)目錄(NOCATALOG)下運(yùn)行,這個(gè)時(shí)候備份信息保存在控制文件。保存在控制文件的備份信息是很危險(xiǎn)的,如果控制文件的破壞將導(dǎo)致備份信息的丟失與恢復(fù)的失敗,而且,沒(méi)有恢復(fù)目錄,很多RMAN的命令將不被支持。所以對(duì)于重要的數(shù)據(jù)庫(kù),建議創(chuàng)建恢復(fù)目錄,恢復(fù)目錄也是一個(gè)數(shù)據(jù)庫(kù),只不過(guò)這個(gè)數(shù)據(jù)庫(kù)用來(lái)保存?zhèn)浞菪畔ⅲ粋€(gè)恢復(fù)目錄可以用來(lái)備份多個(gè)數(shù)據(jù)庫(kù)。
? ?創(chuàng)建RMAN目錄,以下步驟說(shuō)明了在一個(gè)數(shù)據(jù)庫(kù)中盡力RMAN目錄的過(guò)程。
a.為目錄創(chuàng)建一個(gè)單獨(dú)的表空間
SQL>Create tablespace tools datafile ‘fielname’ size 50m;
b.創(chuàng)建RMAN用戶(hù)
SQL>Create user RMAN identified by RMAN default tablespace tools temporary tablespace temp;
c.給RMAN授予權(quán)限
SQL>Grant connect , resource , recovery_catalog_owner to rman;
d.打開(kāi)RMAN
$>RMAN
e.連接數(shù)據(jù)庫(kù)
RMAN>connect catalog rman/rman
f.創(chuàng)建恢復(fù)目錄
RMAN>Create catalog tablespace rman
注冊(cè)目標(biāo)數(shù)據(jù)庫(kù),恢復(fù)目錄創(chuàng)建成功后,就可以注冊(cè)目標(biāo)數(shù)據(jù)庫(kù)了,目標(biāo)數(shù)據(jù)庫(kù)就是需要備份的數(shù)據(jù)庫(kù),一個(gè)恢復(fù)目錄可以注冊(cè)多個(gè)目標(biāo)數(shù)據(jù)庫(kù),注冊(cè)目標(biāo)數(shù)據(jù)庫(kù)的命令為:
? ???$>RMAN target internal/password catalog rman/rman@rcdb;
RMAN>Register database;
數(shù)據(jù)庫(kù)注冊(cè)完成,就可以用RMAN來(lái)進(jìn)行備份了,更多命令請(qǐng)參考ORACLE聯(lián)機(jī)手冊(cè)或《ORACLE8i備份與恢復(fù)手冊(cè)》。
RMAN使用腳本來(lái)備份數(shù)據(jù)庫(kù),以下是RMAN進(jìn)行備份的幾個(gè)例子。
a.備份整個(gè)數(shù)據(jù)庫(kù)
backup full tag ‘basicdb’ format ‘/bak/oradata/full_%u_%s_%p’ database;
b.備份一個(gè)表空間
? ?? ? backup tag ‘tsuser’ format ‘/bak/oradata/tsuser_%u_%s_%p’ tablespace users;
c.備份歸檔日志
backup tag ‘a(chǎn)log’ format ‘/bak/archivebak/arcbak_%u_%s_%p’ archivelog all delete input;
ii.維護(hù)RMAN
??RMAN的維護(hù)主要分為幾個(gè)方面
1、??查看RMAN的信息
? ?? ?? ?? ?檢查現(xiàn)有備份
? ?? ?? ?? ???RMAN>list backup
? ?? ?? ?? ?列出過(guò)期備份
? ?? ?? ?? ???RMAN>report obsolete
? ?? ?? ?? ?刪除過(guò)期的備份
? ?? ?? ?? ???RMAN>allocate channel for maintenance type disk;
? ?? ?? ?? ???RMAN>change backupset id delete;
? ?? ?? ?? ???RMAN>release channel;
2、??同步或重置RMAN
如果目標(biāo)數(shù)據(jù)庫(kù)物理對(duì)象發(fā)生了變化,如添加了一個(gè)數(shù)據(jù)文件,需要用如下命令同步:
RMAN>resync catalog;
如果目標(biāo)數(shù)據(jù)庫(kù)reset了數(shù)據(jù)庫(kù),需要用如下命令同步
RMAN>reset database;
當(dāng)手工刪除了數(shù)據(jù)庫(kù)的歸檔文件后,要執(zhí)行以下腳本同步
RMAN>allocate channel for maintenance type disk;
RMAN> change archivelog all crosscheck;
RMAN>release channel;
? ?? ?? ?? ?當(dāng)手工刪除了數(shù)據(jù)庫(kù)的RMAN備份后,要執(zhí)行以下腳本來(lái)同步
? ?? ?? ?? ?? ? RMAN>allocate channel for maintenance type disk;
RMAN>crosscheck backup;
RMAN>delete expired backup;
RMAN>release channel;
四、定制恰當(dāng)?shù)膫浞莶呗?
i.定制正確的策略
正確的備份策略不僅能保證數(shù)據(jù)庫(kù)服務(wù)器的24*7的高性能的運(yùn)行,還能保證備份與恢復(fù)的快速性與可靠性。我們將以RMAN的多級(jí)增量備份作為一個(gè)備份策略的例子來(lái)討論。采用多級(jí)備份就是為了減少每天備份所需要的時(shí)間,而又保證系統(tǒng)有良好的恢復(fù)性。恢復(fù)時(shí)間與備份時(shí)間要有一個(gè)權(quán)衡。比如只要進(jìn)行一個(gè)數(shù)據(jù)庫(kù)的全備份,然后就只備份歸檔也可以保證能把數(shù)據(jù)庫(kù)恢復(fù)到最新的狀態(tài),但是這樣的恢復(fù)時(shí)間將是不可容忍的。多級(jí)備份也正是? ???為了解決這種問(wèn)題,以下就是一個(gè)多級(jí)備份的例子:
每半年做一個(gè)數(shù)據(jù)庫(kù)的全備份(包括所有的數(shù)據(jù)和只讀表空間)
每一個(gè)月做一次零級(jí)備份(不包含只讀表空間)
每個(gè)星期做一次一級(jí)備份
每天做一次二級(jí)備份
任何數(shù)據(jù)庫(kù)的更改需要重新同步CATALOG目錄并重新備份(如添加數(shù)據(jù)文件)或重新備份(如修改表空間為只讀)
每次備份后都可以備份歸檔日志或定期備份歸檔日志。
如果可能,可以直接備份到磁帶上。
數(shù)據(jù)庫(kù)全備份的腳本
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 ‘a(chǎn)lter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’??
archivelog all delete input;? ?#備份歸檔可選,可以單獨(dú)定期備份
release channel c1;
release channel c2;
release channel c3;
}
零級(jí)備份的腳本
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 ‘a(chǎn)lter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’??
archivelog all delete input;? ?#備份歸檔可選,可以單獨(dú)定期備份
release channel c1;
release channel c2;
release channel c3;
}
同理,我們可以得到一級(jí)備份,二級(jí)備份的腳本,如一級(jí)備份的腳本
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 ‘a(chǎn)lter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’??
archivelog all delete input;? ?#備份歸檔可選,可以單獨(dú)定期備份
release channel c1;
release channel c2;
release channel c3;
}
如果按照以上備份策略,則每天的所需要備份的數(shù)據(jù)量只有一天的改變量。而做恢復(fù)時(shí)最多要恢復(fù)當(dāng)月的一個(gè)零級(jí)備份+三個(gè)一級(jí)備份+6個(gè)二級(jí)備份+當(dāng)天的歸檔文件。如果不能接受這樣的恢復(fù)時(shí)間,可以減少零級(jí)備份之間的時(shí)間間隔。
? ???在每次備份后,原則上在該備份點(diǎn)之前的歸檔日志就可以刪除掉了,但是為了進(jìn)一步的安全以及日后需要(如使用LOGMNR查找所需信息),建議有條件的話(huà),歸檔日志保存一年,可以保存在磁帶等廉價(jià)存取設(shè)備上。
ii.與RMAN備份有關(guān)的優(yōu)化
備份操作主要是完成以下三個(gè)步驟
1、從磁盤(pán)上讀取數(shù)據(jù)
2、在內(nèi)存中處理數(shù)據(jù)塊
3、寫(xiě)入數(shù)據(jù)到磁盤(pán)或磁帶
以上的讀寫(xiě)操作可以同步或異步的完成,在同步I/O操作中,一個(gè)時(shí)間只允許有一個(gè)IO操作,但是在異步I/O操作中,一個(gè)時(shí)間允許有多個(gè)IO操作。因此,備份與恢復(fù)的調(diào)優(yōu)主要集中在以下幾個(gè)方面:
1、??提高同步或異步I/O操作能力
在支持異步操作的操作系統(tǒng)上,可以通過(guò)設(shè)置TAPE_AYSNCH_IO,DISK_ASYNCH_IO和BACKUP_TYPE_IO_SLAVES來(lái)支持異步操作,提高寫(xiě)的能力。
2、??提高磁盤(pán)讀能力
可以在backup命令后通過(guò)設(shè)置DISKRATIO來(lái)保證從多個(gè)磁盤(pán)上讀取數(shù)據(jù),保證連續(xù)的數(shù)據(jù)流。
3、??正確設(shè)置緩沖區(qū)與參數(shù)值
設(shè)置LARGE_POOL_SIZE,使備份可以使用連續(xù)的緩沖池,通過(guò)設(shè)置DB_FIL_DIRECT_IO_COUNT可以提高緩沖區(qū)的利用。如果使用磁帶備份,還可以設(shè)置BACKUP_TYPE_IO_SLAVES來(lái)提高磁帶的寫(xiě)能力。
4、??采用并行備份
開(kāi)辟多個(gè)通道,可以實(shí)現(xiàn)并行備份與恢復(fù)
??
iii.備份RMAN數(shù)據(jù)庫(kù)
RMAN自己的數(shù)據(jù)庫(kù)也需要備份,但是本身很小,而且不是經(jīng)常發(fā)生變化,所以在每次RMAN備份完成后,都可以用如下腳本對(duì)RMAN數(shù)據(jù)庫(kù)備份。
EXP pafile =exprman.sql
exprman.sql為
USERID=RMAN/RMAN
BUFFER=32768
OWNER=RMAN
FILE=RMAN.DMP
ROWS=Y
GRANTS=Y
COMPRESS=Y
CONSISTENT=Y
iv.使自動(dòng)備份數(shù)據(jù)庫(kù)
自動(dòng)備份數(shù)據(jù)庫(kù)不外乎以下三種方式
? ???WINDOWS下的任務(wù)計(jì)劃(At命令)
? ???UNIX下的Crontab
? ???第三方工具如Viritas
在以上三種方式中Viritas屬于第三方工具,很多人可能都沒(méi)有接觸,主要說(shuō)一下windows的任務(wù)計(jì)劃與unix的cron
1、生成腳本文件,如backup.rcv
假定文件內(nèi)容如下:
$>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、生成執(zhí)行文件
在windows上生成backup_archive.bat,內(nèi)容包括
rman cmdfile = backup.rcv
在unix下生成 backup_archive.sh,內(nèi)容包括
/oracle/ramn/rman cmdfile = backup.rcv
??3、加入調(diào)度
在windows中用任務(wù)計(jì)劃向?qū)Ъ纯桑蚴褂胊t命令。
在unix中,在目標(biāo)機(jī)器上編寫(xiě)一個(gè)文件,用以啟動(dòng)自動(dòng)備份進(jìn)程。假定文件名為ORACLE,文件將放在/var/spool/cron/crontabs目錄下
$>cat oracle
0 23 * * 0 backup_archive.sh
#表示星期天23點(diǎn)對(duì)數(shù)據(jù)庫(kù)備份
0 12,18 * * * backup_archive.sh
? ???#表示每天12點(diǎn),18點(diǎn)備份
Crontab文件的每一行由六個(gè)域(minutes,hours,day of month,month,day of week,command)組成,域之間用空格或Tab分隔開(kāi)來(lái)
五、常見(jiàn)誤區(qū)
1、使用EXP/IMP備份
EXP/IMP不是一個(gè)良好的備份工具,在以后的發(fā)展之中,ORACLE對(duì)EXP/IMP用于備份的支持會(huì)越來(lái)越低。ORACLE只是把EXP/IMP當(dāng)作一個(gè)好的工具而不是備份工具,在對(duì)于大型數(shù)據(jù)庫(kù),如TB級(jí)數(shù)據(jù)庫(kù)或數(shù)據(jù)倉(cāng)庫(kù),EXP/IMP肯定會(huì)力不從心。
2、在應(yīng)用程序中備份數(shù)據(jù)庫(kù)
在論壇上,有很多這樣的要求,“我怎么在程序中備份與恢復(fù)數(shù)據(jù)庫(kù)?”。首先說(shuō),這個(gè)并不是不可以實(shí)現(xiàn),但是實(shí)現(xiàn)的過(guò)程會(huì)很復(fù)雜而且意外會(huì)很多。就我的感覺(jué),提出這樣問(wèn)題的人,首先一點(diǎn)就是對(duì)ORACLE或DBA的不了解,如果ORACLE可以這么輕松的實(shí)現(xiàn)備份與恢復(fù),那么我可以說(shuō),就不需要DBA了。
3、冷備份比熱備份更容易,效果會(huì)更好
有人認(rèn)為,冷備份是關(guān)閉數(shù)據(jù)庫(kù)進(jìn)行的一致性備份,肯定比熱備份要好,使用也容易,其實(shí)不盡然,在熱備份中,一樣可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)的全備份,而且不會(huì)影響到數(shù)據(jù)庫(kù)的運(yùn)行。建議所有的生產(chǎn)機(jī),都運(yùn)行在歸檔方式下,采用熱備份方式。
六、常見(jiàn)問(wèn)題
1、我導(dǎo)出的數(shù)據(jù)為什么不能導(dǎo)入,提示不支持的字符集轉(zhuǎn)換
答:參考上面的字符集原則,導(dǎo)出數(shù)據(jù)時(shí)客戶(hù)端與數(shù)據(jù)庫(kù)字符集一致,導(dǎo)入時(shí)修改為與目標(biāo)數(shù)據(jù)庫(kù)字符集一致。
2、我的歸檔日志越來(lái)越多,我什么時(shí)候可以刪除歸檔日志?
答:在每一次全備份(如OS全冷備份或全熱備份)或基于全備份的增量備份(如RMAN基于0級(jí)備份上的增量備份)后都可以刪除該備份點(diǎn)之前的歸檔日志,建議在磁帶上保留一年。
3、全備份時(shí)一定需要備份所有數(shù)據(jù)文件嗎?
答:不需要,起碼有兩類(lèi)數(shù)據(jù)文件可以不備份,一類(lèi)就是臨時(shí)數(shù)據(jù)文件,如果丟失,可以刪除后重建;一類(lèi)是只讀表空間數(shù)據(jù)文件,如果上次備份以來(lái),沒(méi)有修改過(guò)表空間的只讀屬性,就可以不需要備份。
4、聯(lián)機(jī)日志需要備份嗎?
答:如果是歸檔方式熱備份,就沒(méi)有必要備份聯(lián)機(jī)日志。但是對(duì)于冷備份,可以備份聯(lián)機(jī)日志,特別是不歸檔狀態(tài)。備份過(guò)聯(lián)機(jī)日志后的冷備份,因?yàn)閿?shù)據(jù)庫(kù)是一致的,可以恢復(fù)到該備份點(diǎn)。
七、小結(jié)
1、什么是數(shù)據(jù)庫(kù)備份,數(shù)據(jù)庫(kù)備份就是把數(shù)據(jù)庫(kù)復(fù)制到轉(zhuǎn)儲(chǔ)設(shè)備的過(guò)程。
? ?2、數(shù)據(jù)庫(kù)的運(yùn)行方式,可以分為歸檔方式和非歸檔方式,建議運(yùn)行在歸檔方式下運(yùn)行熱備份。
? ?3、了解了數(shù)據(jù)庫(kù)的備份方式,邏輯備份、冷備份、熱備份
? ?4、了解數(shù)據(jù)庫(kù)的備份工具,EXP/IMP執(zhí)行邏輯備份,OS腳本可以執(zhí)行冷備份或熱備份,RMAN也可以執(zhí)行冷備份或熱備份
? ?5、了解ORACLE的備份策略,并怎樣選擇最佳的備份策略
? ?6、知道怎么樣啟動(dòng)自動(dòng)備份,了解Windows的at命令與unix的cron進(jìn)程。
參考文獻(xiàn):
Expert One-on-one Oracle??[美] Thomas Kyte 著 清華大學(xué)出版社
Oracle 8i Web開(kāi)發(fā)指南 [美] Dan Hotka,et al. 著 清華大學(xué)出版社
Oracle 8i DBA Architecture & Administration and backup & Recovery Study Guide
??[美] Dong Stuns Biju Thomas著 電子工業(yè)出版社
Oracle 數(shù)據(jù)庫(kù)管理員技術(shù)指南 [美] Sumit Sarin著 機(jī)械工業(yè)出版社
摘自:http://www.oracle.com.cn/thread-896-1-1.html

1、了解什么是備份
2、了解備份的重要性
3、理解數(shù)據(jù)庫(kù)的兩種運(yùn)行方式
4、理解不同的備份方式及其區(qū)別
5、了解正確的備份策略及其好處
??
一、了解備份的重要性
可以說(shuō),從計(jì)算機(jī)系統(tǒng)出世的那天起,就有了備份這個(gè)概念,計(jì)算機(jī)以其強(qiáng)大的速度處理能力,取代了很多人為的工作,但是,往往很多時(shí)候,它又是那么弱不禁風(fēng),主板上的芯片、主板電路、內(nèi)存、電源等任何一項(xiàng)不能正常工作,都會(huì)導(dǎo)致計(jì)算機(jī)系統(tǒng)不能正常工作。當(dāng)然,這些損壞可以修復(fù),不會(huì)導(dǎo)致應(yīng)用和數(shù)據(jù)的損壞。但是,如果計(jì)算機(jī)的硬盤(pán)損壞,將會(huì)導(dǎo)致數(shù)據(jù)丟失,此時(shí)必須用備份恢復(fù)數(shù)據(jù)。
其實(shí),在我們的現(xiàn)實(shí)世界中,已經(jīng)就存在很多備份策略,如RAID技術(shù),雙機(jī)熱備,集群技術(shù)發(fā)展的不就是計(jì)算機(jī)系統(tǒng)的備份和高可用性嗎?有很多時(shí)候,系統(tǒng)的備份的確就能解決數(shù)據(jù)庫(kù)備份的問(wèn)題,如磁盤(pán)介質(zhì)的損壞,往往從鏡相上面做簡(jiǎn)單的恢復(fù),或簡(jiǎn)單的切換機(jī)器就可以了。
但是,上面所說(shuō)的系統(tǒng)備份策略是從硬件的角度來(lái)考慮備份與恢復(fù)的問(wèn)題,這是需要代價(jià)的。我們所能選擇備份策略的依據(jù)是:丟是數(shù)據(jù)的代價(jià)與確保數(shù)據(jù)不丟失的代價(jià)之比。還有的時(shí)候,硬件的備份有時(shí)根本滿(mǎn)足不了現(xiàn)實(shí)需要,假如你誤刪了一個(gè)表,但是你又想恢復(fù)的時(shí)候,數(shù)據(jù)庫(kù)的備份就變的重要了。ORACLE本身就提供了強(qiáng)大的備份與恢復(fù)策略,這里我們只討論ORACLE備份策略,以下的備份都是指ORACLE數(shù)據(jù)庫(kù)備份,恢復(fù)將放到下一講中。
所謂備份,就是把數(shù)據(jù)庫(kù)復(fù)制到轉(zhuǎn)儲(chǔ)設(shè)備的過(guò)程。其中,轉(zhuǎn)儲(chǔ)設(shè)備是指用于放置數(shù)據(jù)庫(kù)拷貝的磁帶或磁盤(pán)。??
能夠進(jìn)行什么樣的恢復(fù)依賴(lài)于有什么樣的備份。作為 DBA,有責(zé)任從以下三個(gè)方面維護(hù)數(shù)據(jù)庫(kù)的可恢復(fù)性:??
·使數(shù)據(jù)庫(kù)的失效次數(shù)減到最少,從而使數(shù)據(jù)庫(kù)保持最大的可用性;??
·當(dāng)數(shù)據(jù)庫(kù)不可避免地失效后,要使恢復(fù)時(shí)間減到最少,從而使恢復(fù)的效率達(dá)到最高;??
·當(dāng)數(shù)據(jù)庫(kù)失效后,要確保盡量少的數(shù)據(jù)丟失或根本不丟失,從而使數(shù)據(jù)具有最大的可恢復(fù)性。??
災(zāi)難恢復(fù)的最重要的工作是設(shè)計(jì)充足頻率的硬盤(pán)備份過(guò)程。備份過(guò)程應(yīng)該滿(mǎn)足系統(tǒng)要求的可恢復(fù)性。例如,如果數(shù)據(jù)庫(kù)可有較長(zhǎng)的關(guān)機(jī)時(shí)間,則可以每周進(jìn)行一次冷備份,并歸檔重做日志,對(duì)于24*7的系統(tǒng),或許我們考慮的只能是熱備份。 如果每天都能備份當(dāng)然會(huì)很理想,但要考慮其現(xiàn)實(shí)性。企業(yè)都在想辦法降低維護(hù)成本,現(xiàn)實(shí)的方案才可能被采用。只要仔細(xì)計(jì)劃,并想辦法達(dá)到數(shù)據(jù)庫(kù)可用性的底線(xiàn),花少量的錢(qián)進(jìn)行成功的備份與恢復(fù)也是可能的。
二、了解ORACLE的運(yùn)行方式
ORACLE數(shù)據(jù)庫(kù)有兩種運(yùn)行方式:一是歸檔方式(ARCHIVELOG),歸檔方式的目的是當(dāng)數(shù)據(jù)庫(kù)發(fā)生故障時(shí)最大限度恢復(fù)數(shù)據(jù)庫(kù),可以保證不丟失任何已提交的數(shù)據(jù);二是不歸檔方式(NOARCHIVELOG),只能恢復(fù)數(shù)據(jù)庫(kù)到最近的回收點(diǎn)(冷備份或是邏輯備份)。我們根據(jù)數(shù)據(jù)庫(kù)的高可用性和用戶(hù)可承受丟失的工作量的多少,對(duì)于生產(chǎn)數(shù)據(jù)庫(kù),強(qiáng)烈要求采用為歸檔方式;那些正在開(kāi)發(fā)和調(diào)試的數(shù)據(jù)庫(kù)可以采用不歸檔方式。??
??如何改變數(shù)據(jù)庫(kù)的運(yùn)行方式,在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),作為創(chuàng)建數(shù)據(jù)庫(kù)的一部分,就決定了數(shù)據(jù)庫(kù)初始的存檔方式。一般情況下為NOARCHIVELOG方式。當(dāng)數(shù)據(jù)庫(kù)創(chuàng)建好以后,根據(jù)我們的需要把需要運(yùn)行在歸檔方式的數(shù)據(jù)庫(kù)改成ARCHIVELOG方式。??
1、改變不歸檔方式為為歸檔方式??
a.關(guān)閉數(shù)據(jù)庫(kù),備份已有的數(shù)據(jù),改變數(shù)據(jù)庫(kù)的運(yùn)行方式是對(duì)數(shù)據(jù)庫(kù)的重要改動(dòng),所以要對(duì)數(shù)據(jù)庫(kù)做備份,對(duì)可能出現(xiàn)的問(wèn)題作出保護(hù)。??
b. 修改初試化參數(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=/arch12/arch? ?? ???#歸檔路徑
在8i中,可以最多有五個(gè)歸檔路徑,并可以歸檔到其它服務(wù)器,如備用數(shù)據(jù)庫(kù)(standby database)服務(wù)器
c.啟動(dòng)Instance到Mount狀態(tài),即加載數(shù)據(jù)庫(kù)但不打開(kāi)數(shù)據(jù)庫(kù):??
$>SVRMGRL
SVRMGRL >connect internal
SVRMGRL >startup mount
? ? d.發(fā)出修改命令
SVRMGRL >alter database archivelog;
SVRMGRL>alter database open;
2、改變歸檔狀態(tài)為不歸檔狀態(tài)
? ? 與以上步驟相同,但有些操作不一樣,主要是在以上的b操作中,現(xiàn)在為刪除或注釋該參數(shù),在d操作中,命令為
SVRMGRL >alter database noarchivelog;
? ???注意,從歸檔方式轉(zhuǎn)換到非歸檔方式后一定要做一次數(shù)據(jù)庫(kù)的全冷備份,防止意外事件的發(fā)生。
三、ORACLE備份的分類(lèi)
簡(jiǎn)單的按照備份進(jìn)行的方式,可以分為邏輯備份、冷備份(脫機(jī)備份)、熱備份(聯(lián)機(jī)備份),其實(shí)冷備份與熱備份又可以合稱(chēng)為物理備份
按照備份的工具,可以分為EXP/IMP備份、OS拷貝、RMAN、第三方工具,如VERITAS
以下我們將從多個(gè)角度來(lái)說(shuō)明以上的各種備份方式
1、EXP/IMP邏輯備份
導(dǎo)入/導(dǎo)出是ORACLE幸存的最古老的兩個(gè)命令行工具了,其實(shí)我從來(lái)不認(rèn)為Exp/Imp是一種好的備份方式,正確的說(shuō)法是Exp/Imp只能是一個(gè)好的轉(zhuǎn)儲(chǔ)工具,特別是在小型數(shù)據(jù)庫(kù)的轉(zhuǎn)儲(chǔ),表空間的遷移,表的抽取,檢測(cè)邏輯和物理沖突等中有不小的功勞。當(dāng)然,我們也可以把它作為小型數(shù)據(jù)庫(kù)的物理備份后的一個(gè)邏輯輔助備份,也是不錯(cuò)的建議。
對(duì)于越來(lái)越大的數(shù)據(jù)庫(kù),特別是TB級(jí)數(shù)據(jù)庫(kù)和越來(lái)越多數(shù)據(jù)倉(cāng)庫(kù)的出現(xiàn),EXP/IMP越來(lái)越力不從心了,這個(gè)時(shí)候,數(shù)據(jù)庫(kù)的備份都轉(zhuǎn)向了RMAN和第三方工具。下面我們還是簡(jiǎn)要介紹一下EXP/IMP的使用。
i、使用方法
Exp parameter_name=value
Or Exp parameter_name=(value1,value2……)
只要輸入?yún)?shù)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.
??
通過(guò)輸入 EXP 命令和用戶(hù)名/口令,您可以
在用戶(hù) / 口令之后的命令:
??
實(shí)例: EXP SCOTT/TIGER
或者,您也可以通過(guò)輸入跟有各種參數(shù)的 EXP 命令來(lái)控制“導(dǎo)出”
的運(yùn)行方式。要指定參數(shù),您可以使用關(guān)鍵字:
??
格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
實(shí)例: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2),如果 T1 是分區(qū)表
USERID 必須是命令行中的第一個(gè)參數(shù)。
關(guān)鍵字??說(shuō)明(默認(rèn))? ?? ???關(guān)鍵字? ?? ?說(shuō)明(默認(rèn))
--------------------------------------------------------------------------
USERID? ?用戶(hù)名/口令? ?? ?? ?? ?FULL? ?? ?? ?導(dǎo)出整個(gè)文件 (N)
BUFFER? ?數(shù)據(jù)緩沖區(qū)的大小? ?? ?? ? OWNER? ?? ???所有者用戶(hù)名列表
FILE? ???輸出文件 (EXPDAT.DMP)? ? TABLES? ?? ? 表名列表
COMPRESS 導(dǎo)入一個(gè)范圍 (Y)? ?RECORDLENGTH??IO 記錄的長(zhǎng)度
GRANTS??導(dǎo)出權(quán)限 (Y)? ?? ?? ?? ?INCTYPE? ?? ?增量導(dǎo)出類(lèi)型
INDEXES 導(dǎo)出索引 (Y)? ?? ?? ???RECORD? ?? ? 跟蹤增量導(dǎo)出 (Y)
ROWS? ? 導(dǎo)出數(shù)據(jù)行 (Y)? ?? ?? ?PARFILE? ?? ?參數(shù)文件名
CONSTRAINTS 導(dǎo)出限制 (Y)? ? CONSISTENT? ?交叉表一致性
LOG? ?? ?屏幕輸出的日志文件? ? STATISTICS??分析對(duì)象 (ESTIMATE)
DIRECT? ?直接路徑 (N)? ?? ?? ?? ???TRIGGERS? ???導(dǎo)出觸發(fā)器 (Y)
FEEDBACK 顯示每 x 行 (0) 的進(jìn)度
FILESIZE 各轉(zhuǎn)儲(chǔ)文件的最大尺寸
QUERY? ? 選定導(dǎo)出表子集的子句
??
下列關(guān)鍵字僅用于可傳輸?shù)谋砜臻g
TRANSPORT_TABLESPACE 導(dǎo)出可傳輸?shù)谋砜臻g元數(shù)據(jù) (N)
TABLESPACES 將傳輸?shù)谋砜臻g列表
在沒(méi)有警告的情況下成功終止導(dǎo)出。
C:\>
幫助已經(jīng)很詳細(xì)的說(shuō)明了參數(shù)的意義和使用方法,并列舉了幾個(gè)簡(jiǎn)單的例子,注意的是,從8i開(kāi)始,已經(jīng)開(kāi)始支持?jǐn)?shù)據(jù)子集的方法,就是可以指定自己的Where條件,可以從表中導(dǎo)出一行或多行數(shù)據(jù)。
注意上面的set nls_lang=simplified chinese_china.zhs16gbk,通過(guò)設(shè)置環(huán)境變量,可以讓exp的幫助以中文顯示,如果set nls_lang=American_america.字符集,那么你的幫助就是英文的了。
增量和累計(jì)導(dǎo)出必須在全庫(kù)方式下才有效,而且,大多數(shù)情況下,增量和累計(jì)導(dǎo)出并沒(méi)有想象中的那么有效。ORACLE從9i開(kāi)始,不再支持增量導(dǎo)出和累計(jì)導(dǎo)出。
ii、表空間傳輸
表空間傳輸是8i新增加的一種快速在數(shù)據(jù)庫(kù)間移動(dòng)數(shù)據(jù)的一種辦法,是把一個(gè)數(shù)據(jù)庫(kù)上的格式數(shù)據(jù)文件附加到另外一個(gè)數(shù)據(jù)庫(kù)中,而不是把數(shù)據(jù)導(dǎo)出成Dmp文件,這在有些時(shí)候是非常管用的,因?yàn)閭鬏敱砜臻g移動(dòng)數(shù)據(jù)就象復(fù)制文件一樣快。
關(guān)于傳輸表空間有一些規(guī)則,即:
·源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)必須運(yùn)行在相同的平臺(tái)上。
·源數(shù)據(jù)庫(kù)與目標(biāo)數(shù)據(jù)庫(kù)必須使用相同的字符集。
·源數(shù)據(jù)庫(kù)與目標(biāo)數(shù)據(jù)庫(kù)一定要有相同大小的數(shù)據(jù)塊(9i已經(jīng)不用)
·目標(biāo)數(shù)據(jù)庫(kù)不能有與遷移表空間同名的表空間
·SYS的對(duì)象不能遷移
·必須傳輸自包含的對(duì)象集
·有一些對(duì)象,如物化視圖,基于函數(shù)的索引等不能被傳輸
可以用以下的方法來(lái)檢測(cè)一個(gè)表空間或一套表空間是否符合傳輸標(biāo)準(zhǔn):
exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);
select * from sys.transport_set_violation;
如果沒(méi)有行選擇,表示該表空間只包含表數(shù)據(jù),并且是自包含的。對(duì)于有些非自包含的表空間,如數(shù)據(jù)表空間和索引表空間,可以一起傳輸。
以下為簡(jiǎn)要使用步驟,如果想?yún)⒖荚敿?xì)使用方法,也可以參考ORACLE聯(lián)機(jī)幫助。
a.設(shè)置表空間為只讀(假定表空間名字為APP_Data 和APP_Index)
? ?alter tablespace app_data read only;
? ?alter tablespace app_index read only;
b.發(fā)出EXP命令
? ?SQL>host exp userid=”””sys/password as sysdba”””??
transport_tablespace=y tablespace=(app_data, app_index)
??以上需要注意的是
·為了在SQL中執(zhí)行EXP,USERID必須用三個(gè)引號(hào),在UNIX中也必須注意避免“/”的使用
·在816和以后,必須使用sysdba才能操作
·這個(gè)命令在SQL中必須放置在一行(這里是因?yàn)轱@示問(wèn)題放在了兩行)
? ? c.拷貝數(shù)據(jù)文件到另一個(gè)地點(diǎn),即目標(biāo)數(shù)據(jù)庫(kù)
? ???可以是cp(unix)或copy(windows)或通過(guò)ftp傳輸文件(一定要在bin方式)
? ? d.把本地的表空間設(shè)置為讀寫(xiě)
? ? e.在目標(biāo)數(shù)據(jù)庫(kù)附加該數(shù)據(jù)文件
imp file=expdat.dmp userid=”””sys/password as sysdba”””
? ?? ?transport_tablespace=y
? ?? ?“datafile=(c:\temp\app_data,c:\temp\app_index)”
? ?f.設(shè)置目標(biāo)數(shù)據(jù)庫(kù)表空間為讀寫(xiě)
alter tablespace app_data read write;
? ???alter tablespace app_index read write;
iii、導(dǎo)出/導(dǎo)入與字符集
明白ORACLE的多國(guó)語(yǔ)言設(shè)置,ORACLE多國(guó)語(yǔ)言設(shè)置是為了支持世界范圍的語(yǔ)言與字符集,一般對(duì)語(yǔ)言提示,貨幣形式,排序方式和CHAR,VARCHAR2,CLOB,LONG字段的數(shù)據(jù)的顯示等有效。ORACLE的多國(guó)語(yǔ)言設(shè)置最主要的兩個(gè)特性就是國(guó)家語(yǔ)言設(shè)置與字符集設(shè)置,國(guó)家語(yǔ)言設(shè)置決定了界面或提示使用的語(yǔ)言種類(lèi),字符集決定了數(shù)據(jù)庫(kù)保存與字符集有關(guān)數(shù)據(jù)(如文本)時(shí)候的編碼規(guī)則。正如剛才上面的一個(gè)小例子,環(huán)境變量NLS_LANG的不同,導(dǎo)致EXP幫助發(fā)生變化,這就是多國(guó)語(yǔ)言設(shè)置的作用(NLS_LANG包含國(guó)家語(yǔ)言設(shè)置與字符集設(shè)置,這里起作用的是國(guó)家語(yǔ)言設(shè)置,而不是字符集)。
ORACLE字符集設(shè)定,分為數(shù)據(jù)庫(kù)字符集和客戶(hù)端字符集環(huán)境設(shè)置。在數(shù)據(jù)庫(kù)端,字符集在創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候設(shè)定,并保存在數(shù)據(jù)庫(kù)props$表中,對(duì)于8i以上產(chǎn)品,已經(jīng)可以采用“Alter database character set 字符集”來(lái)修改數(shù)據(jù)庫(kù)的字符集,但也僅僅是從子集到超集,不要通過(guò)update props$來(lái)修改字符集,如果是不支持的轉(zhuǎn)換,可能會(huì)失去所有與字符集有關(guān)的數(shù)據(jù),就是支持的轉(zhuǎn)換,也可能導(dǎo)致數(shù)據(jù)庫(kù)的不正常工作。字符集分為單字節(jié)字符集與多字節(jié)字符集,US7ASCII就是典型的單字節(jié)字符集,在這種字符集中l(wèi)ength=lengthb,而ZHS16GBK就是常用的雙字節(jié)字符集,在這里lengthb=2*length。
在客戶(hù)端的字符集環(huán)境比較簡(jiǎn)單,主要就是環(huán)境變量或注冊(cè)表項(xiàng)NLS_LANG,注意NLS_LANG的優(yōu)先級(jí)別為:參數(shù)文件à注冊(cè)表à環(huán)境變量àalter session。NLS_LANG的組成為“國(guó)家語(yǔ)言設(shè)置.字符集”,如nls_lang=simplified chinese_china.zhs16gbk。客戶(hù)端的字符集最好與數(shù)據(jù)庫(kù)端一樣(國(guó)家語(yǔ)言設(shè)置可以不一樣,如zhs16gbk的字符集,客戶(hù)端可以是nls_lang =simplified chinese_china.zhs16gbk或Ameircan_America.zhs16gbk,都不影響數(shù)據(jù)庫(kù)字符的正常顯示),如果字符集不一樣,而且字符集的轉(zhuǎn)換也不兼容,那么客戶(hù)端的數(shù)據(jù)顯示與導(dǎo)出/導(dǎo)入的與字符集有關(guān)的數(shù)據(jù)將都是亂碼。
使用一點(diǎn)點(diǎn)技巧,就可以使導(dǎo)出/導(dǎo)入在不同的字符集的數(shù)據(jù)庫(kù)上轉(zhuǎn)換數(shù)據(jù)。這里需要一個(gè)2進(jìn)制文件編輯工具即可,如uedit32。用編輯方式打開(kāi)導(dǎo)出的dmp文件,獲取2、3字節(jié)的內(nèi)容,如00 01,先把它轉(zhuǎn)換為10進(jìn)制數(shù),為1,使用函數(shù)NLS_CHARSET_NAME即可獲得該字符集:
SQL> select nls_charset_name(1) from dual;
NLS_CHARSET_NAME(1)
-------------------
US7ASCII
可以知道該dmp文件的字符集為US7ASCII,如果需要把該dmp文件的字符集換成ZHS16GBK,則需要用NLS_CHARSET_ID獲取該字符集的編號(hào):
SQL> select nls_charset_id('zhs16gbk') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
? ?? ?? ?? ?? ?852
把852換成16進(jìn)制數(shù),為354,把2、3字節(jié)的00 01換成03 54,即完成了把該dmp文件字符集從us7ascii到zhs16gbk的轉(zhuǎn)化,這樣,再把該dmp文件導(dǎo)入到zhs16gbk字符集的數(shù)據(jù)庫(kù)就可以了。(注意,十進(jìn)制數(shù)與十六進(jìn)制之間的轉(zhuǎn)換,想明白其中的道理)
Iv、跨版本使用Exp/Imp
Exp/Imp很多時(shí)候,可以跨版本使用,如在版本7與版本8之間導(dǎo)出導(dǎo)入數(shù)據(jù),但這樣做必須選擇正確的版本,規(guī)則為:
? ?·總是使用IMP的版本匹配數(shù)據(jù)庫(kù)的版本,如果要導(dǎo)入到816,則使用816的導(dǎo)入工具。
? ?·總是使用EXP的版本匹配兩個(gè)數(shù)據(jù)庫(kù)中低的那個(gè)版本,如在815與816之間互導(dǎo),則使用815的EXP工具。
2、OS備份
操作系統(tǒng)備份有兩類(lèi),冷備份(Cold backup)與熱備份(Hot backup),操作系統(tǒng)備份與以上的邏輯備份有本質(zhì)的區(qū)別。邏輯備份提取數(shù)據(jù)庫(kù)的數(shù)據(jù)內(nèi)容,而不備份物理數(shù)據(jù)塊。而操作系統(tǒng)備份則是拷貝整個(gè)的數(shù)據(jù)文件。
i、冷備份
在文件級(jí)備份開(kāi)始前數(shù)據(jù)庫(kù)必須徹底關(guān)閉。關(guān)閉操作必須用帶有normal、immediate、transaction選項(xiàng)的shutdown來(lái)執(zhí)行。
數(shù)據(jù)庫(kù)使用的每個(gè)文件都被備份下來(lái),這些文件包括:
? ???☆所有數(shù)據(jù)文件
? ???☆所有控制文件
? ???☆所有聯(lián)機(jī)REDO LOG 文件
? ???☆I(lǐng)NIT.ORA文件(可選)
? ???作冷備份一般步驟是:
? ?? ???a.正常關(guān)閉要備份的實(shí)例(instance);
? ?? ???b.備份整個(gè)數(shù)據(jù)庫(kù)到一個(gè)目錄
c.啟動(dòng)數(shù)據(jù)庫(kù)
如
? ?? ?? ?? ? SVRMGRL>connect internal
? ?? ?? ?? ? SVRMGRL >shutdown immediate
? ?? ?? ?? ? SVRMGRL >! cp <file> <backup directory>
? ?? ?? ?? ? 或
? ?? ?? ?? ? SVRMGRL >!tar cvf /dev/rmt/0 /u01/oradata/prod
? ?? ?? ?? ? SVRMGRL >startup
? ? 注意:如果利用腳本對(duì)數(shù)據(jù)庫(kù)進(jìn)行冷備份,必須對(duì)關(guān)閉數(shù)據(jù)庫(kù)的命令進(jìn)行邏輯檢查,如果發(fā)生關(guān)閉數(shù)據(jù)庫(kù)的命令不能正常執(zhí)行而導(dǎo)致數(shù)據(jù)庫(kù)沒(méi)有正常關(guān)閉,那么,所有的冷備份將回是無(wú)效的。
ii、熱備份
熱備份是當(dāng)數(shù)據(jù)庫(kù)打開(kāi)并對(duì)用戶(hù)有效是的OS級(jí)的數(shù)據(jù)備份。熱備份只能用于ARCHIVELOG方式的數(shù)據(jù)庫(kù)。在數(shù)據(jù)文件備份之前,對(duì)應(yīng)的表空間必須通過(guò)使用ALTER TABLESPACE …… BEGIN BACKUP以備份方式放置。然后組成表空間的數(shù)據(jù)文件可以使用類(lèi)似冷備份的操作系統(tǒng)命令進(jìn)行拷貝。在數(shù)據(jù)文件用操作系統(tǒng)命令拷貝后,應(yīng)使用ALTER TABLESPACE …… END BACKUP命令使表空間脫離熱備份方式。
熱備份沒(méi)有必要備份聯(lián)機(jī)日志,但必須是歸檔狀態(tài),在實(shí)例恢復(fù)的時(shí)候,可能需要用到歸檔日志。當(dāng)前聯(lián)機(jī)日志一定要保護(hù)好或是處于鏡相狀態(tài),當(dāng)前聯(lián)機(jī)日志的損壞,對(duì)于數(shù)據(jù)庫(kù)的損壞是巨大的,只能以數(shù)據(jù)的丟失來(lái)進(jìn)行數(shù)據(jù)庫(kù)的恢復(fù)工作。
對(duì)于臨時(shí)表空間,存放的是臨時(shí)信息,在熱備份是也可以考慮不用備份,如果臨時(shí)文件發(fā)生故障,可以刪除該數(shù)據(jù)文件與表空間,重建一個(gè)臨時(shí)表空間。
熱備份的優(yōu)點(diǎn)是顯而易見(jiàn)的
---- a.可在表空間或數(shù)據(jù)文件級(jí)備份,備份時(shí)間短。??
---- b.備份時(shí)數(shù)據(jù)庫(kù)仍可使用。??
---- c.可達(dá)到秒級(jí)恢復(fù)(恢復(fù)到某一時(shí)間點(diǎn)上)。??
---- d.可對(duì)幾乎所有數(shù)據(jù)庫(kù)實(shí)體作恢復(fù)。??
---- e.恢復(fù)是快速的,在大多數(shù)情況下在數(shù)據(jù)庫(kù)仍工作時(shí)恢復(fù)。
操作系統(tǒng)作熱備份的一般步驟為:
①連接數(shù)據(jù)庫(kù)
SVRMGRL>connect internal;
②將需要備份的表空間(如User)設(shè)置為備份方式
SVRMGRL>Alter tablespace User begin backup;
③拷貝數(shù)據(jù)文件
SVRMGRL>!cp /u01/oradata/prod/user01.ora /backup/prod/user01.ora
Or
$cp cp /u01/oradata/prod/user01.ora /backup/prod/user01.ora
④在數(shù)據(jù)文件拷貝完成后,將表空間拖體備份方式
SVRMGRL>Alter tablespace User end backup;
⑤對(duì)所有需要備份的表空間重復(fù)2,3,4
⑥使用如下的命令備份控制文件ALTER DATABSE …… BACKUP CONTROLFILE
如備份成二進(jìn)制文件
alter database backup controlfile to ‘new fielname’;
備份成文本文件
alter database backup controlfile to trace;
因?yàn)闊醾浞莸臅r(shí)候,用戶(hù)還在操作數(shù)據(jù)庫(kù),所以,最好是每個(gè)表空間處于備份狀態(tài)的時(shí)間最短,這樣就要求一個(gè)表空間一個(gè)表空間的備份,不要一起使表空間處于備份狀態(tài)而同時(shí)拷貝數(shù)據(jù)文件。
? ? 注意:如果在熱備份的時(shí)候如果數(shù)據(jù)庫(kù)中斷(如斷電),那么在重新啟動(dòng)數(shù)據(jù)庫(kù)的時(shí)候,數(shù)據(jù)庫(kù)將提示有數(shù)據(jù)文件需要恢復(fù),你需要把正在斷電時(shí)候的處于備份狀態(tài)的數(shù)據(jù)文件通過(guò)ALTER TABLESPACE …… END BACKUP結(jié)束備份方式。具體哪個(gè)數(shù)據(jù)文件或表空間處于備份狀態(tài),可以通過(guò)v$backup與v$datafile來(lái)獲得。
3、RMAN(備份與恢復(fù)管理器)
i.使用RMAN進(jìn)行備份
Recovery manager(RMAN)是ORACLE提供的DBA工具,用語(yǔ)管理備份和恢復(fù)操作。RMAN只能用于ORACLE8或更高的版本中。它能夠備份整個(gè)數(shù)據(jù)庫(kù)或數(shù)據(jù)庫(kù)部件,其中包括表空間、數(shù)據(jù)文件,控制文件和歸檔文件。RMAN可以按要求存取和執(zhí)行備份和恢復(fù)。
RMAN備份有如下優(yōu)點(diǎn)
☆支持在線(xiàn)熱備份
☆支持多級(jí)增量備份
☆支持并行備份、恢復(fù)
☆減少所需要備份量
☆備份、恢復(fù)使用簡(jiǎn)單
? ? 重要的是,使用恢復(fù)管理器允許您進(jìn)行增量數(shù)據(jù)塊級(jí)的備份(這個(gè)與導(dǎo)出/導(dǎo)入的增量截然不同)。增量RMAN備份是時(shí)間和空間有效的,因?yàn)樗麄冎粋浞葑陨洗蝹浞菀詠?lái)有變化的那些數(shù)據(jù)塊。另一個(gè)空間有效的RMAN特性是它只備份數(shù)據(jù)文件中使用的數(shù)據(jù)塊,忽略空的,未用的數(shù)據(jù)塊,這個(gè)對(duì)于預(yù)分配空間的表空間有很大的好處。
? ?從9i開(kāi)始,還增加了RMAN的數(shù)據(jù)塊級(jí)別的恢復(fù),可以進(jìn)一步減少數(shù)據(jù)庫(kù)恢復(fù)時(shí)間。
RMAN支持以下不同類(lèi)型的備份
FULL? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???數(shù)據(jù)庫(kù)全備份,包括所有的數(shù)據(jù)塊
INCREMENTAL? ?? ?? ?? ?? ?? ?? ???增量備份,只備份自上次增量備份以來(lái)修改過(guò)的數(shù)據(jù)塊。需要一個(gè)0級(jí)的增量作為增量的基礎(chǔ),可以支持5級(jí)增量。
OPEN? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?在數(shù)據(jù)庫(kù)打開(kāi)的時(shí)候使用
CLOSED? ?? ?? ?? ?? ?? ?? ?? ?? ???在數(shù)據(jù)庫(kù)安裝(MOUNT)但不打開(kāi)的時(shí)候備份,關(guān)閉備份可以是CONSISTENT或IN CONSISTENT類(lèi)型的。
CONSISTENT? ?? ?? ?? ?? ?? ?? ?? ? 在數(shù)據(jù)庫(kù)安裝,單不打開(kāi),并且在安裝之前數(shù)據(jù)庫(kù)被徹底關(guān)閉(而不是被破壞或異常退出)時(shí)使用。CONSISTENT備份可以簡(jiǎn)單的進(jìn)行復(fù)原(RESTORE)而不是恢復(fù)(RECOVER)
INCONSISTENT? ?? ?? ?? ?? ?? ?? ?在數(shù)據(jù)庫(kù)打開(kāi)或安裝(但不打開(kāi))時(shí)使用。在該數(shù)據(jù)庫(kù)正常關(guān)閉或崩潰后,INCONSISTENT備份需要恢復(fù)。
理解BACKUP,RESTORE,RECOVER命令,這是RMAN最基本的三個(gè)命令,可以進(jìn)行數(shù)據(jù)庫(kù)的備份,復(fù)原以及恢復(fù)操作。
? ? 理解恢復(fù)目錄,RMAN可以在沒(méi)有恢復(fù)目錄(NOCATALOG)下運(yùn)行,這個(gè)時(shí)候備份信息保存在控制文件。保存在控制文件的備份信息是很危險(xiǎn)的,如果控制文件的破壞將導(dǎo)致備份信息的丟失與恢復(fù)的失敗,而且,沒(méi)有恢復(fù)目錄,很多RMAN的命令將不被支持。所以對(duì)于重要的數(shù)據(jù)庫(kù),建議創(chuàng)建恢復(fù)目錄,恢復(fù)目錄也是一個(gè)數(shù)據(jù)庫(kù),只不過(guò)這個(gè)數(shù)據(jù)庫(kù)用來(lái)保存?zhèn)浞菪畔ⅲ粋€(gè)恢復(fù)目錄可以用來(lái)備份多個(gè)數(shù)據(jù)庫(kù)。
? ?創(chuàng)建RMAN目錄,以下步驟說(shuō)明了在一個(gè)數(shù)據(jù)庫(kù)中盡力RMAN目錄的過(guò)程。
a.為目錄創(chuàng)建一個(gè)單獨(dú)的表空間
SQL>Create tablespace tools datafile ‘fielname’ size 50m;
b.創(chuàng)建RMAN用戶(hù)
SQL>Create user RMAN identified by RMAN default tablespace tools temporary tablespace temp;
c.給RMAN授予權(quán)限
SQL>Grant connect , resource , recovery_catalog_owner to rman;
d.打開(kāi)RMAN
$>RMAN
e.連接數(shù)據(jù)庫(kù)
RMAN>connect catalog rman/rman
f.創(chuàng)建恢復(fù)目錄
RMAN>Create catalog tablespace rman
注冊(cè)目標(biāo)數(shù)據(jù)庫(kù),恢復(fù)目錄創(chuàng)建成功后,就可以注冊(cè)目標(biāo)數(shù)據(jù)庫(kù)了,目標(biāo)數(shù)據(jù)庫(kù)就是需要備份的數(shù)據(jù)庫(kù),一個(gè)恢復(fù)目錄可以注冊(cè)多個(gè)目標(biāo)數(shù)據(jù)庫(kù),注冊(cè)目標(biāo)數(shù)據(jù)庫(kù)的命令為:
? ???$>RMAN target internal/password catalog rman/rman@rcdb;
RMAN>Register database;
數(shù)據(jù)庫(kù)注冊(cè)完成,就可以用RMAN來(lái)進(jìn)行備份了,更多命令請(qǐng)參考ORACLE聯(lián)機(jī)手冊(cè)或《ORACLE8i備份與恢復(fù)手冊(cè)》。
RMAN使用腳本來(lái)備份數(shù)據(jù)庫(kù),以下是RMAN進(jìn)行備份的幾個(gè)例子。
a.備份整個(gè)數(shù)據(jù)庫(kù)
backup full tag ‘basicdb’ format ‘/bak/oradata/full_%u_%s_%p’ database;
b.備份一個(gè)表空間
? ?? ? backup tag ‘tsuser’ format ‘/bak/oradata/tsuser_%u_%s_%p’ tablespace users;
c.備份歸檔日志
backup tag ‘a(chǎn)log’ format ‘/bak/archivebak/arcbak_%u_%s_%p’ archivelog all delete input;
ii.維護(hù)RMAN
??RMAN的維護(hù)主要分為幾個(gè)方面
1、??查看RMAN的信息
? ?? ?? ?? ?檢查現(xiàn)有備份
? ?? ?? ?? ???RMAN>list backup
? ?? ?? ?? ?列出過(guò)期備份
? ?? ?? ?? ???RMAN>report obsolete
? ?? ?? ?? ?刪除過(guò)期的備份
? ?? ?? ?? ???RMAN>allocate channel for maintenance type disk;
? ?? ?? ?? ???RMAN>change backupset id delete;
? ?? ?? ?? ???RMAN>release channel;
2、??同步或重置RMAN
如果目標(biāo)數(shù)據(jù)庫(kù)物理對(duì)象發(fā)生了變化,如添加了一個(gè)數(shù)據(jù)文件,需要用如下命令同步:
RMAN>resync catalog;
如果目標(biāo)數(shù)據(jù)庫(kù)reset了數(shù)據(jù)庫(kù),需要用如下命令同步
RMAN>reset database;
當(dāng)手工刪除了數(shù)據(jù)庫(kù)的歸檔文件后,要執(zhí)行以下腳本同步
RMAN>allocate channel for maintenance type disk;
RMAN> change archivelog all crosscheck;
RMAN>release channel;
? ?? ?? ?? ?當(dāng)手工刪除了數(shù)據(jù)庫(kù)的RMAN備份后,要執(zhí)行以下腳本來(lái)同步
? ?? ?? ?? ?? ? RMAN>allocate channel for maintenance type disk;
RMAN>crosscheck backup;
RMAN>delete expired backup;
RMAN>release channel;
四、定制恰當(dāng)?shù)膫浞莶呗?
i.定制正確的策略
正確的備份策略不僅能保證數(shù)據(jù)庫(kù)服務(wù)器的24*7的高性能的運(yùn)行,還能保證備份與恢復(fù)的快速性與可靠性。我們將以RMAN的多級(jí)增量備份作為一個(gè)備份策略的例子來(lái)討論。采用多級(jí)備份就是為了減少每天備份所需要的時(shí)間,而又保證系統(tǒng)有良好的恢復(fù)性。恢復(fù)時(shí)間與備份時(shí)間要有一個(gè)權(quán)衡。比如只要進(jìn)行一個(gè)數(shù)據(jù)庫(kù)的全備份,然后就只備份歸檔也可以保證能把數(shù)據(jù)庫(kù)恢復(fù)到最新的狀態(tài),但是這樣的恢復(fù)時(shí)間將是不可容忍的。多級(jí)備份也正是? ???為了解決這種問(wèn)題,以下就是一個(gè)多級(jí)備份的例子:
每半年做一個(gè)數(shù)據(jù)庫(kù)的全備份(包括所有的數(shù)據(jù)和只讀表空間)
每一個(gè)月做一次零級(jí)備份(不包含只讀表空間)
每個(gè)星期做一次一級(jí)備份
每天做一次二級(jí)備份
任何數(shù)據(jù)庫(kù)的更改需要重新同步CATALOG目錄并重新備份(如添加數(shù)據(jù)文件)或重新備份(如修改表空間為只讀)
每次備份后都可以備份歸檔日志或定期備份歸檔日志。
如果可能,可以直接備份到磁帶上。
數(shù)據(jù)庫(kù)全備份的腳本
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 ‘a(chǎn)lter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’??
archivelog all delete input;? ?#備份歸檔可選,可以單獨(dú)定期備份
release channel c1;
release channel c2;
release channel c3;
}
零級(jí)備份的腳本
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 ‘a(chǎn)lter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’??
archivelog all delete input;? ?#備份歸檔可選,可以單獨(dú)定期備份
release channel c1;
release channel c2;
release channel c3;
}
同理,我們可以得到一級(jí)備份,二級(jí)備份的腳本,如一級(jí)備份的腳本
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 ‘a(chǎn)lter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’??
archivelog all delete input;? ?#備份歸檔可選,可以單獨(dú)定期備份
release channel c1;
release channel c2;
release channel c3;
}
如果按照以上備份策略,則每天的所需要備份的數(shù)據(jù)量只有一天的改變量。而做恢復(fù)時(shí)最多要恢復(fù)當(dāng)月的一個(gè)零級(jí)備份+三個(gè)一級(jí)備份+6個(gè)二級(jí)備份+當(dāng)天的歸檔文件。如果不能接受這樣的恢復(fù)時(shí)間,可以減少零級(jí)備份之間的時(shí)間間隔。
? ???在每次備份后,原則上在該備份點(diǎn)之前的歸檔日志就可以刪除掉了,但是為了進(jìn)一步的安全以及日后需要(如使用LOGMNR查找所需信息),建議有條件的話(huà),歸檔日志保存一年,可以保存在磁帶等廉價(jià)存取設(shè)備上。
ii.與RMAN備份有關(guān)的優(yōu)化
備份操作主要是完成以下三個(gè)步驟
1、從磁盤(pán)上讀取數(shù)據(jù)
2、在內(nèi)存中處理數(shù)據(jù)塊
3、寫(xiě)入數(shù)據(jù)到磁盤(pán)或磁帶
以上的讀寫(xiě)操作可以同步或異步的完成,在同步I/O操作中,一個(gè)時(shí)間只允許有一個(gè)IO操作,但是在異步I/O操作中,一個(gè)時(shí)間允許有多個(gè)IO操作。因此,備份與恢復(fù)的調(diào)優(yōu)主要集中在以下幾個(gè)方面:
1、??提高同步或異步I/O操作能力
在支持異步操作的操作系統(tǒng)上,可以通過(guò)設(shè)置TAPE_AYSNCH_IO,DISK_ASYNCH_IO和BACKUP_TYPE_IO_SLAVES來(lái)支持異步操作,提高寫(xiě)的能力。
2、??提高磁盤(pán)讀能力
可以在backup命令后通過(guò)設(shè)置DISKRATIO來(lái)保證從多個(gè)磁盤(pán)上讀取數(shù)據(jù),保證連續(xù)的數(shù)據(jù)流。
3、??正確設(shè)置緩沖區(qū)與參數(shù)值
設(shè)置LARGE_POOL_SIZE,使備份可以使用連續(xù)的緩沖池,通過(guò)設(shè)置DB_FIL_DIRECT_IO_COUNT可以提高緩沖區(qū)的利用。如果使用磁帶備份,還可以設(shè)置BACKUP_TYPE_IO_SLAVES來(lái)提高磁帶的寫(xiě)能力。
4、??采用并行備份
開(kāi)辟多個(gè)通道,可以實(shí)現(xiàn)并行備份與恢復(fù)
??
iii.備份RMAN數(shù)據(jù)庫(kù)
RMAN自己的數(shù)據(jù)庫(kù)也需要備份,但是本身很小,而且不是經(jīng)常發(fā)生變化,所以在每次RMAN備份完成后,都可以用如下腳本對(duì)RMAN數(shù)據(jù)庫(kù)備份。
EXP pafile =exprman.sql
exprman.sql為
USERID=RMAN/RMAN
BUFFER=32768
OWNER=RMAN
FILE=RMAN.DMP
ROWS=Y
GRANTS=Y
COMPRESS=Y
CONSISTENT=Y
iv.使自動(dòng)備份數(shù)據(jù)庫(kù)
自動(dòng)備份數(shù)據(jù)庫(kù)不外乎以下三種方式
? ???WINDOWS下的任務(wù)計(jì)劃(At命令)
? ???UNIX下的Crontab
? ???第三方工具如Viritas
在以上三種方式中Viritas屬于第三方工具,很多人可能都沒(méi)有接觸,主要說(shuō)一下windows的任務(wù)計(jì)劃與unix的cron
1、生成腳本文件,如backup.rcv
假定文件內(nèi)容如下:
$>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、生成執(zhí)行文件
在windows上生成backup_archive.bat,內(nèi)容包括
rman cmdfile = backup.rcv
在unix下生成 backup_archive.sh,內(nèi)容包括
/oracle/ramn/rman cmdfile = backup.rcv
??3、加入調(diào)度
在windows中用任務(wù)計(jì)劃向?qū)Ъ纯桑蚴褂胊t命令。
在unix中,在目標(biāo)機(jī)器上編寫(xiě)一個(gè)文件,用以啟動(dòng)自動(dòng)備份進(jìn)程。假定文件名為ORACLE,文件將放在/var/spool/cron/crontabs目錄下
$>cat oracle
0 23 * * 0 backup_archive.sh
#表示星期天23點(diǎn)對(duì)數(shù)據(jù)庫(kù)備份
0 12,18 * * * backup_archive.sh
? ???#表示每天12點(diǎn),18點(diǎn)備份
Crontab文件的每一行由六個(gè)域(minutes,hours,day of month,month,day of week,command)組成,域之間用空格或Tab分隔開(kāi)來(lái)
五、常見(jiàn)誤區(qū)
1、使用EXP/IMP備份
EXP/IMP不是一個(gè)良好的備份工具,在以后的發(fā)展之中,ORACLE對(duì)EXP/IMP用于備份的支持會(huì)越來(lái)越低。ORACLE只是把EXP/IMP當(dāng)作一個(gè)好的工具而不是備份工具,在對(duì)于大型數(shù)據(jù)庫(kù),如TB級(jí)數(shù)據(jù)庫(kù)或數(shù)據(jù)倉(cāng)庫(kù),EXP/IMP肯定會(huì)力不從心。
2、在應(yīng)用程序中備份數(shù)據(jù)庫(kù)
在論壇上,有很多這樣的要求,“我怎么在程序中備份與恢復(fù)數(shù)據(jù)庫(kù)?”。首先說(shuō),這個(gè)并不是不可以實(shí)現(xiàn),但是實(shí)現(xiàn)的過(guò)程會(huì)很復(fù)雜而且意外會(huì)很多。就我的感覺(jué),提出這樣問(wèn)題的人,首先一點(diǎn)就是對(duì)ORACLE或DBA的不了解,如果ORACLE可以這么輕松的實(shí)現(xiàn)備份與恢復(fù),那么我可以說(shuō),就不需要DBA了。
3、冷備份比熱備份更容易,效果會(huì)更好
有人認(rèn)為,冷備份是關(guān)閉數(shù)據(jù)庫(kù)進(jìn)行的一致性備份,肯定比熱備份要好,使用也容易,其實(shí)不盡然,在熱備份中,一樣可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)的全備份,而且不會(huì)影響到數(shù)據(jù)庫(kù)的運(yùn)行。建議所有的生產(chǎn)機(jī),都運(yùn)行在歸檔方式下,采用熱備份方式。
六、常見(jiàn)問(wèn)題
1、我導(dǎo)出的數(shù)據(jù)為什么不能導(dǎo)入,提示不支持的字符集轉(zhuǎn)換
答:參考上面的字符集原則,導(dǎo)出數(shù)據(jù)時(shí)客戶(hù)端與數(shù)據(jù)庫(kù)字符集一致,導(dǎo)入時(shí)修改為與目標(biāo)數(shù)據(jù)庫(kù)字符集一致。
2、我的歸檔日志越來(lái)越多,我什么時(shí)候可以刪除歸檔日志?
答:在每一次全備份(如OS全冷備份或全熱備份)或基于全備份的增量備份(如RMAN基于0級(jí)備份上的增量備份)后都可以刪除該備份點(diǎn)之前的歸檔日志,建議在磁帶上保留一年。
3、全備份時(shí)一定需要備份所有數(shù)據(jù)文件嗎?
答:不需要,起碼有兩類(lèi)數(shù)據(jù)文件可以不備份,一類(lèi)就是臨時(shí)數(shù)據(jù)文件,如果丟失,可以刪除后重建;一類(lèi)是只讀表空間數(shù)據(jù)文件,如果上次備份以來(lái),沒(méi)有修改過(guò)表空間的只讀屬性,就可以不需要備份。
4、聯(lián)機(jī)日志需要備份嗎?
答:如果是歸檔方式熱備份,就沒(méi)有必要備份聯(lián)機(jī)日志。但是對(duì)于冷備份,可以備份聯(lián)機(jī)日志,特別是不歸檔狀態(tài)。備份過(guò)聯(lián)機(jī)日志后的冷備份,因?yàn)閿?shù)據(jù)庫(kù)是一致的,可以恢復(fù)到該備份點(diǎn)。
七、小結(jié)
1、什么是數(shù)據(jù)庫(kù)備份,數(shù)據(jù)庫(kù)備份就是把數(shù)據(jù)庫(kù)復(fù)制到轉(zhuǎn)儲(chǔ)設(shè)備的過(guò)程。
? ?2、數(shù)據(jù)庫(kù)的運(yùn)行方式,可以分為歸檔方式和非歸檔方式,建議運(yùn)行在歸檔方式下運(yùn)行熱備份。
? ?3、了解了數(shù)據(jù)庫(kù)的備份方式,邏輯備份、冷備份、熱備份
? ?4、了解數(shù)據(jù)庫(kù)的備份工具,EXP/IMP執(zhí)行邏輯備份,OS腳本可以執(zhí)行冷備份或熱備份,RMAN也可以執(zhí)行冷備份或熱備份
? ?5、了解ORACLE的備份策略,并怎樣選擇最佳的備份策略
? ?6、知道怎么樣啟動(dòng)自動(dòng)備份,了解Windows的at命令與unix的cron進(jìn)程。
參考文獻(xiàn):
Expert One-on-one Oracle??[美] Thomas Kyte 著 清華大學(xué)出版社
Oracle 8i Web開(kāi)發(fā)指南 [美] Dan Hotka,et al. 著 清華大學(xué)出版社
Oracle 8i DBA Architecture & Administration and backup & Recovery Study Guide
??[美] Dong Stuns Biju Thomas著 電子工業(yè)出版社
Oracle 數(shù)據(jù)庫(kù)管理員技術(shù)指南 [美] Sumit Sarin著 機(jī)械工業(yè)出版社
摘自:http://www.oracle.com.cn/thread-896-1-1.html
