szhswl
          宋針還的個人空間
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

              blog是收集資料并且作為技術交流的平臺,發(fā)布一些本人常用資料或開發(fā)經(jīng)驗,希望能和大家一起討論、進步。

          訪問統(tǒng)計 free hit counter

          留言簿(6)

          我參與的團隊

          隨筆檔案(8)

          文章分類(149)

          新聞分類(1)

          相冊

          收藏夾(21)

          友情鏈接

          我的鏈接

          搜索

          •  

          積分與排名

          • 積分 - 150726
          • 排名 - 413

          最新評論

          閱讀排行榜

          評論排行榜

          相信為數(shù)不少的系統(tǒng)管理員每天都在做著同一樣的工作——對數(shù)據(jù)進行備份。一旦哪一天疏忽了,而這一天系統(tǒng)又恰恰發(fā)生了故障,需要進行數(shù)據(jù)恢復,那么此時就無能為力了。假如每天設定一個固定的時間,系統(tǒng)自動進行備份,那該多好??!下面筆者結合實踐經(jīng)驗,談一談 UNIX 環(huán)境下 Oracle 數(shù)據(jù)庫的自動備份,以起到拋磚引玉的作用。

          我們計劃讓數(shù)據(jù)庫在晚上 23 點做 export 導出備份,在凌晨 2 點將備份文件拷貝到磁帶上,在凌晨 4 點將備份文件拷貝到另一臺 UNIX 機器上,為此我們可進行如下操作:

          一、導出數(shù)據(jù)庫

          export 命令將數(shù)據(jù)庫中的數(shù)據(jù)備份成一個二進制文件,它通常有三種模式:用戶模式、表模式和整個數(shù)據(jù)庫模式。本文擬采用用戶模式,備份之前,應先建立一個備份目錄,以容納備份文件,比如可建一個 /backup 目錄。接著我們可在 UNIX 的 Oracle 目錄下(也可以是其它目錄)分別建立兩個文件 ora — backup , tar — backup 。需要說明的是,前一個文件需要對 Oracle 的參數(shù)進行初始化,為了方便起見,我們不妨將初始化命令放到一個文件中(文件名姑且定為 ora — env ),再由第一個文件調(diào)用它。

          1. ora — env 文件對 Oracle 的參數(shù)進行初始化,其內(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 文件對數(shù)據(jù)庫做 export 導出,導出的文件名可以任意定,本文定為字母 xx 加當天日期,即假如當天日期是 12 月 10 號,則導出的文件名為 xx1210.dmp ,以區(qū)別于其它日期的備份文件。

          ora — backup 文件內(nèi)容:

          ./oracle/ora — env

            #初始化 Oracle 數(shù)據(jù)庫

          rq= ′ date +″% m % d ″ ′

           ?。0旬斕烊掌谫x予變量 rq

          rm /backup/ 

           ?。?清空 /backup 目錄

          exp test/test file=/backup/xx $ rq.dmp log=/backup/xx $ rq.log

            本命令用于在$提示符下,導出 test 用戶的數(shù)據(jù)(其口令亦為 test ),導出文件及日志均放在 /backup 目錄下。

          二、磁帶備份

          tar — backup 文件將用 export 命令導出的數(shù)據(jù)文件拷貝到磁帶上。

          tar — backup 文件內(nèi)容:

          tar rvf /dev/rmt/0n/backup/ 

            本命令可將 /backup 目錄下當天產(chǎn)生的文件備份到磁帶上。本文件中, tar 命令使用了三個參數(shù),其中 r 選項表示向磁帶上拷入文件而不破壞磁帶原來內(nèi)容, v 選項表示在拷貝過程中顯示文件信息, f 選項后面加上磁帶設備名,指定文件向何處拷貝, n 選項表示磁帶機不倒帶。 /dev/rmt/0 表示 UNIX 主機第一個磁帶驅(qū)動器,同理, /dev/rmt/1 則表示 UNIX 主機第二個磁帶驅(qū)動器,依此類推。

          ora — env 、 ora — backup 、 tar — backup 文件編寫完成后,分別使用下述命令:

          chmod 755 ora — env

          chmod 755 ora — backup

          chmod 755 tar — backup

            這樣,三個文件就都變成了可執(zhí)行文件。

          三、異地備份

            我們知道,通常可用 FTP 命令在兩臺主機間傳輸數(shù)據(jù),但一般是通過交互方式實現(xiàn)的,即需要手工輸入目標主機的 IP 地址、用戶名、口令等。顯然,這不符合自動備份的要求。所幸的是,我們可以通過編寫一個 .netrc 的文件來達到目標。這一文件必須命名為 .netrc ,且必須存放在啟動 FTP 命令的機器上的用戶注冊目錄中,該文件的權限應禁止組內(nèi)或其它用戶進行讀訪問。這樣,當用戶使用 FTP 命令的時候,系統(tǒng)將會在該用戶的注冊目錄中尋找 .netrc 文件,如果能夠?qū)ふ业?,將會首先?zhí)行該文件,否則,會交互式地提示用戶輸入用戶名、口令等。

            在使用 FTP 命令之前,應先在另一臺作備份用的 UNIX 機器上建一目錄,以容納備份文件,本文建的目錄是 /pub 。需要指出的是,為了加快備份速度,兩臺主機之間的傳輸速率應盡可能的高,最好位于同一局域網(wǎng)上。

          .netrc 文件內(nèi)容如下:

          machine host2

           ?。?host2 為作備份用的主機名

          login oracle

           ?。?oracle 為備份主機上的一個用戶

          password oracle

            # oracle 用戶的口令為 oracle

          macdef init

            #定義一個名為 init 的宏,它將在自動注冊進程的最后被執(zhí)行

          bin

           ?。N募膫鬏敺绞皆O為二進制

          lcd /backup

           ?。?進入本地工作目錄 /backup

          cd /pub

           ?。?進入備份主機目錄 /pub

          mput     

           ?。?將 /backup 目錄下的所有文件傳輸至備份主機

          bye

           ?。M顺?FTP 會話進程

          .netrc 文件編寫完成后,使用下述命令:

          chmod 600 .netrc

            這樣, .netrc 文件就只能被該用戶所訪問。

          四、啟動備份進程

          Cron 是一個永久進程,它由 /etc/rc.local 啟動執(zhí)行。 Cron 檢查 /var/spool/cron/crontabs/ 目錄中的文件,找到所要執(zhí)行的任務和執(zhí)行任務的時間。

          Crontab 文件的每一行由六個域 (minutes 、 hours 、 day of month 、 month 、 day of week 、 command) 組成,域之間用空格或 Tab 分開,其中:

          minutes :分鐘域,值的范圍是 0 到 59

          hours :小時域,值的范圍是 0 到 23

          day of month :日期,值的范圍是 1 到 31

          month :月份,值的范圍是 1 到 12

          day of week :星期,值的范圍是 0 到 6 ,星期日值為 0

          command :所要運行的命令

            如果一個域是,表明命令可以在該域所有可能的取值范圍內(nèi)執(zhí)行。

            如果一個域是由連字符隔開的兩個數(shù)字,表明命令可以在兩個數(shù)字之間的范圍內(nèi)執(zhí)行(包括兩個數(shù)字本身)。

            如果一個域是由逗號隔開的一系列值組成的,表明命令可以在這些值組成的范圍內(nèi)執(zhí)行。

            如果日期域和星期域都有值,則這兩個域都有效。

            現(xiàn)在,我們編寫一個文件,用以啟動自動備份進程。值得注意的是,該文件只能在 Oracle 用戶名下用 crontab - e 命令來編輯,否則將不會被定時執(zhí)行,文件名定為 Oracle ,文件將放在 /var/spool/cron/crontabs 目錄下。編輯完成后,可以在 Oracle 的$提示符下,用 crontab - l 命令來查看。

          Oracle 文件內(nèi)容:

          0 23    /oracle/ora — backup

            # 每天 23 點對數(shù)據(jù)庫執(zhí)行備份

          0 2    /oracle/tar — backup

           ?。?每天 2 點將文件備份到磁帶上

          0 4    ftp - i host2

           ?。?每天 4 點將文件備份到另一臺主機上

          經(jīng)過以上的操作后,系統(tǒng)每天晚上將自動產(chǎn)生一個備份,并且自動將備份文件分別拷貝到磁帶上和另一臺主機上。系統(tǒng)管理員需要做的是,隔幾天換一盤磁帶(更換磁帶的周期取決于備份文件的大小和磁帶的容量)和清理備份目錄。這樣,他們就可以從備份數(shù)據(jù)的繁瑣中解脫出來,去做其它更有意義的工作。而數(shù)據(jù)庫既實現(xiàn)了磁帶備份,又實現(xiàn)了異地備份,相應的安全性也大大提高了。


          本文轉(zhuǎn)自:http://www.host01.com/article/database/00060004/065422285427604.htm

          ---------------------------------------------------------------------------------------------------------------------------------
          說人之短,乃護己之短。夸己之長,乃忌人之長。皆由存心不厚,識量太狹耳。能去此弊,可以進德,可以遠怨。
          http://www.aygfsteel.com/szhswl
          ------------------------------------------------------------------------------------------------------ ----------------- ---------
          posted on 2007-12-06 09:51 宋針還 閱讀(306) 評論(0)  編輯  收藏 所屬分類: ORACLE
          主站蜘蛛池模板: 竹北市| 庄浪县| 宁明县| 泰州市| 株洲市| 伊通| 开封市| 慈利县| 宁德市| 桃源县| 镇巴县| 巴里| 富宁县| 晋江市| 开江县| 绩溪县| 溆浦县| 南宫市| 桦甸市| 黔江区| 文山县| 河源市| 乌苏市| 巩留县| 米易县| 岗巴县| 新密市| 梓潼县| 祁阳县| 宝应县| 河间市| 临夏市| 樟树市| 武夷山市| 高碑店市| 商南县| 香河县| 内黄县| 开阳县| 泰州市| 保靖县|