二十二樓Blog遷移 2006-08

          數據庫: oracle數據庫增量備份的測試

          oracle數據庫增量備份的測試

          引自『http://publishblog.blogchina.com/blog/tb.b?diaryID=3010247

          今天按如下文章進行了增量備份的測試,雖然增量備份效果不錯,但是總是感覺增量備份對于數據量大的數據庫未必具有可行性。理由是一個星期要做一次完全備份,這個完全數據備份在恢復的時間上跟差一個星期數據的完全備份基本上沒有太大區別。增量備份還要再次導入累計或者增量備份,比較麻煩。而且增量備份的數據文件較多,容易丟失,不如每天做完全一個備份簡單;還有增量備份中的“增量性備份”,是將所有自“累計性備份”導出數據以后發生修改的表里的數據再次全部導出,而系統里經常變化的表的數據量都非常大,影響導出速度慢;這跟全備份導出時間差異不大,并沒有縮短備份時間。從以上角度考慮,在現實中使用增量備份并不是很現實。

          ?當我們使用一個數據庫時,總希望數據庫的內容是可靠的、正確的,但由于計算機系統的故障(包括機器故障、介質故障、誤操作等),數據庫有時也可能遭到破壞,這時如何盡快恢復數據就成為當務之急。如果平時對數據庫做了備份,那么此時恢復數據就顯得很容易。由此可見,做好數據庫的備份是多么的重要,下面筆者就以ORACLE7為例,來講述一下數據庫的備份和恢復。ORACLE 數據庫有三種標準的備份方法,它們分別為導出/導入(EXPORT/IMPORT)、冷備份、熱備份。導出備份是一種邏輯備份,冷備份和熱備份是物理備份。

          ?

          一、導出/導入(Export/Import

          ?

          ??? 利用Export可將數據從數據庫中提取出來,利用Import則可將提取出來的數據送回Oracle數據庫中去。

          ?

          ??? 1. 簡單導出數據(Export)和導入數據(Import

          ?

          ??? Oracle支持三種類型的輸出:

          ?

          ??? 1)表方式(T方式),將指定表的數據導出。

          ?

          ??? 2)用戶方式(U方式),將指定用戶的所有對象及數據導出。

          ?

          ??? 3)全庫方式(Full方式),將數據庫中的所有對象導出。

          ?

          ??? 數據導出(Import)的過程是數據導入(Export)的逆過程,它們的數據流向不同。

          ?

          ??? 2. 增量導出/導入

          ?

          ??? 增量導出是一種常用的數據備份方法,它只能對整個數據庫來實施,并且必須作為SYSTEM來導出。在進行

          ?

          此種導出時,系統不要求回答任何問題。導出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為exp

          ?

          ort.dmp,必須在命令行中指出要用的文件名。

          ?

          ??? 增量導出包括三個類型:

          ?

          ??? 1)“完全”增量導出(Complete

          ?

          ??? 即備份整個數據庫,比如:

          ?

          ??? exp system/manager inctype=complete file=990702.dmp

          ?

          ??? 2“增量型”增量導出

          ?

          ??? 備份上一次備份后改變的數據。比如:

          ?

          ??? exp system/manager inctype=incremental file=990702.dmp

          ?

          ??? 3“累計型”增量導出(Cumulative

          ?

          ??? 累計型導出方式只是導出自上次“完全”導出之后數據庫中變化了的信息。比如:

          ?

          ??? exp system/manager inctype=cumulative file=990702.dmp

          ?

          ??? 數據庫管理員可以排定一個備份日程表,用數據導出的三個不同方式合理高效地完成。

          ?

          ??? 比如數據庫的備份任務可作如下安排:

          ?

          ??? 星期一:完全導出(A

          ?

          ??? 星期二:增量導出(B

          ?

          ??? 星期三:增量導出(C

          ?

          ??? 星期四:增量導出(D

          ?

          ??? 星期五:累計導出(E

          ?

          ??? 星期六:增量導出(F

          ?

          ??? 星期日:增量導出(G

          ?

          ??? 如果在下個星期一,數據庫遭到意外破壞,數據庫管理員可按以下步驟來恢復數據庫:

          ?

          ??? 第一步:用命令CREATE DATABASE重新生成數據庫結構;

          ?

          ??? 第二步:創建一個足夠大的附加回段。

          ?

          ??? 第三步:完全增量導入A

          ?

          ??? imp system./manager inctype= RECTORE FULL=Y FILE=A

          ?

          ??? 第四步:累計增量導入E

          ?

          ??? imp system/manager inctype= RECTORE FULL=Y FILE =E

          ?

          ??? 第五步:依次導入最近增量F、G

          ?

          ??? imp system/manager inctype=RESTORE FULL=Y FILE=F

          ??? imp system/manager inctype=RESTORE FULL=Y FILE=G

          如果不依次導入,也可以,但是不能少導入,否則,有新增加的表和記錄丟失

          zqbchina 發表于: 2006-08-12 00:18:58



          數據庫: Oracle數據庫字符集問題解析

          經常看到一些朋友問ORACLE字符集方面的問題,我想以迭代的方式來介紹一下。

          第一次迭代:掌握字符集方面的基本概念。
          有些朋友可能會認為這是多此一舉,但實際上正是由于對相關基本概念把握不清,才導致了諸多問題和疑問。
          首先是字符集的概念。
          我們知道,電子計算機最初是用來進行科學計算的(所以叫做“計算機”),但隨著技術的發展,還需要計算機進行其它方面的應用處理。這就要求計算機不僅能處理數值,還能處理諸如文字、特殊符號等其它信息,而計算機本身能直接處理的只有數值信息,所以就要求對這些文字、符號信息進行數值編碼,最初的字符集是我們都非常熟悉的ASCII,它是用7個二進制位來表示128個字符,而后來隨著不同國家、組織的需要,出現了許許多多的字符集,如表示西歐字符的ISO8859系列的字符集,表示漢字的GB2312-80、GBK等字符集。
          字符集的實質就是對一組特定的符號,分別賦予不同的數值編碼,以便于計算機的處理。
          字符集之間的轉換。字符集多了,就會帶來一個問題,比如一個字符,在某一字符集中被編碼為一個數值,而在另一個字符集中被編碼為另一個數值,比如我來創造兩個字符集demo_charset1與demo_charset2,在demo_charset1中,我規定了三個符號的編碼為:A(0001),B(0010),?(1111);而在demo_charset2中,我也規定了三個符號的編碼為:A(1001),C(1011),?(1111),這時我接到一個任務,要編寫一個程序,負責在demo_charset1與demo_charset2之間進行轉換。由于知道兩個字符集的編碼規則,對于demo_charset1中的0001,在轉換為demo_charset2時,要將其編碼改為1001;對于demo_charset1中的1111,轉換為demo_charset2時,其數值不變;而對于demo_charset1中的0010,其對應的字符為B,但在demo_charset2沒有對應的字符,所以從理論上無法轉換,對于所有這類無法轉換的情況,我們可以將它們統一轉換為目標字符集中的一個特殊字符(稱為“替換字符”),比如在這里我們可以將?作為替換字符,所以B就轉換為了?,出現了信息的丟失;同樣道理,將demo_charset2的C字符轉換到demo_charset1時,也會出現信息丟失。
          所以說,在字符集轉換過程中,如果源字符集中的某個字符在目標字符集中沒有定義,將會出現信息丟失。
          數據庫字符集的選擇。
          我們在創建數據庫時,需要考慮的一個問題就是選擇什么字符集與國家字符集(通過create database中的CHARACTER SET與NATIONAL CHARACTER SET子句指定)。考慮這個問題,我們必須要清楚數據庫中都需要存儲什么數據,如果只需要存儲英文信息,那么選擇US7ASCII作為字符集就可以;但是如果要存儲中文,那么我們就需要選擇能夠支持中文的字符集(如ZHS16GBK);如果需要存儲多國語言文字,那就要選擇UTF8了。
          數據庫字符集的確定,實際上說明這個數據庫所能處理的字符的集合及其編碼方式,由于字符集選定后再進行更改會有諸多的限制,所以在數據庫創建時一定要考慮清楚后再選擇。
          而我們許多朋友在創建數據庫時,不考慮清楚,往往選擇一個默認的字符集,如WE8ISO8859P1或US7ASCII,而這兩個字符集都沒有漢字編碼,所以用這種字符集存儲漢字信息從原則上說就是錯誤的。雖然在有些時候選用這種字符集好象也能正常使用,但它會給數據庫的使用與維護帶來一系列的麻煩,在后面的迭代過程中我們將深入分析。
          客戶端的字符集。
          有過一些Oracle使用經驗的朋友,大多會知道通過NLS_LANG來設置客戶端的情況,NLS_LANG由以下部分組成:NLS_LANG=<Language>_<Territory>.<Clients Characterset>,其中第三部分<Clients Characterset>的本意就是用來指明客戶端操作系統缺省使用的字符集。所以按正規的用法,NLS_LANG應該按照客戶端機器的實際情況進行配置,尤其對于字符集一項更是如此,這樣Oracle就能夠在最大程度上實現數據庫字符集與客戶端字符集的自動轉換(當然是如果需要轉換的話)。
          總結一下第一次迭代的重點:
          字符集:將特定的符號集編碼為計算機能夠處理的數值;
          字符集間的轉換:對于在源字符集與目標字符集都存在的符號,理論上轉換將不會產生信息丟失;而對于在源字符集中存在而在目標字符集中不存在的符號,理論上轉換將會產生信息丟失;
          數據庫字符集:選擇能夠包含所有將要存儲的信息符號的字符集;
          客戶端字符集設置:指明客戶端操作系統缺省使用的字符集。

          zqbchina 發表于: 2006-08-16 16:23:15

          posted on 2007-08-02 17:31 心硯 閱讀(398) 評論(0)  編輯  收藏 所屬分類: 生活

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          文章分類

          文章檔案

          Forum

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 广饶县| 西华县| 伊春市| 西平县| 邻水| 石景山区| 宜都市| 新平| 平遥县| 武胜县| 文水县| 西丰县| 利川市| 申扎县| 西安市| 武胜县| 岑巩县| 枝江市| 渑池县| 南乐县| 景德镇市| 石城县| 环江| 平南县| 鹰潭市| 太原市| 裕民县| 常宁市| 海兴县| 新泰市| 锡林浩特市| 佳木斯市| 蓝田县| 双辽市| 陆川县| 普格县| 宝鸡市| 武乡县| 屯留县| 喀喇沁旗| 卢湾区|