二十二樓Blog遷移 2006-08
數(shù)據(jù)庫: oracle數(shù)據(jù)庫增量備份的測試oracle數(shù)據(jù)庫增量備份的測試
引自『http://publishblog.blogchina.com/blog/tb.b?diaryID=3010247』今天按如下文章進行了增量備份的測試,雖然增量備份效果不錯,但是總是感覺增量備份對于數(shù)據(jù)量大的數(shù)據(jù)庫未必具有可行性。理由是一個星期要做一次完全備份,這個完全數(shù)據(jù)備份在恢復(fù)的時間上跟差一個星期數(shù)據(jù)的完全備份基本上沒有太大區(qū)別。增量備份還要再次導(dǎo)入累計或者增量備份,比較麻煩。而且增量備份的數(shù)據(jù)文件較多,容易丟失,不如每天做完全一個備份簡單;還有增量備份中的“增量性備份”,是將所有自“累計性備份”導(dǎo)出數(shù)據(jù)以后發(fā)生修改的表里的數(shù)據(jù)再次全部導(dǎo)出,而系統(tǒng)里經(jīng)常變化的表的數(shù)據(jù)量都非常大,影響導(dǎo)出速度慢;這跟全備份導(dǎo)出時間差異不大,并沒有縮短備份時間。從以上角度考慮,在現(xiàn)實中使用增量備份并不是很現(xiàn)實。
?當我們使用一個數(shù)據(jù)庫時,總希望數(shù)據(jù)庫的內(nèi)容是可靠的、正確的,但由于計算機系統(tǒng)的故障(包括機器故障、介質(zhì)故障、誤操作等),數(shù)據(jù)庫有時也可能遭到破壞,這時如何盡快恢復(fù)數(shù)據(jù)就成為當務(wù)之急。如果平時對數(shù)據(jù)庫做了備份,那么此時恢復(fù)數(shù)據(jù)就顯得很容易。由此可見,做好數(shù)據(jù)庫的備份是多么的重要,下面筆者就以ORACLE7為例,來講述一下數(shù)據(jù)庫的備份和恢復(fù)。ORACLE 數(shù)據(jù)庫有三種標準的備份方法,它們分別為導(dǎo)出/導(dǎo)入(EXPORT/IMPORT)、冷備份、熱備份。導(dǎo)出備份是一種邏輯備份,冷備份和熱備份是物理備份。
?
一、導(dǎo)出/導(dǎo)入(Export/Import)
?
??? 利用Export可將數(shù)據(jù)從數(shù)據(jù)庫中提取出來,利用Import則可將提取出來的數(shù)據(jù)送回Oracle數(shù)據(jù)庫中去。
?
??? 1. 簡單導(dǎo)出數(shù)據(jù)(Export)和導(dǎo)入數(shù)據(jù)(Import)
?
??? Oracle支持三種類型的輸出:
?
??? (1)表方式(T方式),將指定表的數(shù)據(jù)導(dǎo)出。
?
??? (2)用戶方式(U方式),將指定用戶的所有對象及數(shù)據(jù)導(dǎo)出。
?
??? (3)全庫方式(Full方式),將數(shù)據(jù)庫中的所有對象導(dǎo)出。
?
??? 數(shù)據(jù)導(dǎo)出(Import)的過程是數(shù)據(jù)導(dǎo)入(Export)的逆過程,它們的數(shù)據(jù)流向不同。
?
??? 2. 增量導(dǎo)出/導(dǎo)入
?
??? 增量導(dǎo)出是一種常用的數(shù)據(jù)備份方法,它只能對整個數(shù)據(jù)庫來實施,并且必須作為SYSTEM來導(dǎo)出。在進行
?
此種導(dǎo)出時,系統(tǒng)不要求回答任何問題。導(dǎo)出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為exp
?
ort.dmp,必須在命令行中指出要用的文件名。
?
??? 增量導(dǎo)出包括三個類型:
?
??? (1)“完全”增量導(dǎo)出(Complete)
?
??? 即備份整個數(shù)據(jù)庫,比如:
?
??? $exp system/manager inctype=complete file=990702.dmp
?
??? (2)“增量型”增量導(dǎo)出
?
??? 備份上一次備份后改變的數(shù)據(jù)。比如:
?
??? $exp system/manager inctype=incremental file=990702.dmp
?
??? (3)“累計型”增量導(dǎo)出(Cumulative)
?
??? 累計型導(dǎo)出方式只是導(dǎo)出自上次“完全”導(dǎo)出之后數(shù)據(jù)庫中變化了的信息。比如:
?
??? $exp system/manager inctype=cumulative file=990702.dmp
?
??? 數(shù)據(jù)庫管理員可以排定一個備份日程表,用數(shù)據(jù)導(dǎo)出的三個不同方式合理高效地完成。
?
??? 比如數(shù)據(jù)庫的備份任務(wù)可作如下安排:
?
??? 星期一:完全導(dǎo)出(A)
?
??? 星期二:增量導(dǎo)出(B)
?
??? 星期三:增量導(dǎo)出(C)
?
??? 星期四:增量導(dǎo)出(D)
?
??? 星期五:累計導(dǎo)出(E)
?
??? 星期六:增量導(dǎo)出(F)
?
??? 星期日:增量導(dǎo)出(G)
?
??? 如果在下個星期一,數(shù)據(jù)庫遭到意外破壞,數(shù)據(jù)庫管理員可按以下步驟來恢復(fù)數(shù)據(jù)庫:
?
??? 第一步:用命令CREATE DATABASE重新生成數(shù)據(jù)庫結(jié)構(gòu);
?
??? 第二步:創(chuàng)建一個足夠大的附加回段。
?
??? 第三步:完全增量導(dǎo)入A:
?
??? $imp system./manager inctype= RECTORE FULL=Y FILE=A
?
??? 第四步:累計增量導(dǎo)入E:
?
??? $imp system/manager inctype= RECTORE FULL=Y FILE =E
?
??? 第五步:依次導(dǎo)入最近增量F、G:
?
??? $imp system/manager inctype=RESTORE FULL=Y FILE=F
??? $imp system/manager inctype=RESTORE FULL=Y FILE=G
如果不依次導(dǎo)入,也可以,但是不能少導(dǎo)入,否則,有新增加的表和記錄丟失
zqbchina 發(fā)表于: 2006-08-12 00:18:58數(shù)據(jù)庫: Oracle數(shù)據(jù)庫字符集問題解析
經(jīng)常看到一些朋友問ORACLE字符集方面的問題,我想以迭代的方式來介紹一下。
第一次迭代:掌握字符集方面的基本概念。
有些朋友可能會認為這是多此一舉,但實際上正是由于對相關(guān)基本概念把握不清,才導(dǎo)致了諸多問題和疑問。
首先是字符集的概念。
我們知道,電子計算機最初是用來進行科學計算的(所以叫做“計算機”),但隨著技術(shù)的發(fā)展,還需要計算機進行其它方面的應(yīng)用處理。這就要求計算機不僅能處理數(shù)值,還能處理諸如文字、特殊符號等其它信息,而計算機本身能直接處理的只有數(shù)值信息,所以就要求對這些文字、符號信息進行數(shù)值編碼,最初的字符集是我們都非常熟悉的ASCII,它是用7個二進制位來表示128個字符,而后來隨著不同國家、組織的需要,出現(xiàn)了許許多多的字符集,如表示西歐字符的ISO8859系列的字符集,表示漢字的GB2312-80、GBK等字符集。
字符集的實質(zhì)就是對一組特定的符號,分別賦予不同的數(shù)值編碼,以便于計算機的處理。
字符集之間的轉(zhuǎn)換。字符集多了,就會帶來一個問題,比如一個字符,在某一字符集中被編碼為一個數(shù)值,而在另一個字符集中被編碼為另一個數(shù)值,比如我來創(chuàng)造兩個字符集demo_charset1與demo_charset2,在demo_charset1中,我規(guī)定了三個符號的編碼為:A(0001),B(0010),?(1111);而在demo_charset2中,我也規(guī)定了三個符號的編碼為:A(1001),C(1011),?(1111),這時我接到一個任務(wù),要編寫一個程序,負責在demo_charset1與demo_charset2之間進行轉(zhuǎn)換。由于知道兩個字符集的編碼規(guī)則,對于demo_charset1中的0001,在轉(zhuǎn)換為demo_charset2時,要將其編碼改為1001;對于demo_charset1中的1111,轉(zhuǎn)換為demo_charset2時,其數(shù)值不變;而對于demo_charset1中的0010,其對應(yīng)的字符為B,但在demo_charset2沒有對應(yīng)的字符,所以從理論上無法轉(zhuǎn)換,對于所有這類無法轉(zhuǎn)換的情況,我們可以將它們統(tǒng)一轉(zhuǎn)換為目標字符集中的一個特殊字符(稱為“替換字符”),比如在這里我們可以將?作為替換字符,所以B就轉(zhuǎn)換為了?,出現(xiàn)了信息的丟失;同樣道理,將demo_charset2的C字符轉(zhuǎn)換到demo_charset1時,也會出現(xiàn)信息丟失。
所以說,在字符集轉(zhuǎn)換過程中,如果源字符集中的某個字符在目標字符集中沒有定義,將會出現(xiàn)信息丟失。
數(shù)據(jù)庫字符集的選擇。
我們在創(chuàng)建數(shù)據(jù)庫時,需要考慮的一個問題就是選擇什么字符集與國家字符集(通過create database中的CHARACTER SET與NATIONAL CHARACTER SET子句指定)。考慮這個問題,我們必須要清楚數(shù)據(jù)庫中都需要存儲什么數(shù)據(jù),如果只需要存儲英文信息,那么選擇US7ASCII作為字符集就可以;但是如果要存儲中文,那么我們就需要選擇能夠支持中文的字符集(如ZHS16GBK);如果需要存儲多國語言文字,那就要選擇UTF8了。
數(shù)據(jù)庫字符集的確定,實際上說明這個數(shù)據(jù)庫所能處理的字符的集合及其編碼方式,由于字符集選定后再進行更改會有諸多的限制,所以在數(shù)據(jù)庫創(chuàng)建時一定要考慮清楚后再選擇。
而我們許多朋友在創(chuàng)建數(shù)據(jù)庫時,不考慮清楚,往往選擇一個默認的字符集,如WE8ISO8859P1或US7ASCII,而這兩個字符集都沒有漢字編碼,所以用這種字符集存儲漢字信息從原則上說就是錯誤的。雖然在有些時候選用這種字符集好象也能正常使用,但它會給數(shù)據(jù)庫的使用與維護帶來一系列的麻煩,在后面的迭代過程中我們將深入分析。
客戶端的字符集。
有過一些Oracle使用經(jīng)驗的朋友,大多會知道通過NLS_LANG來設(shè)置客戶端的情況,NLS_LANG由以下部分組成:NLS_LANG=<Language>_<Territory>.<Clients Characterset>,其中第三部分<Clients Characterset>的本意就是用來指明客戶端操作系統(tǒng)缺省使用的字符集。所以按正規(guī)的用法,NLS_LANG應(yīng)該按照客戶端機器的實際情況進行配置,尤其對于字符集一項更是如此,這樣Oracle就能夠在最大程度上實現(xiàn)數(shù)據(jù)庫字符集與客戶端字符集的自動轉(zhuǎn)換(當然是如果需要轉(zhuǎn)換的話)。
總結(jié)一下第一次迭代的重點:
字符集:將特定的符號集編碼為計算機能夠處理的數(shù)值;
字符集間的轉(zhuǎn)換:對于在源字符集與目標字符集都存在的符號,理論上轉(zhuǎn)換將不會產(chǎn)生信息丟失;而對于在源字符集中存在而在目標字符集中不存在的符號,理論上轉(zhuǎn)換將會產(chǎn)生信息丟失;
數(shù)據(jù)庫字符集:選擇能夠包含所有將要存儲的信息符號的字符集;
客戶端字符集設(shè)置:指明客戶端操作系統(tǒng)缺省使用的字符集。