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

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

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

    空間站

    北極心空

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    Oracle數(shù)據(jù)庫(kù)自動(dòng)備份
     
     
     

     

    相信為數(shù)不少的系統(tǒng)管理員每天都在做著同一樣的工作——對(duì)數(shù)據(jù)進(jìn)行備份。一旦哪一天疏忽了,而這一天系統(tǒng)又恰恰發(fā)生了故障,需要進(jìn)行數(shù)據(jù)恢復(fù),那么此時(shí)就無(wú)能為力了。假如每天設(shè)定一個(gè)固定的時(shí)間,系統(tǒng)自動(dòng)進(jìn)行備份,那該多好啊!下面筆者結(jié)合實(shí)踐經(jīng)驗(yàn),談一談UNIX環(huán)境下Oracle數(shù)據(jù)庫(kù)自動(dòng)備份,以起到拋磚引玉的作用。
      
      我們計(jì)劃讓
    數(shù)據(jù)庫(kù)在晚上23點(diǎn)做export導(dǎo)出備份,在凌晨2點(diǎn)將備份文件拷貝到磁帶上,在凌晨4點(diǎn)將備份文件拷貝到另一臺(tái)UNIX機(jī)器上,為此我們可進(jìn)行如下操作:
      
      一、導(dǎo)出數(shù)據(jù)庫(kù)
      export命令將
    數(shù)據(jù)庫(kù)中的數(shù)據(jù)備份成一個(gè)二進(jìn)制文件,它通常有三種模式:用戶模式、表模式和整個(gè)數(shù)據(jù)庫(kù)模式。本文擬采用用戶模式,備份之前,應(yīng)先建立一個(gè)備份目錄,以容納備份文件,比如可建一個(gè)/backup目錄。接著我們可在UNIX的Oracle目錄下(也可以是其它目錄)分別建立兩個(gè)文件ora—backup,tar—backup。需要說(shuō)明的是,前一個(gè)文件需要對(duì)Oracle的參數(shù)進(jìn)行初始化,為了方便起見(jiàn),我們不妨將初始化命令放到一個(gè)文件中(文件名姑且定為ora—env),再由第一個(gè)文件調(diào)用它。
      
      1. ora—env
    文件對(duì)Oracle的參數(shù)進(jìn)行初始化,其內(nèi)容如下:
      
      ORACLE—HOME=$ORACLE—HOME;export ORACLE—HOME
      
      ORACLE—SID=ora73;export ORACLE—SID
      
      ORACLE—TERM=sun;export ORACLE—TERM
      
      LD—LIBRARY—PATH=$ORACLE—HOME/lib;export LD—LIBRARY—PATH
      
      ORA—NLS32=$ORACLE—HOME/ocommon/nls/admin/data;export ORA—NLS
      
      PATH=.:/usr/ccs/bin:/usr/ucb:$ORACLE—HOME/bin:$PATH;export PATH
      
      DISPLAY=host1:0;export DISPLAY
      
      NLS—LANG=american—america.zhs16cgb231280;export NLS—LANG
      
      2. ora—backup
    文件對(duì)數(shù)據(jù)庫(kù)做export導(dǎo)出,導(dǎo)出的文件名可以任意定,本文定為字母“xx”加當(dāng)天日期,即假如當(dāng)天日期是12月10號(hào),則導(dǎo)出的文件名為“xx1210.dmp”,以區(qū)別于其它日期的備份文件
      
      ora—backup
    文件內(nèi)容:
      
      ./oracle/ora—env
      
      #初始化Oracle
    數(shù)據(jù)庫(kù)
      
      rq=′date +″%m%d″ ′
      
      #把當(dāng)天日期賦予變量rq
      
      rm /backup/
      
      # 清空 /backup目錄
      
      exp test/test file=/backup/xx$rq.dmp log=/backup/xx$rq.log
      
      本命令用于在$提示符下,導(dǎo)出test用戶的數(shù)據(jù)(其口令亦為test),導(dǎo)出
    文件及日志均放在/backup目錄下。
      
      二、磁帶備份
      tar—backup
    文件將用export命令導(dǎo)出的數(shù)據(jù)文件拷貝到磁帶上。
      
      tar—backup
    文件內(nèi)容:
      
      tar rvf /dev/rmt/0n/backup/
      
      本命令可將/backup目錄下當(dāng)天產(chǎn)生的
    文件備份到磁帶上。本文件中,tar命令使用了三個(gè)參數(shù),其中r選項(xiàng)表示向磁帶上拷入文件而不破壞磁帶原來(lái)內(nèi)容,v選項(xiàng)表示在拷貝過(guò)程中顯示文件信息,f選項(xiàng)后面加上磁帶設(shè)備名,指定文件向何處拷貝,n選項(xiàng)表示磁帶機(jī)不倒帶。/dev/rmt/0表示UNIX主機(jī)第一個(gè)磁帶驅(qū)動(dòng)器,同理,/dev/rmt/1則表示UNIX主機(jī)第二個(gè)磁帶驅(qū)動(dòng)器,依此類(lèi)推。
      
      ora—env、ora—backup、tar—backup
    文件編寫(xiě)完成后,分別使用下述命令:
      
      chmod 755 ora—env
      
      chmod 755 ora—backup
      
      chmod 755 tar—backup
      
      這樣,三個(gè)
    文件就都變成了可執(zhí)行文件
      
      三、異地備份
      我們知道,通常可用FTP命令在兩臺(tái)主機(jī)間傳輸數(shù)據(jù),但一般是通過(guò)交互方式實(shí)現(xiàn)的,即需要手工輸入目標(biāo)主機(jī)的IP地址、用戶名、口令等。顯然,這不符合自動(dòng)備份的要求。所幸的是,我們可以通過(guò)編寫(xiě)一個(gè).netrc的
    文件來(lái)達(dá)到目標(biāo)。這一文件必須命名為.netrc,且必須存放在啟動(dòng)FTP命令的機(jī)器上的用戶注冊(cè)目錄中,該文件的權(quán)限應(yīng)禁止組內(nèi)或其它用戶進(jìn)行讀訪問(wèn)。這樣,當(dāng)用戶使用FTP命令的時(shí)候,系統(tǒng)將會(huì)在該用戶的注冊(cè)目錄中尋找.netrc文件,如果能夠?qū)ふ业剑瑢?huì)首先執(zhí)行該文件,否則,會(huì)交互式地提示用戶輸入用戶名、口令等。
      
      在使用FTP命令之前,應(yīng)先在另一臺(tái)作備份用的UNIX機(jī)器上建一目錄,以容納備份
    文件,本文建的目錄是/pub 。需要指出的是,為了加快備份速度,兩臺(tái)主機(jī)之間的傳輸速率應(yīng)盡可能的高,最好位于同一局域網(wǎng)上。
      
      .netrc
    文件內(nèi)容如下:
      
      machine host2
      
      # host2為作備份用的主機(jī)名
      
      login oracle
      
      #oracle為備份主機(jī)上的一個(gè)用戶
      
      password oracle
      
      #oracle用戶的口令為oracle
      
      macdef init
      
      #定義一個(gè)名為init的宏,它將在自動(dòng)注冊(cè)進(jìn)程的最后被執(zhí)行
      
      bin
      
      #
    文件的傳輸方式設(shè)為二進(jìn)制
      
      lcd /backup
      
      # 進(jìn)入本地工作目錄/backup
      
      cd /pub
      
      # 進(jìn)入備份主機(jī)目錄/pub
      
      mput 
      
      # 將/backup目錄下的所有
    文件傳輸至備份主機(jī)
      
      bye
      
      #退出FTP會(huì)話進(jìn)程
      
      .netrc
    文件編寫(xiě)完成后,使用下述命令:
      
      chmod 600 .netrc
      
      這樣,.netrc
    文件就只能被該用戶所訪問(wèn)。
      
      四、啟動(dòng)備份進(jìn)程
      Cron是一個(gè)永久進(jìn)程,它由/etc/rc.local啟動(dòng)執(zhí)行。Cron檢查/var/spool/cron/crontabs/目錄中的
    文件,找到所要執(zhí)行的任務(wù)和執(zhí)行任務(wù)的時(shí)間。
      
      Crontab
    文件的每一行由六個(gè)域(minutes、hours、day of month、month、day of week、 command)組成,域之間用空格或Tab分開(kāi),其中:
      
      minutes:分鐘域,值的范圍是0到59
      
      hours:小時(shí)域,值的范圍是0到23
      
      day of month:日期,值的范圍是1到31
      
      month:月份,值的范圍是1到12
      
      day of week:星期,值的范圍是0到6,星期日值為0
      
      command:所要運(yùn)行的命令
      
      如果一個(gè)域是,表明命令可以在該域所有可能的取值范圍內(nèi)執(zhí)行。
      
      如果一個(gè)域是由連
    字符隔開(kāi)的兩個(gè)數(shù)字,表明命令可以在兩個(gè)數(shù)字之間的范圍內(nèi)執(zhí)行(包括兩個(gè)數(shù)字本身)。
      
      如果一個(gè)域是由逗號(hào)隔開(kāi)的一系列值組成的,表明命令可以在這些值組成的范圍內(nèi)執(zhí)行。
      
      如果日期域和星期域都有值,則這兩個(gè)域都有效。
      
      現(xiàn)在,我們編寫(xiě)一個(gè)
    文件,用以啟動(dòng)自動(dòng)備份進(jìn)程。值得注意的是,該文件只能在Oracle用戶名下用crontab -e 命令來(lái)編輯,否則將不會(huì)被定時(shí)執(zhí)行,文件名定為Oracle文件將放在/var/spool/cron/crontabs 目錄下。編輯完成后,可以在Oracle的$提示符下,用crontab -l命令來(lái)查看。
      
      Oracle
    文件內(nèi)容:
      
      0 23    /oracle/ora—backup
      
      # 每天23點(diǎn)對(duì)
    數(shù)據(jù)庫(kù)執(zhí)行備份
      
      0 2    /oracle/tar—backup
      
      # 每天2點(diǎn)將
    文件備份到磁帶上
      
      0 4    ftp -i host2
      
      # 每天4點(diǎn)將
    文件備份到另一臺(tái)主機(jī)上
      
      經(jīng)過(guò)以上的操作后,
    系統(tǒng)每天晚上將自動(dòng)產(chǎn)生一個(gè)備份,并且自動(dòng)將備份文件分別拷貝到磁帶上和另一臺(tái)主機(jī)上。系統(tǒng)管理員需要做的是,隔幾天換一盤(pán)磁帶(更換磁帶的周期取決于備份文件的大小和磁帶的容量)和清理備份目錄。這樣,他們就可以從備份數(shù)據(jù)的繁瑣中解脫出來(lái),去做其它更有意義的工作。而數(shù)據(jù)庫(kù)既實(shí)現(xiàn)了磁帶備份,又實(shí)現(xiàn)了異地備份,相應(yīng)的安全性也大大提高了。

    轉(zhuǎn)自:http://www.myfaq.com.cn/A/2004-07-07/85801.html

    實(shí)現(xiàn)腳本
    rem #=========================================================================
    rem # Purpose:exp Oracle DB ZYTK30 to file ZYTK30_YYYYMMDDHHMM.dmp,
    rem #         and Delete the file,7 days ago created
    rem # Author :Comer Chu, 2006

    rem # History:
    rem # Note   :erveryday excute this script by windows task schedule 
    rem #=========================================================================

    @echo off
    rem 1#---獲得當(dāng)前日期和7天前日期,date的格式 "YYYY-MM-DD"----------
    set dt=%date:~0,10%
    set i=1

    :forok
    if %i%==1 goto i01
    if %i%==2 goto i02
    if %i%==3 goto i03
    if %i%==4 goto i04
    if %i%==5 goto i05
    if %i%==6 goto i06
    if %i%==7 goto i07

    :i01
    set i=2
    goto nextok
    :i02
    set i=3
    goto nextok
    :i03
    set i=4
    goto nextok
    :i04
    set i=5
    goto nextok
    :i05
    set i=6
    goto nextok
    :i06
    set i=7
    goto nextok
    :i07
    set i=8
    goto nextok

    :nextok
    set dy=%dt:~0,4%
    set dm=%dt:~5,2%
    set dd=%dt:~8,2%

    if %dm%%dd%==0101 goto L01
    if %dm%%dd%==0201 goto L02
    if %dm%%dd%==0301 goto L07
    if %dm%%dd%==0401 goto L02
    if %dm%%dd%==0501 goto L04
    if %dm%%dd%==0601 goto L02
    if %dm%%dd%==0701 goto L04
    if %dm%%dd%==0801 goto L02
    if %dm%%dd%==0901 goto L02
    if %dm%%dd%==1001 goto L05
    if %dm%%dd%==1101 goto L03
    if %dm%%dd%==1201 goto L06

    if %dd%==02 goto L10
    if %dd%==03 goto L10
    if %dd%==04 goto L10
    if %dd%==05 goto L10
    if %dd%==06 goto L10
    if %dd%==07 goto L10
    if %dd%==08 goto L10
    if %dd%==09 goto L10
    if %dd%==10 goto L11
    set /A dd=dd-1
    set dt=%dy%-%dm%-%dd%
    goto END
    :L10
    set /A dd=%dd:~1,1%-1
    set dt=%dy%-%dm%-0%dd%
    goto END
    :L11
    set dt=%dy%-%dm%-09
    goto END

    :L02
    set /A dm=%dm:~1,1%-1
    set dt=%dy%-0%dm%-31
    goto END
    :L04
    set /A dm=dm-1
    set dt=%dy%-0%dm%-30
    goto END

    :L05
    set dt=%dy%-09-30
    goto END
    :L03
    set dt=%dy%-10-31
    goto END
    :L06
    set dt=%dy%-11-30
    goto END
    :L01
    set /A dy=dy-1
    set dt=%dy%-12-31
    goto END

    :L07
    set /A "dd=dy%%4"
    if not %dd%==0 goto L08
    set /A "dd=dy%%100"
    if not %dd%==0 goto L09
    set /A "dd=dy%%400"
    if %dd%==0 goto L09
    :L08
    set dt=%dy%-02-28
    goto END
    :L09
    set dt=%dy%-02-29
    goto END

    :END
    if %i%==2 goto forok
    if %i%==3 goto forok
    if %i%==4 goto forok
    if %i%==5 goto forok
    if %i%==6 goto forok
    if %i%==7 goto forok
    if %i%==8 goto db

    :db
    rem 2#---備份oracle數(shù)據(jù)到本機(jī),并且只備份表空間,前提本機(jī)正確配置了Oracle的客戶端,否則exp無(wú)法執(zhí)行!
    rem td like 20060827183200
    set td=%Date:~0,4%%Date:~5,2%%Date:~8,2%%Time:~0,2%%Time:~3,2%%Time:~6,2%
    e:\oracleback
    exp user/password@zytk30 tablespaces=(ZYTK30_AC,ZYTK30_OP,ZYTK30_ID,ZYTK30_BAK) file=e:\OracleBack\ZYTK30_%td%.dmp log=e:\OracleBack\expZYTK30.Log buffer=800000
    rar a ZYTK30_%td%.rar ZYTK30_%td%.dmp

    rem set dt to format "yyyymmdd"
    set dt=%dt:~0,4%%dt:~5,2%%dt:~8,2%
    rem 3#---刪除7天前的備份文件---------------------------------------------------------
    del e:\OracleBack\ZYTK30_%dt%*.rar

    rem 4#---刪除當(dāng)天dmp備份文件--------------------------------------------------------
    del e:\OracleBack\ZYTK30_%td%*.dmp

    定時(shí)任務(wù)
    以上內(nèi)容保存為exp_ZYTK30.bat,再使用windows自帶的任務(wù)計(jì)劃來(lái)計(jì)劃程序每天自動(dòng)去備份數(shù)據(jù)了
    具體步驟:控制面板-\任務(wù)計(jì)劃-\添加任務(wù)計(jì)劃,選擇每天,選擇exp_ZYTK30.bat就ok了。

    說(shuō)明
    上面是保留備份最近7天的數(shù)據(jù),每天一個(gè)(當(dāng)然也可以多個(gè),設(shè)置任務(wù)計(jì)劃即可)。你可以修改上面的代碼到最近8、9甚至n天

    比如:修改成保留8天的備份
    在if %i%==7 goto i07 下增加
    if %i%==8 goto i08
    :i07
    set i=8

    在goto nextok 下增加
    :i08
    set i=9
    goto nextok

    將if %i%==8 goto mdb 改為
    if %i%==8 goto forok
    if %i%==9 goto mdb

    依次類(lèi)推到n天。也可以針對(duì)文件夾的刪除,稍作變動(dòng)即可。

    posted on 2008-02-22 16:48 蘆葦 閱讀(1097) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 數(shù)據(jù)庫(kù)
    主站蜘蛛池模板: 亚洲第一区二区快射影院| 亚洲偷偷自拍高清| 精品一区二区三区免费观看 | 亚洲av无码乱码国产精品| xxxxx做受大片在线观看免费| 国产免费131美女视频| 羞羞漫画登录页面免费| 免费a级黄色毛片| jizz免费在线影视观看网站| 国产亚洲精品无码专区| a级毛片高清免费视频| 亚洲αv久久久噜噜噜噜噜| 久久aⅴ免费观看| 亚洲中字慕日产2021| 扒开双腿猛进入爽爽免费视频 | 国产91免费在线观看| 亚洲中文字幕精品久久| 国产精品自在自线免费观看| 成人免费夜片在线观看| 亚洲gv白嫩小受在线观看| 国产精品入口麻豆免费观看| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 在线不卡免费视频| 国产亚洲日韩在线a不卡| 亚洲中文字幕无码一区| 在线观看www日本免费网站| 亚洲国产精品嫩草影院| 中文字幕亚洲专区| 免费A级毛片无码A∨免费| 亚洲精品乱码久久久久久V| 亚洲综合另类小说色区色噜噜| 欧洲人成在线免费| 亚洲色偷偷色噜噜狠狠99| 国产亚洲精品国看不卡| 91在线视频免费看| 国产福利免费视频 | 国产亚洲精品成人久久网站| 国产亚洲精品a在线无码| 最近高清国语中文在线观看免费| 未满十八私人高清免费影院| 亚洲黄色免费网址|