<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗,分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請與我聯(lián)系。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

    一、了解備份的重要性

      可以說,從計算機系統(tǒng)出世的那天起,就有了備份這個概念,計算機以其強大的速度處理能力,取代了很多人為的工作,但是,往往很多時候,它又是那么弱不禁風(fēng),主板上的芯片、主板電路、內(nèi)存電源等任何一項不能正常工作,都會導(dǎo)致計算機系統(tǒng)不能正常工作。當(dāng)然,這些損壞可以修復(fù),不會導(dǎo)致應(yīng)用和數(shù)據(jù)的損壞。但是,如果計算機的硬盤損壞,將會導(dǎo)致數(shù)據(jù)丟失,此時必須用備份恢復(fù)數(shù)據(jù)。

      其實,在我們的現(xiàn)實世界中,已經(jīng)就存在很多備份策略,如RAID技術(shù),雙機熱備,集群技術(shù)發(fā)展的不就是計算機系統(tǒng)的備份和高可用性嗎?有很多時候,系統(tǒng)的備份的確就能解決數(shù)據(jù)庫備份的問題,如磁盤介質(zhì)的損壞,往往從鏡相上面做簡單的恢復(fù),或簡單的切換機器就可以了。但是,上面所說的系統(tǒng)備份策略是從硬件的角度來考慮備份與恢復(fù)的問題,這是需要代價的。我們所能選擇備份策略的依據(jù)是:丟是數(shù)據(jù)的代價與確保數(shù)據(jù)不丟失的代價之比。還有的時候,硬件的備份有時根本滿足不了現(xiàn)實需要,假如你誤刪了一個表,但是你又想恢復(fù)的時候,數(shù)據(jù)庫的備份就變的重要了。ORACLE本身就提供了強大的備份與恢復(fù)策略,這里我們只討論ORACLE備份策略,以下的備份都是指ORACLE數(shù)據(jù)庫備份,恢復(fù)將放到下一講中。

      所謂備份,就是把數(shù)據(jù)庫復(fù)制到轉(zhuǎn)儲設(shè)備的過程。其中,轉(zhuǎn)儲設(shè)備是指用于放置數(shù)據(jù)庫拷貝的磁帶或磁盤。能夠進行什么樣的恢復(fù)依賴于有什么樣的備份。作為 DBA,有責(zé)任從以下三個方面維護數(shù)據(jù)庫的可恢復(fù)性:  
      ·使數(shù)據(jù)庫的失效次數(shù)減到最少,從而使數(shù)據(jù)庫保持最大的可用性;  
      ·當(dāng)數(shù)據(jù)庫不可避免地失效后,要使恢復(fù)時間減到最少,從而使恢復(fù)的效率達到最高;  
      ·當(dāng)數(shù)據(jù)庫失效后,要確保盡量少的數(shù)據(jù)丟失或根本不丟失,從而使數(shù)據(jù)具有最大的可恢復(fù)性。  

      災(zāi)難恢復(fù)的最重要的工作是設(shè)計充足頻率的硬盤備份過程。備份過程應(yīng)該滿足系統(tǒng)要求的可恢復(fù)性。例如,如果數(shù)據(jù)庫可有較長的關(guān)機時間,則可以每周進行一次冷備份,并歸檔重做日志,對于24*7的系統(tǒng),或許我們考慮的只能是熱備份。 如果每天都能備份當(dāng)然會很理想,但要考慮其現(xiàn)實性。企業(yè)都在想辦法降低維護成本,現(xiàn)實的方案才可能被采用。只要仔細(xì)計劃,并想辦法達到數(shù)據(jù)庫可用性的底線,花少量的錢進行成功的備份與恢復(fù)也是可能的。

      二、了解ORACLE的運行方式

      ORACLE數(shù)據(jù)庫有兩種運行方式:一是歸檔方式(ARCHIVELOG),歸檔方式的目的是當(dāng)數(shù)據(jù)庫發(fā)生故障時最大限度恢復(fù)數(shù)據(jù)庫,可以保證不丟失任何已提交的數(shù)據(jù);二是不歸檔方式(NOARCHIVELOG),只能恢復(fù)數(shù)據(jù)庫到最近的回收點(冷備份或是邏輯備份)。我們根據(jù)數(shù)據(jù)庫的高可用性和用戶可承受丟失的工作量的多少,對于生產(chǎn)數(shù)據(jù)庫,強烈要求采用為歸檔方式;那些正在開發(fā)和調(diào)試的數(shù)據(jù)庫可以采用不歸檔方式。  
       如何改變數(shù)據(jù)庫的運行方式,在創(chuàng)建數(shù)據(jù)庫時,作為創(chuàng)建數(shù)據(jù)庫的一部分,就決定了數(shù)據(jù)庫初始的存檔方式。一般情況下為NOARCHIVELOG方式。當(dāng)數(shù)據(jù)庫創(chuàng)建好以后,根據(jù)我們的需要把需要運行在歸檔方式的數(shù)據(jù)庫改成ARCHIVELOG方式。  

      1、改變不歸檔方式為為歸檔方式  

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

      b. 修改初試化參數(shù),使能自動存檔   修改(添加)初始化文件init[SID].ora參數(shù):  
               log_archive_start=true                      #啟動自動歸檔
               log_archive_format=ARC%T%S.arc #歸檔文件格式
                log_archive_dest=/arch12/arch        #歸檔路徑
    在8i中,可以最多有五個歸檔路徑,并可以歸檔到其它服務(wù)器,如備用數(shù)據(jù)庫(standby database)服務(wù)器

      c.啟動Instance到Mount狀態(tài),即加載數(shù)據(jù)庫但不打開數(shù)據(jù)庫:  
        $>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ù)庫的全冷備份,防止意外事件的發(fā)生。
    三、ORACLE備份的分類

      簡單的按照備份進行的方式,可以分為邏輯備份、冷備份(脫機備份)、熱備份(聯(lián)機備份),其實冷備份與熱備份又可以合稱為物理備份。按照備份的工具,可以分為EXP/IMP備份、OS拷貝、RMAN、第三方工具,如VERITAS 。以下我們將從多個角度來說明以上的各種備份方式

      1、EXP/IMP邏輯備份

      導(dǎo)入/導(dǎo)出是ORACLE幸存的最古老的兩個命令行工具了,其實我從來不認(rèn)為Exp/Imp是一種好的備份方式,正確的說法是Exp/Imp只能是一個好的轉(zhuǎn)儲工具,特別是在小型數(shù)據(jù)庫的轉(zhuǎn)儲,表空間的遷移,表的抽取,檢測邏輯和物理沖突等中有不小的功勞。當(dāng)然,我們也可以把它作為小型數(shù)據(jù)庫的物理備份后的一個邏輯輔助備份,也是不錯的建議。對于越來越大的數(shù)據(jù)庫,特別是TB級數(shù)據(jù)庫和越來越多數(shù)據(jù)倉庫的出現(xiàn),EXP/IMP越來越力不從心了,這個時候,數(shù)據(jù)庫的備份都轉(zhuǎn)向了RMAN和第三方工具。下面我們還是簡要介紹一下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.
      
      通過輸入 EXP 命令和用戶名/口令,您可以在用戶 / 口令之后的命令:
      實例: EXP SCOTT/TIGER
      或者,您也可以通過輸入跟有各種參數(shù)的 EXP 命令來控制“導(dǎo)出” 的運行方式。要指定參數(shù),您可以使用關(guān)鍵字:
      
      格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
      實例: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR) 或 TABLES=(T1: P1,T1: P2),如果 T1 是分區(qū)表USERID 必須是命令行中的第一個參數(shù)。關(guān)鍵字   說明(默認(rèn))        關(guān)鍵字    說明(默認(rèn))
    --------------------------------------------------------------------------
    USERID 用戶名/口令          FULL       導(dǎo)出整個文件 (N)
    BUFFER 數(shù)據(jù)緩沖區(qū)的大小       OWNER        所有者用戶名列表
    FILE     輸出文件 (EXPDAT.DMP) TABLES    表名列表
    COMPRESS 導(dǎo)入一個范圍 (Y) RECORDLENGTH   IO 記錄的長度
    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) 的進度
    FILESIZE 各轉(zhuǎn)儲文件的最大尺寸
    QUERY 選定導(dǎo)出表子集的子句
      
      下列關(guān)鍵字僅用于可傳輸?shù)谋砜臻gTRANSPORT_TABLESPACE 導(dǎo)出可傳輸?shù)谋砜臻g元數(shù)據(jù) (N) TABLESPACES 將傳輸?shù)谋砜臻g列表
    在沒有警告的情況下成功終止導(dǎo)出。
    C:\>

      幫助已經(jīng)很詳細(xì)的說明了參數(shù)的意義和使用方法,并列舉了幾個簡單的例子,注意的是,從8i開始,已經(jīng)開始支持?jǐn)?shù)據(jù)子集的方法,就是可以指定自己的Where條件,可以從表中導(dǎo)出一行或多行數(shù)據(jù)。注意上面的set nls_lang=simplified chinese_china.zhs16gbk,通過設(shè)置環(huán)境變量,可以讓exp的幫助以中文顯示,如果set nls_lang=American_america.字符集,那么你的幫助就是英文的了。增量和累計導(dǎo)出必須在全庫方式下才有效,而且,大多數(shù)情況下,增量和累計導(dǎo)出并沒有想象中的那么有效。ORACLE從9i開始,不再支持增量導(dǎo)出和累計導(dǎo)出。

      ii、表空間傳輸

      表空間傳輸是8i新增加的一種快速在數(shù)據(jù)庫間移動數(shù)據(jù)的一種辦法,是把一個數(shù)據(jù)庫上的格式數(shù)據(jù)文件附加到另外一個數(shù)據(jù)庫中,而不是把數(shù)據(jù)導(dǎo)出成Dmp文件,這在有些時候是非常管用的,因為傳輸表空間移動數(shù)據(jù)就象復(fù)制文件一樣快。關(guān)于傳輸表空間有一些規(guī)則,即:

      ·源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫必須運行在相同的平臺上。
      ·源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫必須使用相同的字符集。
      ·源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫一定要有相同大小的數(shù)據(jù)塊(9i已經(jīng)不用)
      ·目標(biāo)數(shù)據(jù)庫不能有與遷移表空間同名的表空間
      ·SYS的對象不能遷移
      ·必須傳輸自包含的對象集
      ·有一些對象,如物化視圖,基于函數(shù)的索引等不能被傳輸

      可以用以下的方法來檢測一個表空間或一套表空間是否符合傳輸標(biāo)準(zhǔn):
    exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);
    select * from sys.transport_set_violation;

      如果沒有行選擇,表示該表空間只包含表數(shù)據(jù),并且是自包含的。對于有些非自包含的表空間,如數(shù)據(jù)表空間和索引表空間,可以一起傳輸。以下為簡要使用步驟,如果想?yún)⒖荚敿?xì)使用方法,也可以參考ORACLE聯(lián)機幫助。

      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必須用三個引號,在UNIX中也必須注意避免“/”的使用
      ·在816和以后,必須使用sysdba才能操作
      ·這個命令在SQL中必須放置在一行(這里是因為顯示問題放在了兩行)

       c.拷貝數(shù)據(jù)文件到另一個地點,即目標(biāo)數(shù)據(jù)庫可以是cp(unix)或copy(windows)或通過ftp傳輸文件(一定要在bin方式)

      d.把本地的表空間設(shè)置為讀寫

      e.在目標(biāo)數(shù)據(jù)庫附加該數(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ù)庫表空間為讀寫
    alter tablespace app_data read write;
        alter tablespace app_index read write;

      iii、導(dǎo)出/導(dǎo)入與字符集

      明白ORACLE的多國語言設(shè)置,ORACLE多國語言設(shè)置是為了支持世界范圍的語言與字符集,一般對語言提示,貨幣形式,排序方式和CHAR,VARCHAR2,CLOB,LONG字段的數(shù)據(jù)的顯示等有效。ORACLE的多國語言設(shè)置最主要的兩個特性就是國家語言設(shè)置與字符集設(shè)置,國家語言設(shè)置決定了界面或提示使用的語言種類,字符集決定了數(shù)據(jù)庫保存與字符集有關(guān)數(shù)據(jù)(如文本)時候的編碼規(guī)則。正如剛才上面的一個小例子,環(huán)境變量NLS_LANG的不同,導(dǎo)致EXP幫助發(fā)生變化,這就是多國語言設(shè)置的作用(NLS_LANG包含國家語言設(shè)置與字符集設(shè)置,這里起作用的是國家語言設(shè)置,而不是字符集)。

      ORACLE字符集設(shè)定,分為數(shù)據(jù)庫字符集和客戶端字符集環(huán)境設(shè)置。在數(shù)據(jù)庫端,字符集在創(chuàng)建數(shù)據(jù)庫的時候設(shè)定,并保存在數(shù)據(jù)庫props$表中,對于8i以上產(chǎn)品,已經(jīng)可以采用“Alter database character set 字符集”來修改數(shù)據(jù)庫的字符集,但也僅僅是從子集到超集,不要通過update props$來修改字符集,如果是不支持的轉(zhuǎn)換,可能會失去所有與字符集有關(guān)的數(shù)據(jù),就是支持的轉(zhuǎn)換,也可能導(dǎo)致數(shù)據(jù)庫的不正常工作。字符集分為單字節(jié)字符集與多字節(jié)字符集,US7ASCII就是典型的單字節(jié)字符集,在這種字符集中l(wèi)ength=lengthb,而ZHS16GBK就是常用的雙字節(jié)字符集,在這里lengthb=2*length。

      在客戶端的字符集環(huán)境比較簡單,主要就是環(huán)境變量或注冊表項NLS_LANG,注意NLS_LANG的優(yōu)先級別為:參數(shù)文件à注冊表à環(huán)境變量àalter session。NLS_LANG的組成為“國家語言設(shè)置.字符集”,如nls_lang=simplified chinese_china.zhs16gbk。客戶端的字符集最好與數(shù)據(jù)庫端一樣(國家語言設(shè)置可以不一樣,如zhs16gbk的字符集,客戶端可以是nls_lang =simplified chinese_china.zhs16gbk或Ameircan_America.zhs16gbk,都不影響數(shù)據(jù)庫字符的正常顯示),如果字符集不一樣,而且字符集的轉(zhuǎn)換也不兼容,那么客戶端的數(shù)據(jù)顯示與導(dǎo)出/導(dǎo)入的與字符集有關(guān)的數(shù)據(jù)將都是亂碼。

      使用一點點技巧,就可以使導(dǎo)出/導(dǎo)入在不同的字符集的數(shù)據(jù)庫上轉(zhuǎn)換數(shù)據(jù)。這里需要一個2進制文件編輯工具即可,如uedit32。用編輯方式打開導(dǎo)出的dmp文件,獲取2、3字節(jié)的內(nèi)容,如00 01,先把它轉(zhuǎn)換為10進制數(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獲取該字符集的編號:
    SQL> select nls_charset_id('zhs16gbk') from dual;
    NLS_CHARSET_ID('ZHS16GBK')
    --------------------------
              852

      把852換成16進制數(shù),為354,把2、3字節(jié)的00 01換成03 54,即完成了把該dmp文件字符集從us7ascii到zhs16gbk的轉(zhuǎn)化,這樣,再把該dmp文件導(dǎo)入到zhs16gbk字符集的數(shù)據(jù)庫就可以了。(注意,十進制數(shù)與十六進制之間的轉(zhuǎn)換,想明白其中的道理)

      Iv、跨版本使用Exp/Imp

      Exp/Imp很多時候,可以跨版本使用,如在版本7與版本8之間導(dǎo)出導(dǎo)入數(shù)據(jù),但這樣做必須選擇正確的版本,規(guī)則為:
    ·總是使用IMP的版本匹配數(shù)據(jù)庫的版本,如果要導(dǎo)入到816,則使用816的導(dǎo)入工具。
    ·總是使用EXP的版本匹配兩個數(shù)據(jù)庫中低的那個版本,如在815與816之間互導(dǎo),則使用815的EXP工具。

      2、OS備份

      操作系統(tǒng)備份有兩類,冷備份(Cold backup)與熱備份(Hot backup),操作系統(tǒng)備份與以上的邏輯備份有本質(zhì)的區(qū)別。邏輯備份提取數(shù)據(jù)庫的數(shù)據(jù)內(nèi)容,而不備份物理數(shù)據(jù)塊。而操作系統(tǒng)備份則是拷貝整個的數(shù)據(jù)文件。

      i、冷備份

      在文件級備份開始前數(shù)據(jù)庫必須徹底關(guān)閉。關(guān)閉操作必須用帶有normal、immediate、transaction選項的shutdown來執(zhí)行。 數(shù)據(jù)庫使用的每個文件都被備份下來,這些文件包括:
        ☆所有數(shù)據(jù)文件
        ☆所有控制文件
        ☆所有聯(lián)機REDO LOG 文件
        ☆I(lǐng)NIT.ORA文件(可選)
        作冷備份一般步驟是:
           a.正常關(guān)閉要備份的實例(instance);
           b.備份整個數(shù)據(jù)庫到一個目錄
      c.啟動數(shù)據(jù)庫

             SVRMGRL>connect internal
             SVRMGRL >shutdown immediate
             SVRMGRL >! cp &lt;file> &lt;backup directory>
             或
             SVRMGRL >!tar cvf /dev/rmt/0 /u01/oradata/prod
             SVRMGRL >startup

      注意:如果利用腳本對數(shù)據(jù)庫進行冷備份,必須對關(guān)閉數(shù)據(jù)庫的命令進行邏輯檢查,如果發(fā)生關(guān)閉數(shù)據(jù)庫的命令不能正常執(zhí)行而導(dǎo)致數(shù)據(jù)庫沒有正常關(guān)閉,那么,所有的冷備份將回是無效的。

      ii、熱備份

      熱備份是當(dāng)數(shù)據(jù)庫打開并對用戶有效是的OS級的數(shù)據(jù)備份。熱備份只能用于ARCHIVELOG方式的數(shù)據(jù)庫。在數(shù)據(jù)文件備份之前,對應(yīng)的表空間必須通過使用ALTER TABLESPACE …… BEGIN BACKUP以備份方式放置。然后組成表空間的數(shù)據(jù)文件可以使用類似冷備份的操作系統(tǒng)命令進行拷貝。在數(shù)據(jù)文件用操作系統(tǒng)命令拷貝后,應(yīng)使用ALTER TABLESPACE …… END BACKUP命令使表空間脫離熱備份方式。
    熱備份沒有必要備份聯(lián)機日志,但必須是歸檔狀態(tài),在實例恢復(fù)的時候,可能需要用到歸檔日志。當(dāng)前聯(lián)機日志一定要保護好或是處于鏡相狀態(tài),當(dāng)前聯(lián)機日志的損壞,對于數(shù)據(jù)庫的損壞是巨大的,只能以數(shù)據(jù)的丟失來進行數(shù)據(jù)庫的恢復(fù)工作。

      對于臨時表空間,存放的是臨時信息,在熱備份是也可以考慮不用備份,如果臨時文件發(fā)生故障,可以刪除該數(shù)據(jù)文件與表空間,重建一個臨時表空間。熱備份的優(yōu)點是顯而易見的
      ---- a.可在表空間或數(shù)據(jù)文件級備份,備份時間短。  
      ---- b.備份時數(shù)據(jù)庫仍可使用。  
      ---- c.可達到秒級恢復(fù)(恢復(fù)到某一時間點上)。  
      ---- d.可對幾乎所有數(shù)據(jù)庫實體作恢復(fù)。  
      ---- e.恢復(fù)是快速的,在大多數(shù)情況下在數(shù)據(jù)庫仍工作時恢復(fù)。

      操作系統(tǒng)作熱備份的一般步驟為:

      ①連接數(shù)據(jù)庫 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;
      ⑤對所有需要備份的表空間重復(fù)2,3,4
      ⑥使用如下的命令備份控制文件ALTER DATABSE …… BACKUP CONTROLFILE
      
      如備份成二進制文件 alter database backup controlfile to ‘new fielname’;

      備份成文本文件 alter database backup controlfile to trace;

      因為熱備份的時候,用戶還在操作數(shù)據(jù)庫,所以,最好是每個表空間處于備份狀態(tài)的時間最短,這樣就要求一個表空間一個表空間的備份,不要一起使表空間處于備份狀態(tài)而同時拷貝數(shù)據(jù)文件。

      注意:如果在熱備份的時候如果數(shù)據(jù)庫中斷(如斷電),那么在重新啟動數(shù)據(jù)庫的時候,數(shù)據(jù)庫將提示有數(shù)據(jù)文件需要恢復(fù),你需要把正在斷電時候的處于備份狀態(tài)的數(shù)據(jù)文件通過ALTER TABLESPACE …… END BACKUP結(jié)束備份方式。具體哪個數(shù)據(jù)文件或表空間處于備份狀態(tài),可以通過v$backup與v$datafile來獲得。

      3、RMAN(備份與恢復(fù)管理器)

      i.使用RMAN進行備份

      Recovery manager(RMAN)是ORACLE提供的DBA工具,用語管理備份和恢復(fù)操作。RMAN只能用于ORACLE8或更高的版本中。它能夠備份整個數(shù)據(jù)庫或數(shù)據(jù)庫部件,其中包括表空間、數(shù)據(jù)文件,控制文件和歸檔文件。RMAN可以按要求存取和執(zhí)行備份和恢復(fù)。

      RMAN備份有如下優(yōu)點
      ☆支持在線熱備份
      ☆支持多級增量備份
      ☆支持并行備份、恢復(fù)
      ☆減少所需要備份量
      ☆備份、恢復(fù)使用簡單

      重要的是,使用恢復(fù)管理器允許您進行增量數(shù)據(jù)塊級的備份(這個與導(dǎo)出/導(dǎo)入的增量截然不同)。增量RMAN備份是時間和空間有效的,因為他們只備份自上次備份以來有變化的那些數(shù)據(jù)塊。另一個空間有效的RMAN特性是它只備份數(shù)據(jù)文件中使用的數(shù)據(jù)塊,忽略空的,未用的數(shù)據(jù)塊,這個對于預(yù)分配空間的表空間有很大的好處。從9i開始,還增加了RMAN的數(shù)據(jù)塊級別的恢復(fù),可以進一步減少數(shù)據(jù)庫恢復(fù)時間。

      RMAN支持以下不同類型的備份

      FULL                        數(shù)據(jù)庫全備份,包括所有的數(shù)據(jù)塊
      INCREMENTAL     增量備份,只備份自上次增量備份以來修改過的數(shù)據(jù)塊。需要一個0級的增量作為增量的基礎(chǔ),可以支持5級增量。
      OPEN                        在數(shù)據(jù)庫打開的時候使用
      CLOSED                    在數(shù)據(jù)庫安裝(MOUNT)但不打開的時候備份,關(guān)閉備份可以是CONSISTENT或IN CONSISTENT類型的。
      CONSISTENT          在數(shù)據(jù)庫安裝,單不打開,并且在安裝之前數(shù)據(jù)庫被徹底關(guān)閉(而不是被破壞或異常退出)時使用。CONSISTENT備份可以簡單的進行復(fù)原(RESTORE)而不是恢復(fù)(RECOVER)
      INCONSISTENT             在數(shù)據(jù)庫打開或安裝(但不打開)時使用。在該數(shù)據(jù)庫正常關(guān)閉或崩潰后,   INCONSISTENT備份需要恢復(fù)。

      理解BACKUP,RESTORE,RECOVER命令,這是RMAN最基本的三個命令,可以進行數(shù)據(jù)庫的備份,復(fù)原以及恢復(fù)操作。理解恢復(fù)目錄,RMAN可以在沒有恢復(fù)目錄(NOCATALOG)下運行,這個時候備份信息保存在控制文件。保存在控制文件的備份信息是很危險的,如果控制文件的破壞將導(dǎo)致備份信息的丟失與恢復(fù)的失敗,而且,沒有恢復(fù)目錄,很多RMAN的命令將不被支持。所以對于重要的數(shù)據(jù)庫,建議創(chuàng)建恢復(fù)目錄,恢復(fù)目錄也是一個數(shù)據(jù)庫,只不過這個數(shù)據(jù)庫用來保存?zhèn)浞菪畔ⅲ粋€恢復(fù)目錄可以用來備份多個數(shù)據(jù)庫。

      創(chuàng)建RMAN目錄,以下步驟說明了在一個數(shù)據(jù)庫中盡力RMAN目錄的過程。

      a.為目錄創(chuàng)建一個單獨的表空間SQL>Create tablespace tools datafile ‘fielname’ size 50m;
      b.創(chuàng)建RMAN用戶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.打開RMAN $>RMAN
      e.連接數(shù)據(jù)庫RMAN>connect catalog rman/rman
      f.創(chuàng)建恢復(fù)目錄RMAN>Create catalog tablespace rman

      注冊目標(biāo)數(shù)據(jù)庫,恢復(fù)目錄創(chuàng)建成功后,就可以注冊目標(biāo)數(shù)據(jù)庫了,目標(biāo)數(shù)據(jù)庫就是需要備份的數(shù)據(jù)庫,一個恢復(fù)目錄可以注冊多個目標(biāo)數(shù)據(jù)庫,注冊目標(biāo)數(shù)據(jù)庫的命令為:$>RMAN target internal/password catalog rman/rman@rcdb; RMAN>Register database; 數(shù)據(jù)庫注冊完成,就可以用RMAN來進行備份了,更多命令請參考ORACLE聯(lián)機手冊或《ORACLE8i備份與恢復(fù)手冊》。

      RMAN使用腳本來備份數(shù)據(jù)庫,以下是RMAN進行備份的幾個例子。
      a.備份整個數(shù)據(jù)庫 backup full tag ‘basicdb’ format ‘/bak/oradata/full_%u_%s_%p’ database;
      b.備份一個表空間 backup tag ‘tsuser’ format ‘/bak/oradata/tsuser_%u_%s_%p’ tablespace users;
      c.備份歸檔日志 backup tag ‘alog’ format ‘/bak/archivebak/arcbak_%u_%s_%p’ archivelog all delete input;

      ii.維護RMAN

      RMAN的維護主要分為幾個方面

      1、   查看RMAN的信息
             檢查現(xiàn)有備份
                 RMAN>list backup
             列出過期備份
                 RMAN>report obsolete
             刪除過期的備份
                 RMAN>allocate channel for maintenance type disk;
                 RMAN>change backupset id delete;
                 RMAN>release channel;
      2、   同步或重置RMAN 如果目標(biāo)數(shù)據(jù)庫物理對象發(fā)生了變化,如添加了一個數(shù)據(jù)文件,需要用如下命令同步: RMAN>resync catalog; 如果目標(biāo)數(shù)據(jù)庫reset了數(shù)據(jù)庫,需要用如下命令同步RMAN>reset database; 當(dāng)手工刪除了數(shù)據(jù)庫的歸檔文件后,要執(zhí)行以下腳本同步RMAN>allocate channel for maintenance type disk;
    RMAN> change archivelog all crosscheck; RMAN>release channel; 當(dāng)手工刪除了數(shù)據(jù)庫的RMAN備份后,要執(zhí)行以下腳本來同步 RMAN>allocate channel for maintenance type disk; RMAN>crosscheck backup; RMAN>delete expired backup;
    RMAN>release channel;

     四、定制恰當(dāng)?shù)膫浞莶呗?/strong>

      i.定制正確的策略

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

      每半年做一個數(shù)據(jù)庫的全備份(包括所有的數(shù)據(jù)和只讀表空間)
      每一個月做一次零級備份(不包含只讀表空間)
      每個星期做一次一級備份
      每天做一次二級備份

      任何數(shù)據(jù)庫的更改需要重新同步CATALOG目錄并重新備份(如添加數(shù)據(jù)文件)或重新備份(如修改表空間為只讀)每次備份后都可以備份歸檔日志或定期備份歸檔日志。如果可能,可以直接備份到磁帶上。數(shù)據(jù)庫全備份的腳本
    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 ‘alter system archive log current’;
    backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’  
    archivelog all delete input; #備份歸檔可選,可以單獨定期備份
    release channel c1;
    release channel c2;
    release channel c3;
    }
    零級備份的腳本
    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 ‘alter system archive log current’;
    backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’  
    archivelog all delete input; #備份歸檔可選,可以單獨定期備份
    release channel c1;
    release channel c2;
    release channel c3;
    }
    同理,我們可以得到一級備份,二級備份的腳本,如一級備份的腳本
    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 ‘alter system archive log current’;
    backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’  
    archivelog all delete input; #備份歸檔可選,可以單獨定期備份
    release channel c1;
    release channel c2;
    release channel c3;
    }

      如果按照以上備份策略,則每天的所需要備份的數(shù)據(jù)量只有一天的改變量。而做恢復(fù)時最多要恢復(fù)當(dāng)月的一個零級備份+三個一級備份+6個二級備份+當(dāng)天的歸檔文件。如果不能接受這樣的恢復(fù)時間,可以減少零級備份之間的時間間隔。
       
      在每次備份后,原則上在該備份點之前的歸檔日志就可以刪除掉了,但是為了進一步的安全以及日后需要(如使用LOGMNR查找所需信息),建議有條件的話,歸檔日志保存一年,可以保存在磁帶等廉價存取設(shè)備上。

      ii.與RMAN備份有關(guān)的優(yōu)化

      備份操作主要是完成以下三個步驟
      1、從磁盤上讀取數(shù)據(jù)
      2、在內(nèi)存中處理數(shù)據(jù)塊
      3、寫入數(shù)據(jù)到磁盤或磁帶

      以上的讀寫操作可以同步或異步的完成,在同步I/O操作中,一個時間只允許有一個IO操作,但是在異步I/O操作中,一個時間允許有多個IO操作。因此,備份與恢復(fù)的調(diào)優(yōu)主要集中在以下幾個方面:

      1、   提高同步或異步I/O操作能力在支持異步操作的操作系統(tǒng)上,可以通過設(shè)置TAPE_AYSNCH_IO,DISK_ASYNCH_IO和BACKUP_TYPE_IO_SLAVES來支持異步操作,提高寫的能力。
      2、   提高磁盤讀能力可以在backup命令后通過設(shè)置DISKRATIO來保證從多個磁盤上讀取數(shù)據(jù),保證連續(xù)的數(shù)據(jù)流。
      3、   正確設(shè)置緩沖區(qū)與參數(shù)值設(shè)置LARGE_POOL_SIZE,使備份可以使用連續(xù)的緩沖池,通過設(shè)置DB_FIL_DIRECT_IO_COUNT可以提高緩沖區(qū)的利用。如果使用磁帶備份,還可以設(shè)置BACKUP_TYPE_IO_SLAVES來提高磁帶的寫能力。
      4、   采用并行備份開辟多個通道,可以實現(xiàn)并行備份與恢復(fù)
      
      iii.備份RMAN數(shù)據(jù)庫

      RMAN自己的數(shù)據(jù)庫也需要備份,但是本身很小,而且不是經(jīng)常發(fā)生變化,所以在每次RMAN備份完成后,都可以用如下腳本對RMAN數(shù)據(jù)庫備份。
    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.使自動備份數(shù)據(jù)庫

      自動備份數(shù)據(jù)庫不外乎以下三種方式

         WINDOWS下的任務(wù)計劃(At命令)
         UNIX下的Crontab
         第三方工具如Viritas

      在以上三種方式中Viritas屬于第三方工具,很多人可能都沒有接觸,主要說一下windows的任務(wù)計劃與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ù)計劃向?qū)Ъ纯桑蚴褂胊t命令。在unix中,在目標(biāo)機器上編寫一個文件,用以啟動自動備份進程。假定文件名為ORACLE,文件將放在/var/spool/cron/crontabs目錄下
    $>cat oracle
    0 23 * * 0 backup_archive.sh
    #表示星期天23點對數(shù)據(jù)庫備份
    0 12,18 * * * backup_archive.sh
        #表示每天12點,18點備份
      Crontab文件的每一行由六個域(minutes,hours,day of month,month,day of week,command)組成,域之間用空格或Tab分隔開來

      五、常見誤區(qū)

      1、使用EXP/IMP備份

      EXP/IMP不是一個良好的備份工具,在以后的發(fā)展之中,ORACLE對EXP/IMP用于備份的支持會越來越低。ORACLE只是把EXP/IMP當(dāng)作一個好的工具而不是備份工具,在對于大型數(shù)據(jù)庫,如TB級數(shù)據(jù)庫或數(shù)據(jù)倉庫,EXP/IMP肯定會力不從心。

      2、在應(yīng)用程序中備份數(shù)據(jù)庫

      在論壇上,有很多這樣的要求,“我怎么在程序中備份與恢復(fù)數(shù)據(jù)庫?”。首先說,這個并不是不可以實現(xiàn),但是實現(xiàn)的過程會很復(fù)雜而且意外會很多。就我的感覺,提出這樣問題的人,首先一點就是對ORACLE或DBA的不了解,如果ORACLE可以這么輕松的實現(xiàn)備份與恢復(fù),那么我可以說,就不需要DBA了。

      3、冷備份比熱備份更容易,效果會更好

      有人認(rèn)為,冷備份是關(guān)閉數(shù)據(jù)庫進行的一致性備份,肯定比熱備份要好,使用也容易,其實不盡然,在熱備份中,一樣可以實現(xiàn)數(shù)據(jù)庫的全備份,而且不會影響到數(shù)據(jù)庫的運行。建議所有的生產(chǎn)機,都運行在歸檔方式下,采用熱備份方式。

      六、常見問題

      1、我導(dǎo)出的數(shù)據(jù)為什么不能導(dǎo)入,提示不支持的字符集轉(zhuǎn)換
    答:參考上面的字符集原則,導(dǎo)出數(shù)據(jù)時客戶端與數(shù)據(jù)庫字符集一致,導(dǎo)入時修改為與目標(biāo)數(shù)據(jù)庫字符集一致。

      2、我的歸檔日志越來越多,我什么時候可以刪除歸檔日志?
    答:在每一次全備份(如OS全冷備份或全熱備份)或基于全備份的增量備份(如RMAN基于0級備份上的增量備份)后都可以刪除該備份點之前的歸檔日志,建議在磁帶上保留一年。

      3、全備份時一定需要備份所有數(shù)據(jù)文件嗎?
    答:不需要,起碼有兩類數(shù)據(jù)文件可以不備份,一類就是臨時數(shù)據(jù)文件,如果丟失,可以刪除后重建;一類是只讀表空間數(shù)據(jù)文件,如果上次備份以來,沒有修改過表空間的只讀屬性,就可以不需要備份。

      4、聯(lián)機日志需要備份嗎?
    答:如果是歸檔方式熱備份,就沒有必要備份聯(lián)機日志。但是對于冷備份,可以備份聯(lián)機日志,特別是不歸檔狀態(tài)。備份過聯(lián)機日志后的冷備份,因為數(shù)據(jù)庫是一致的,可以恢復(fù)到該備份點。

      七、小結(jié)

      1、什么是數(shù)據(jù)庫備份,數(shù)據(jù)庫備份就是把數(shù)據(jù)庫復(fù)制到轉(zhuǎn)儲設(shè)備的過程。
      2、數(shù)據(jù)庫的運行方式,可以分為歸檔方式和非歸檔方式,建議運行在歸檔方式下運行熱備份。
      3、了解了數(shù)據(jù)庫的備份方式,邏輯備份、冷備份、熱備份
      4、了解數(shù)據(jù)庫的備份工具,EXP/IMP執(zhí)行邏輯備份,OS腳本可以執(zhí)行冷備份或熱備份,RMAN也可以執(zhí)行冷備份或熱備份
      5、了解ORACLE的備份策略,并怎樣選擇最佳的備份策略
      6、知道怎么樣啟動自動備份,了解Windows的at命令與unix的cron進程。

      參考文獻:
    Expert One-on-one Oracle   [美] Thomas Kyte 著 清華大學(xué)出版社
    Oracle 8i Web開發(fā)指南 [美] Dan Hotka,et al. 著 清華大學(xué)出版社
    Oracle 8i DBA Architecture & Administration and backup & Recovery Study Guide
       [美] Dong Stuns Biju Thomas著 電子工業(yè)出版社
    Oracle 數(shù)據(jù)庫管理員技術(shù)指南 [美] Sumit Sarin著 機械工業(yè)出版社

    posted on 2009-06-02 16:07 rogerfan 閱讀(267) 評論(0)  編輯  收藏 所屬分類: 【數(shù)據(jù)庫】
    主站蜘蛛池模板: 亚洲国产精品无码久久久久久曰| 亚洲精品乱码久久久久蜜桃| 亚洲精品无码激情AV| 最近免费中文字幕mv在线电影| 免费人成视频在线观看免费| 中文字幕不卡免费高清视频| 亚洲av永久综合在线观看尤物| 亚洲精品无码Av人在线观看国产| 日本视频免费在线| 人妻无码中文字幕免费视频蜜桃 | 亚洲乱码中文论理电影| 亚洲成A∨人片在线观看不卡| 一本色道久久88综合亚洲精品高清| www.免费在线观看| 最近免费视频中文字幕大全| 久久青草国产免费观看| 中文字幕在线视频免费观看| 色爽黄1000部免费软件下载| 美女羞羞视频免费网站| 亚洲a∨无码一区二区| 亚洲精品无码你懂的| 亚洲色成人网站WWW永久四虎 | 国产午夜精品久久久久免费视| 乱淫片免费影院观看| 美女裸免费观看网站| 国产精品亚洲一区二区无码| 亚洲AV无码一区二区三区电影 | 日韩免费三级电影| 在线免费观看韩国a视频| 全免费a级毛片免费看不卡| 好男人www免费高清视频在线| 可以免费看黄视频的网站| 国产成人免费在线| 免费成人激情视频| 五月婷婷综合免费| 无码国产精品一区二区免费I6| 无码区日韩特区永久免费系列| 91在线品视觉盛宴免费| 日韩免费视频一区| 亚洲精品WWW久久久久久| 亚洲人成影院在线无码观看|