Oracle數(shù)據(jù)庫在線備份相關(guān)原理描述
1 概述
文章主要是從Oracle數(shù)據(jù)庫的基本原理開始的,討論Oracle數(shù)據(jù)庫在線備份原理及利用這些相關(guān)原理作為Oracle數(shù)據(jù)庫的遠(yuǎn)程復(fù)制提供一種方法,也就是Oracle遠(yuǎn)程備份的實現(xiàn)。本文提供的遠(yuǎn)程備份實現(xiàn)的過程是從實踐中產(chǎn)生的。該過程只要稍加修改就可以運用到相應(yīng)的實際工作中。因此具有實踐的指導(dǎo)意義。以下涉及到的數(shù)據(jù)庫的內(nèi)容僅限于Oracle公司數(shù)據(jù)庫的范圍。
2 Oracle 工作機(jī)制
在討論Oracle在線備份之前,我們先作一些準(zhǔn)備工作。
2.1基本概念
由于我們討論的Oracle在線備份涉及到以下Oracle的幾個基本而且非常重要的概念。為了說明方便,下面我們對這幾個重要的概念作一些說明。
1)數(shù)據(jù)庫的表
表是數(shù)據(jù)庫中最基本而且是最重要的概念,表是數(shù)據(jù)庫用來存放數(shù)據(jù)的地方。應(yīng)用業(yè)務(wù)中的數(shù)據(jù)就是保存在數(shù)據(jù)庫的表中。
2)數(shù)據(jù)查詢語句
數(shù)據(jù)查詢語句主要是對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行查詢于瀏覽。也就是對數(shù)據(jù)庫中的表的記錄進(jìn)行查詢。在Oracle數(shù)據(jù)庫中,數(shù)據(jù)查詢的命令是:
SELECT
3)DML語句
在Oracle數(shù)據(jù)庫中,DML(DATA MANIPULATION LANGUAGE)語句,也就是數(shù)據(jù)操縱語言,指那些對Oracle數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行修改的語句。這種修改僅限于數(shù)據(jù)庫中的數(shù)據(jù),也就是表中的記錄。而不是數(shù)據(jù)庫中的對象。從后面可以看書,理解這一點非常重要。DML語句有以下幾類:
A)數(shù)據(jù)的增加
往數(shù)據(jù)庫中增加數(shù)據(jù)是DML語句一個功能,在數(shù)據(jù)庫中數(shù)據(jù)的增加表現(xiàn)為數(shù)據(jù)庫中表的記錄的增加。Oracle數(shù)據(jù)庫中增加記錄的命令是:
INSERT
B)數(shù)據(jù)的修改
數(shù)據(jù)庫中的數(shù)據(jù)并不是一成不變的,有時由于應(yīng)用或是業(yè)務(wù)要求的變化,可能需要修改數(shù)據(jù)庫中的數(shù)據(jù)。數(shù)據(jù)庫中數(shù)據(jù)的修改表現(xiàn)出來是對數(shù)據(jù)庫的表中的記錄進(jìn)行修改。DML語句可以用來對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行修改。Oracle數(shù)據(jù)庫中修改表中的記錄的語句是:
UPDATE
C)數(shù)據(jù)的刪除
數(shù)據(jù)庫中的數(shù)據(jù)不再需要時,要將其從數(shù)據(jù)庫中刪除。也就是把記錄從數(shù)據(jù)庫的表中刪除。Oracle數(shù)據(jù)庫刪除記錄的命令是:
DELETE
4)DDL語句
在Oracle數(shù)據(jù)庫中,對象的創(chuàng)建是由DDL語句完成。DDL (DATA DEFINITION LANGUAGE)語句一經(jīng)發(fā)布,則數(shù)據(jù)庫中將增加一個對象,如表,用戶等等。
2.2 Oracle對DML語句的處理
有了以上的一些基本概念,我們可以討論Oracle在線備份了。在此之前,我們首先來看Oracle對DML(DELETE、UPDATE、INSERT)語句的處理過程:(該系統(tǒng)的拓?fù)浣Y(jié)構(gòu)為CLIENT/SERVER模式)
從上圖可以看出,Oracle數(shù)據(jù)庫對DML語句的出來過程如下:
1) 用戶(CLIENT)將DML語句傳遞給服務(wù)器(SERVER)。(如圖,該DML語句是UPDATE)
2) SERVER進(jìn)程將需要的數(shù)據(jù)塊從數(shù)據(jù)文件讀到內(nèi)存區(qū)(SGA區(qū))的DATA BUFFER CACHE中,同時在該區(qū)中對數(shù)據(jù)進(jìn)行修改。
3) 將整個修改過程由內(nèi)存中的DATA BUFFER CACHE 區(qū)COPY到內(nèi)存區(qū)的REDO LOG BUFFER。這次COPY不但保存了數(shù)據(jù)庫修改后的值,而且保存數(shù)據(jù)庫修改前的值。
4) DML語句對數(shù)據(jù)庫的都會有Oracle的SERVER進(jìn)程記錄到Oracle的內(nèi)存結(jié)構(gòu)REDO LOG BUFFER中。因此,我們只要把所有REDO LOG BUFFER 中的信息記錄下來,那么我們就記錄了所有DML語句對數(shù)據(jù)庫的修改。這個紀(jì)錄過程由Oracle的另一個后臺進(jìn)程來完成。
該數(shù)據(jù)庫中有三組REDO LOG FILES,每組中有兩個成員,這兩個成員是相互鏡像的。Oracle 數(shù)據(jù)庫的后臺進(jìn)程寫滿***組之后,接著寫第二組,寫滿第二組之后寫向第三組。寫滿地三組之后Oracle地處處理依據(jù)Oracle運行方式不同而不同。
1. Oracle運行方式為非歸檔方式
在這種情況下,Oracle數(shù)據(jù)庫不會在任何處理接著寫向***組,將***組原有的數(shù)據(jù)覆蓋掉。因此REDO LOG FILES原有的數(shù)據(jù)不可用,故數(shù)據(jù)庫在這種情況下不可恢復(fù)。
數(shù)據(jù)庫每次寫向一組新的REDO LOG FILE 時都會為該組分配一個序號。這個序號是遞增,而且***的。并且可以按指定的方式REDO LOG FILE的文件名相關(guān)。這樣如果REDO LOG FILE 在相同的目錄下也不會同名。
2. Oracle 運行方式為歸檔方式
在這種情況下,Oracle數(shù)據(jù)庫接著寫向***組之前,將***組做一個備份。這個備份就是我們用來做恢復(fù)的依據(jù)。如圖:
歸檔的REDO LOG FILES (ARCHIVED LOG FILE)是對原REDO LOG FILE 的物理拷貝。這個拷貝是可由數(shù)據(jù)庫的后臺進(jìn)程ARCH自動完成的。(由于每一個REDO LOG FILE的名字中有一個***的序號,因此ARCHIVED LOG FILE的名字也有一個***序號。這個序號決定了做恢復(fù)時的使用ARCHIVED LOG FILE 順序。)
從上可知:
1. DML語句對數(shù)據(jù)庫的修改記錄在REDO LOG BUFFER 中
2. REDO LOG BUFFER中信息記錄在REDO LOG FILE中
3. REDO LOG FILE 中的信息記錄在ARCHIVED LOG FILES 中
因此,把所有的ARCHIVED LOG FILES 保存下來就保存所有對Oracle數(shù)據(jù)庫的修改。
用歸檔來考慮備份與恢復(fù)時,必須指出:
1. 如果發(fā)出的SQL語句指定了NOLOGGING等將對數(shù)據(jù)庫修改不記入REDOLOGFILE時,這些信息是不能恢復(fù)的。此時須借助于其它類型的備份
歸檔只記錄了對數(shù)據(jù)庫的DML語句修改,因此在做恢復(fù)時,必須有一個全備份做基礎(chǔ)。歸檔作用在這個全備份上,重演以前對Oracle數(shù)據(jù)庫的DML的修改來達(dá)到恢復(fù)的目的
【編輯推薦】