Oracle-database-備份與恢復(fù)論文_第1頁
Oracle-database-備份與恢復(fù)論文_第2頁
Oracle-database-備份與恢復(fù)論文_第3頁
Oracle-database-備份與恢復(fù)論文_第4頁
Oracle-database-備份與恢復(fù)論文_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Oracledatabase備份與恢復(fù)摘要:隨著信息化的發(fā)展,數(shù)據(jù)對我們?nèi)粘I钪杏兄e足輕重的影響。生活不能缺少數(shù)據(jù),因此數(shù)據(jù)的備份和恢復(fù)在當(dāng)前至關(guān)重要。它能保證數(shù)據(jù)的完整性、安全性、一致性。它也使數(shù)據(jù)在非正常情況下丟失后,還能恢復(fù)到事故前的狀態(tài),確保損失最少,風(fēng)險最少。本文主要介紹在Linux服務(wù)器端,通過oracle數(shù)據(jù)庫的SQL*plus工具,對oracle數(shù)據(jù)庫進(jìn)行冷備份恢復(fù)(脫機(jī)備份)和熱備份恢復(fù)(聯(lián)機(jī)備份),分別對數(shù)據(jù)庫的參數(shù)文件,控制文件,數(shù)據(jù)文件,日志文件進(jìn)行備份與恢復(fù)。通過模擬不同情況下,數(shù)據(jù)庫文件丟失的情況下,對數(shù)據(jù)庫進(jìn)行完全恢復(fù)和不完全恢復(fù)。本文主要詳細(xì)闡述了不完全恢復(fù)時需要注意的要點和不完全恢復(fù)的特點。通過本文對備份恢復(fù)情況的研究,可以編寫相關(guān)的數(shù)據(jù)庫備份恢復(fù)腳本,簡化備份步驟,希望能實現(xiàn)Linux操作系統(tǒng)下,數(shù)據(jù)庫自動備份與恢復(fù)。關(guān)鍵詞:oracle;備份;恢復(fù)第一章緒論國內(nèi)外研究動態(tài)當(dāng)今的信息時代,數(shù)據(jù)在現(xiàn)代企業(yè)中占有重要的地位,數(shù)據(jù)安全性就顯得尤為重要。隨著企業(yè)規(guī)模的擴(kuò)展,用戶早已認(rèn)識到保證信息系統(tǒng)的安全不間斷工作成為各個行業(yè)信息化建設(shè)的重要關(guān)注點。而且近年來頻繁出現(xiàn)的自然災(zāi)害或者突發(fā)事件也讓人們越來越多的注意到,原有意識中的數(shù)據(jù)備份已經(jīng)無法滿足關(guān)鍵業(yè)務(wù)對系統(tǒng)的可用性、實時性、安全性的需要。這時,異地容災(zāi)解決方案的出現(xiàn)則可通過在不同地點建立備份系統(tǒng),從而進(jìn)一步提數(shù)據(jù)抵抗各種可能安全因素的容災(zāi)能力。美國是一個信息技術(shù)非常發(fā)達(dá)的國家,因此很早就有了很高的災(zāi)備意識,像美國政府就發(fā)布規(guī)定:要求所有政府、金融和醫(yī)療等機(jī)構(gòu)都必須建立備份數(shù)據(jù)中心,以確保在遭受恐怖主義攻擊、軍事打擊或自然災(zāi)害之后,能夠?qū)崿F(xiàn)快速重建。我國是一個信息產(chǎn)業(yè)發(fā)展比較晚的國家,但也一直在學(xué)習(xí)國外的先進(jìn)經(jīng)驗,頒布了一系列法律法規(guī)來規(guī)范災(zāi)備市場的發(fā)展,例如像信息系統(tǒng)災(zāi)難恢復(fù)規(guī)范中就將災(zāi)備劃分為6個等級。容災(zāi)備份系統(tǒng)的現(xiàn)狀分析伴隨著IT信息化的推進(jìn),組織運營對IT系統(tǒng)的依賴度越來越高,IT系統(tǒng)的可持續(xù)化運行,以及IT系統(tǒng)中數(shù)據(jù)的安全性,已經(jīng)是對組織運營風(fēng)險控制產(chǎn)生重大影響。而容災(zāi)正是這樣一門技術(shù)和方案,它可提供一個防止IT系統(tǒng)遭受各種災(zāi)難影響破壞的保護(hù)系統(tǒng),為IT系統(tǒng)的可持續(xù)化運行和數(shù)據(jù)安全提供一道保護(hù)屏障。而且近年來頻繁出現(xiàn)的自然災(zāi)害或者突發(fā)事件也讓人們越來越多的注意到,原有意識中的數(shù)據(jù)備份已經(jīng)無法滿足關(guān)鍵業(yè)務(wù)對系統(tǒng)的可用性、實時性、安全性的需要。這時,異地容災(zāi)解決方案的出現(xiàn)則可通過在不同地點建立備份系統(tǒng),從而進(jìn)一步提數(shù)據(jù)抵抗各種可能安全因素的容災(zāi)能力。針對這一應(yīng)用需求,市場上紛紛推出基于SAN的異地容災(zāi)軟、硬件產(chǎn)品,希望能夠為用戶提供整套以SAN網(wǎng)絡(luò)環(huán)境和異地實時備份為基礎(chǔ)的,高效、可靠的異地容災(zāi)解決方案,并且能夠為用戶提供支持各種操作系統(tǒng)平臺、數(shù)據(jù)庫應(yīng)用和網(wǎng)絡(luò)應(yīng)用的系統(tǒng)容災(zāi)服務(wù)。而本文主要介紹的是Oracle公司的容災(zāi)技術(shù)。隨著Oracle數(shù)據(jù)庫的逐步發(fā)展,Oracle數(shù)據(jù)庫被使用于各行各業(yè),使用Oracle數(shù)據(jù)庫的大型公司也隨之不斷的增加,因而對于Oracle數(shù)據(jù)庫的安全性,人們也有了新的擔(dān)憂和考慮,因此Oracle數(shù)據(jù)庫備份和恢復(fù)技術(shù)的研究在國內(nèi)外如雨后春筍,迅速的不斷發(fā)展。但是,如果這時發(fā)生不可預(yù)測的自然災(zāi)害以及突發(fā)事件,導(dǎo)致整個數(shù)據(jù)保護(hù)體系崩潰時,將給企業(yè)帶來毀滅性打擊。如果企業(yè)對數(shù)據(jù)安全要求很高,就應(yīng)該搭建容災(zāi)系統(tǒng)。第二章數(shù)據(jù)庫備份方案2.1備份文件2.1.1定義參數(shù)文件:記錄數(shù)據(jù)庫的系統(tǒng)配置文件,每當(dāng)數(shù)據(jù)庫啟動,Oracle自動地從參數(shù)文件中讀取系統(tǒng)參數(shù)設(shè)置來配置啟動數(shù)據(jù)庫。如內(nèi)存池的分配,允許打開的進(jìn)程數(shù)和會話數(shù)等??刂莆募嚎刂莆募嵌M(jìn)制文件,數(shù)據(jù)庫的結(jié)構(gòu)、數(shù)據(jù)文件和日志文件的一些信息都包含在其中。控制文件并不大,但是它在數(shù)據(jù)空中最重要的文件,只有數(shù)據(jù)庫進(jìn)程才可以對控制文件的內(nèi)容進(jìn)行更新,控制文件內(nèi)容主要包括數(shù)據(jù)庫的名稱(sid),位置,聯(lián)機(jī)、脫機(jī)的狀態(tài),RedoLogFile的名稱和位置,每個表空間名稱,歸檔日志文件的信息,檢查點(CheckPoint)信息,重做信息,rman備份信息等等。數(shù)據(jù)文件:用來存放數(shù)據(jù)的文件,每個數(shù)據(jù)庫一定是至少含有一個數(shù)據(jù)文件(system01.dbf),若存在多個數(shù)據(jù)文件,應(yīng)該分別存放于不同的磁盤上,這樣做不僅能提高數(shù)據(jù)的存取速度,有利于提高數(shù)據(jù)庫的性能,而且還能高度容災(zāi)。重做日志文件:數(shù)據(jù)庫日志文件包括歸檔的日志和在線的日志,當(dāng)數(shù)據(jù)庫被修改是,就會記錄在這些文件當(dāng)中。Oracle數(shù)據(jù)庫必須至少包含兩組在線日志,在線日志可以循環(huán)使用,當(dāng)正在寫的在線日志被寫滿后,就會切換到另一組在線日志,后者的內(nèi)容會被覆蓋,這個過程叫作日志切換(LogSwitch),在日志切換時會自動觸發(fā)檢查點(CheckPoint),使內(nèi)存中的數(shù)據(jù)寫到數(shù)據(jù)文件當(dāng)中。如果數(shù)據(jù)庫執(zhí)行了DML語句,就會被記錄到日志文件中,并且記錄動作是在改變數(shù)據(jù)前進(jìn)行的,正是因為日志文件記錄了數(shù)據(jù)庫所有的修改操作,因此假如有過去某時間點的備份文件,并且有從備份時間點到現(xiàn)在時間點的所有日志文件,就可以通過在備份文件上“重做”這些日志的方式,把數(shù)據(jù)文件恢復(fù)到當(dāng)前狀態(tài)或者當(dāng)中的任何時點的狀態(tài)。為了達(dá)到防止日志組文件失效的目的,應(yīng)該對每一個日志組中的每一個日志文件做一份或多份鏡像,每個日志組文件和它的備份鏡像文件稱為其日志組的成員。兩個相同的成員應(yīng)該分別存在不相同的磁盤上,這樣做的目的是,可以避免磁盤因外部原因失效時,相同日志組的鏡像日志一起失效。2.1.2主要的內(nèi)容Pfile:系統(tǒng)的參數(shù)文件,可用vim,vi等編輯器進(jìn)行修改,其文件名一般是init<sid>.oraSpfile:二進(jìn)制參數(shù)文件,不能使用編輯器直接進(jìn)行修改,只可以存放在Oracle的服務(wù)器上,可以使用EM網(wǎng)頁或指令(altersystem|sessionsetparameter_name=values<>)來修改,文件名通常為Spfile<sid>.ora,支持RMAN備份。System01.dbf:記錄系統(tǒng)運行的信息,包含所有的數(shù)據(jù)字典,PL/SQL程序代碼及其他系統(tǒng)信息。Sysaux01.dbf:system01.dbf文件的輔助文件,存放數(shù)據(jù)庫系統(tǒng)活動的工具,例如LogMiner。Undotbs01.dbf:存放系統(tǒng)運行時的回退信息,即DML操作后的舊數(shù)據(jù)信息。Users01.dbf:新建用戶未指定存儲空間時,默認(rèn)數(shù)據(jù)存放的文件。Example01.dbf:存放事例數(shù)據(jù)信息。2.1.3優(yōu)先級別Oracle啟動讀取參數(shù)文件的順序,如果個文件都不存在,則Oracle會報錯:spfile<sid>.ora-->spfile.ora-->init<sid>.ora2.1.4文件之間的轉(zhuǎn)化從spfile來生成pfilecreatepfilefromspfile,執(zhí)行完畢后,pfile將$ORACLE_HOME/dbs/init$ORACLE_SID.ora也可以指定pfile的路徑:createpfile=‘<dir>’fromspfile由pfile生成spfilecreatespfilefrompfilecreatespfilefrompfile=‘<dir>’createspfile=‘<dir>’frompfile2.2備份恢復(fù)方案2.2.1備份恢復(fù)的分類按照備份恢復(fù)的方式,可以分為邏輯備份、冷備份(脫機(jī)備份)、熱備份,其中,熱備份和冷備份合稱為物理備份。按照備份的工具,可以分為EXP/IMP備份、操作系統(tǒng)備份RMAN、第三方工具備份,如VERITAS等。2.2.2備份方案的介紹邏輯備份是指只備份數(shù)據(jù)庫中的數(shù)據(jù)但不記錄數(shù)據(jù)物理位置的一種備份。導(dǎo)出為數(shù)據(jù)庫作一個二進(jìn)制的備份,并且這個備份只能由其姐妹程序imp來讀取操作系統(tǒng)備份包括冷備份和熱備份。操作系統(tǒng)備份和上面的邏輯備份有本質(zhì)的區(qū)別,它將拷貝整個的數(shù)據(jù)文件。冷備份在文件級備份開始前數(shù)據(jù)庫必須徹底關(guān)閉。熱備份是當(dāng)數(shù)據(jù)庫打開時的操作系統(tǒng)備份。RecoveryManager(RMAN)是一個使DBA能很方便地對數(shù)據(jù)庫執(zhí)行備份和恢復(fù)任務(wù)的oracle應(yīng)用工具,能夠提供DBA對企業(yè)數(shù)據(jù)庫備份與恢復(fù)操作的集中控制。2.3數(shù)據(jù)庫的備份策略2.3.1概述爭取的備份策略不僅能保證數(shù)據(jù)庫服務(wù)器的7*24小時的高性能的運行,還能保證備份與恢復(fù)的快速性與可靠性。采用多級備份就是為了減少每天備份所需要的時間,而保證系統(tǒng)有良好的恢復(fù)性?;謴?fù)時間與備份時間要有一個權(quán)衡。比如只要進(jìn)行一個數(shù)據(jù)庫的全備份,然后就只備份歸檔也可以保證能把數(shù)據(jù)庫恢復(fù)到最新的狀態(tài),但是這樣的恢復(fù)時間將是不可容忍的。

第三章備份與恢復(fù)功能設(shè)計與實現(xiàn)3.1冷備份(脫機(jī)備份)3.1.1定義冷備份(脫機(jī)備份)是當(dāng)數(shù)據(jù)庫的一切可以被讀取和寫入的數(shù)據(jù)庫物理文件(參數(shù)文件、控制文件,數(shù)據(jù)文件等)具有一樣的系統(tǒng)改變號(SCN)時才能進(jìn)行的數(shù)據(jù)庫的一致性備份,數(shù)據(jù)庫保持在同一狀態(tài)的唯一方法是將數(shù)據(jù)庫正常關(guān)閉,因此只在數(shù)據(jù)庫正常關(guān)閉情況下的備份才算是一致性備份。冷備份既適用于archivelog模式,也適用于noarchivelog模式。3.1.2優(yōu)點與缺點優(yōu)點:快速并且相對簡單的備份方法(因為僅僅需要拷貝文件)。容易恢復(fù)至某個時間點上(僅需將文件拷貝回去)。低度維護(hù),高度安全。缺點:單獨使用時,只能提供到“某一時間點上”的恢復(fù)。在冷備份過程中,數(shù)據(jù)庫必須是關(guān)閉狀態(tài)。3.1.3步驟、查看數(shù)據(jù)庫文件物理位置。圖2.1數(shù)據(jù)文件圖2.2控制文件圖2.3日志文件圖2.4參數(shù)文件關(guān)閉運行的數(shù)據(jù)庫。備份參數(shù)文件,控制文件,數(shù)據(jù)文件,日志文件到指定目錄下。3.1.4備份恢復(fù)功能設(shè)計與實現(xiàn)(1)建立測試表test,并且插入數(shù)據(jù)‘1’,恢復(fù)后,數(shù)據(jù)應(yīng)該還是存在的圖2.5創(chuàng)建測試表圖2.6(2)關(guān)閉數(shù)據(jù)庫,執(zhí)行備份圖2.7執(zhí)行冷備份(3)插入另外一條數(shù)據(jù)‘2’,恢復(fù)時應(yīng)該丟失的數(shù)據(jù)圖2.8插入驗證信息(4)關(guān)閉數(shù)據(jù)庫,刪除所有的文件:數(shù)據(jù)文件,控制文件,參數(shù)文件,日志文件圖2.9刪除文件(5)啟動數(shù)據(jù)庫圖2.10啟動數(shù)據(jù)庫(6)恢復(fù)冷備份的文件到各自的文件夾圖2.11冷備份的恢復(fù)(7)驗證冷備份的恢復(fù),數(shù)據(jù)‘2’丟失,只有數(shù)據(jù)‘1’,備份后插入的數(shù)據(jù)不存在。圖2.12驗證恢復(fù)3.2熱備份恢復(fù)(聯(lián)機(jī)備份恢復(fù))3.2.1定義數(shù)據(jù)庫熱備份是指數(shù)據(jù)庫在啟動運行的狀態(tài)下,對數(shù)據(jù)庫的控制文件、參數(shù)文件、數(shù)據(jù)文件等進(jìn)行備份操作。熱備份是用戶管理備份恢復(fù)的一種方式,也是除了RMAN備份之外比較經(jīng)常使用的一種備份方式。熱備份僅僅適用于archivelog狀態(tài)。3.2.2優(yōu)點與缺點優(yōu)點:可以在表空間或數(shù)據(jù)文件級備份,備份的時間短。備份時數(shù)據(jù)庫仍可以使用。可達(dá)到秒級恢復(fù)(恢復(fù)到某一時間點上)缺點:不能出錯,否則備份數(shù)據(jù)不可用。備份方法相對復(fù)雜,難于維護(hù)。3.2.3備份設(shè)計與實現(xiàn)凍結(jié)塊頭-->控制SCN在備份時不發(fā)生變化進(jìn)行物理拷貝解凍塊頭-->讓SCN可以變化(當(dāng)對SCN解凍后,系統(tǒng)會自動更新SCN至最新的狀態(tài))查看是否在自動歸檔模式:圖2.13非歸檔模式如果不是則啟動自動歸檔模式:圖2.14啟動歸檔模式圖2.15在線備份數(shù)據(jù)文件圖2.16在線備份控制文件圖2.17備份參數(shù)文件和重做日志歸檔文件完全恢復(fù):(1)用戶表空間數(shù)據(jù)文件受損A、查看數(shù)據(jù)庫是否運行在歸檔模式,確保能把數(shù)據(jù)完全恢復(fù),如果不是,則設(shè)置為自動歸檔模式圖2.18歸檔模式B、在用戶表空間創(chuàng)建測試表,并且插入測試數(shù)據(jù)圖2.19插入驗證數(shù)據(jù)C、對users表空間數(shù)據(jù)文件進(jìn)行熱備份圖2.20備份用戶空間D、插入熱備份后的另外一條數(shù)據(jù),驗證熱備份完全恢復(fù)圖2.21插入測試數(shù)據(jù)E、關(guān)閉數(shù)據(jù)庫,刪除用戶表空間文件,模擬出錯圖2.22模擬故障查表v$recover_file,用戶數(shù)據(jù)文件需要恢復(fù)圖2.23查看需要回復(fù)的數(shù)據(jù)文件如果實際中,數(shù)據(jù)庫需要對外服務(wù),但是用戶數(shù)據(jù)文件尚未修復(fù),可以選擇先把數(shù)據(jù)文件離線再進(jìn)行修復(fù)。圖2.24離線數(shù)據(jù)文件圖2.25恢復(fù)離線的數(shù)據(jù)文件F、查看驗證熱備份的數(shù)據(jù),確認(rèn)是否完全恢復(fù),重做數(shù)據(jù)文件到當(dāng)前的時間點,確保備份后的數(shù)據(jù)還在,前提是要處于歸檔模式,切歸檔重做文件都沒被刪除圖2.26查看熱備份的效果(2)用戶表空間數(shù)據(jù)文件受損且無備份的恢復(fù)第一種情況,先刪除數(shù)據(jù)文件,在觸發(fā)檢查點A、創(chuàng)建用戶表空間做測試圖2.27創(chuàng)建測試數(shù)據(jù)B、刪除用戶表空間,模擬故障,表格還在的原因是因為數(shù)據(jù)已經(jīng)緩存到內(nèi)存了,查找內(nèi)容實際是在內(nèi)存找圖2.28模擬故障C、當(dāng)觸發(fā)檢查點,內(nèi)存數(shù)據(jù)會寫盤,然而查找數(shù)據(jù)的話,沒改變數(shù)據(jù)內(nèi)容,寫盤的時候不需要修改內(nèi)容,故數(shù)據(jù)文件test.dbf不存在也不會報錯,但是再查找表的內(nèi)容的時候,要從磁盤讀,因此發(fā)現(xiàn)了數(shù)據(jù)文件不存在圖2.29數(shù)據(jù)文件故障D、關(guān)閉系統(tǒng),然后啟動后發(fā)現(xiàn),數(shù)據(jù)文件處于recover狀態(tài)圖2.30recover狀態(tài)的數(shù)據(jù)文件E、創(chuàng)建丟失的數(shù)據(jù)文件,恢復(fù)文件的內(nèi)容圖2.31創(chuàng)建需要的文件圖2.32查看數(shù)據(jù)文件狀態(tài)F、驗證數(shù)據(jù)是否還是存在,數(shù)據(jù)還在的條件是,歸檔日志文件存在的時間要比表空間創(chuàng)建的時間要久遠(yuǎn),才有重做日志文件支持完全恢復(fù)。圖2.33驗證恢復(fù)第二種情況:先觸發(fā)檢查點,在刪除數(shù)據(jù)文件圖2.34情況二圖2.34數(shù)據(jù)文件需要恢復(fù)圖2.35恢復(fù)后的數(shù)據(jù)(3)System表空間數(shù)據(jù)文件或者大量數(shù)據(jù)文件受損A、對system表空間進(jìn)行熱備份圖2.35熱備份B、刪除system數(shù)據(jù)文件,模擬數(shù)據(jù)文件損壞圖2.36刪除數(shù)據(jù)文件C、把熱備份的數(shù)據(jù)文件重新拷回去,恢復(fù)系統(tǒng)數(shù)據(jù)文件圖2.37恢復(fù)數(shù)據(jù)文件(4)回滾文件損壞的恢復(fù)A、查看回滾表空間的相關(guān)信息(回滾文件可以在線刪除)圖2.38回滾表空間信息B、刪除undo數(shù)據(jù)文件,啟動數(shù)據(jù)庫圖2.39模擬故障圖2.40故障C、把回滾數(shù)據(jù)文件離線,啟動數(shù)據(jù)庫圖2.41離線數(shù)據(jù)文件D、創(chuàng)建一個新的回滾表空間,并修改參數(shù)undo_tablespace,使undotbs1能成功刪除圖2.42創(chuàng)建回滾表空間圖2.43創(chuàng)建修改回滾表空間E、創(chuàng)建測試表test圖2.44創(chuàng)建測試數(shù)據(jù)F、關(guān)閉數(shù)據(jù)庫,發(fā)現(xiàn)數(shù)據(jù)庫一直關(guān)閉不了,掛起了,查看警告文件圖2.45關(guān)機(jī)掛起圖2.46查看跟蹤文件G、啟動數(shù)據(jù)庫圖2.47故障H、修改參數(shù)文件pfile,增加一行圖2.48修改SPFILE圖2.48啟動數(shù)據(jù)庫(5)臨時文件損壞的修復(fù)A、當(dāng)控制文件不需要重建的時候圖2.49模擬故障B、控制文件重建的時候,因為控制文件的創(chuàng)建不包含temp的路徑,若創(chuàng)建時指定會報錯,故在啟動數(shù)據(jù)庫后要手工綁定。圖2.50模擬故障2圖2.51查看臨時表空間圖2.52大查詢圖2.53手工創(chuàng)建臨時表空間不完全恢復(fù)(1)基于time時間的恢復(fù)基于時間的恢復(fù)能將數(shù)據(jù)庫通過不完全恢復(fù),到過去的某一時間點,經(jīng)常被用在誤操作導(dǎo)致的刪除數(shù)據(jù),在備機(jī)上將數(shù)據(jù)庫恢復(fù)至被刪除時間點之前的狀態(tài),然后把該表導(dǎo)出到正式環(huán)境,以挽回丟失數(shù)據(jù)。A、建立測試表test,插入測試數(shù)據(jù)圖2.54創(chuàng)建測試數(shù)據(jù)表B、熱備份除temp表空間以外所有的數(shù)據(jù)文件,雖然恢復(fù)的數(shù)據(jù)在users表空間,但是不完全恢復(fù)基于時間的恢復(fù),所有的表空間數(shù)據(jù)文件都應(yīng)該恢復(fù)到同一個時間點上,因此,需要備份所有數(shù)據(jù)文件。圖2.55熱備份所有文件C、繼續(xù)插入測試數(shù)據(jù),熱備份后的數(shù)據(jù),如果僅僅恢復(fù)備份,數(shù)據(jù)應(yīng)該不存在,查看數(shù)據(jù)丟失之前的時間點,用于不完全恢復(fù)的時間參考。圖2.54繼續(xù)創(chuàng)建測試數(shù)據(jù)D、刪除測試數(shù)據(jù)表,關(guān)閉數(shù)據(jù)庫,拷回?zé)醾浞?,啟動到mount狀態(tài),根據(jù)時間點恢復(fù)。圖2.55E、重新以resetlogs方式打開數(shù)據(jù)庫,查看丟失數(shù)據(jù)是否存在。圖2.56驗證(2)基于改變scn的恢復(fù)基于改變scn號(systemchangenumber)的恢復(fù)可以將數(shù)據(jù)庫不完全恢復(fù)到過去的某一個scm改變點,也常用于在誤操作刪除數(shù)據(jù)后,在備用機(jī)上將數(shù)據(jù)庫恢復(fù)到刪除scn之前,然后把表導(dǎo)出到正式的環(huán)境,挽回丟失的數(shù)據(jù)。圖2.57圖2.58圖2.59(3)控制文件損壞的恢復(fù)*單個控制文件被破壞由于數(shù)據(jù)庫的三個控制文件都是相互備份的,因此,當(dāng)損壞一個數(shù)據(jù)文件的時候,可以從另外的兩個數(shù)據(jù)文件拷貝創(chuàng)建新的數(shù)據(jù)文件,名字相同即可?;蛘甙裵file中控制文件的數(shù)量改變?yōu)閮蓚€,重新以pfile啟動數(shù)據(jù)庫圖2.60圖2.61*多個控制文件被破壞在很多個控制文件都被破壞的情況下,如果沒有對控制文件做備份,那么只能通過重建控制文件生成。在創(chuàng)建控制文件的時候,應(yīng)該很清楚的了解到每一個數(shù)據(jù)文件,日志文件的具體位置,確保在重建數(shù)據(jù)文件之后,數(shù)據(jù)庫的正確性,并且,在重建控制文件的時,是不包含temp01.dbf數(shù)據(jù)文件的,只能在打開數(shù)據(jù)庫后,進(jìn)行temp表空間的重新建立,以達(dá)到temp表空間的使用。圖2.62圖2.63(4)日志文件損壞的恢復(fù)*正常關(guān)機(jī)情況下非當(dāng)前聯(lián)機(jī)日志文件被破壞正常關(guān)閉DB時緩存均已寫盤,且logfile已歸檔,故僅需clearlogfile重新生成丟失的非當(dāng)前日志文件即可,無數(shù)據(jù)丟失;若日志未歸檔,必須加unarchived參數(shù),才會允許重新生成日志文件,并標(biāo)志所有備份失效,應(yīng)該重做全備份。圖2.64圖2.65*正常關(guān)機(jī)情況下當(dāng)前聯(lián)機(jī)(或所有)日志文件被破壞正常關(guān)閉DB時緩存均已寫盤,且logfile已歸檔,因此僅需untilcancel取消系統(tǒng)查找當(dāng)前聯(lián)機(jī)日志,并且resetlogs重新生成對視的當(dāng)前聯(lián)機(jī)日志文件即可,無數(shù)據(jù)丟失。圖2.66圖2.67*DB運行時或非正常關(guān)機(jī)的情況下已歸檔active日志文件被破壞圖2.68系統(tǒng)suggestion提示文件正確即可回車確認(rèn)使用該文件進(jìn)行重做,提示錯誤則可手工輸入filename使用指定文件進(jìn)行重做,這兩種重做都是單步進(jìn)行的,重做完本歸檔或者日志文件后,又會繼續(xù)提示指定用來重做的下一個歸檔或日志文件,而auto則自動尋找所有歸檔或日志文件進(jìn)行重做,非單步進(jìn)行,后續(xù)歸檔或日志文件的重做無提示等待確認(rèn)圖2.69前一個歸檔或日志文件已經(jīng)完成恢復(fù)重做,不再需要,且再次提示的用于后續(xù)恢復(fù)的歸檔文件是錯誤的而應(yīng)該使用當(dāng)前日志文件進(jìn)行恢復(fù),因此手工輸入當(dāng)前日志文件名進(jìn)行恢復(fù)。因active日志已經(jīng)被歸檔,因此oracle數(shù)據(jù)庫可以到歸檔文件或者current日志文件中找到需要的數(shù)據(jù),以進(jìn)行實例恢復(fù),次過程沒有數(shù)據(jù)丟失,最后resetlogs用來重新生成已經(jīng)丟失的歸檔active的日志文件。*DB運行時或非正常關(guān)機(jī)情況下未歸檔active或current日志文件被破壞圖2.70圖2.71圖2.72因active/current日志并沒有被歸檔,所以數(shù)據(jù)庫沒辦法到歸檔日志中找到需要數(shù)據(jù)進(jìn)行數(shù)據(jù)庫的實例恢復(fù),數(shù)據(jù)文件在沒有歸檔active或current日志文件上不一致,并且沒辦法使用已經(jīng)丟失的沒有歸檔文檔active或當(dāng)前日志文件把數(shù)據(jù)文件重做到一致的時間點上,只可以通過全備份進(jìn)行不完全恢復(fù),將所有數(shù)據(jù)文件時間點重做到最后一個可用日志文件中的最后一條重做記錄處,其后丟失的未歸檔active或當(dāng)前日志文件通過resetlogs重新生成而未進(jìn)行重做,故有數(shù)據(jù)丟失,但數(shù)據(jù)仍一致的,所有數(shù)據(jù)文件均處于最后一個日志文件中最后一條重做記錄所對應(yīng)的時間點處。*DB運行時或非正常關(guān)機(jī)情況下未歸檔active或current日志文件被破壞(無備份)圖2.73圖2.74圖2.75圖2.76因current/active日志并沒有歸檔,因此數(shù)據(jù)庫沒辦法到歸檔日子文件中找到需要的數(shù)據(jù)進(jìn)行實例恢復(fù),數(shù)據(jù)文件在沒有歸檔active或current當(dāng)前日志文件上是不一致的,并且沒有全備份重做恢復(fù)到相同的時間點上面,只能通過設(shè)置_allow_resetlogs_corruption=true隱含參數(shù),并resetlogs重新生成丟失的未歸檔active或current日志文件,使數(shù)據(jù)庫在不一致情況下啟動以便備出數(shù)據(jù),這種操作會有數(shù)據(jù)丟失。

第四章總結(jié)保證oracle數(shù)據(jù)庫的安全是系統(tǒng)安全的重要組成部分,必須要設(shè)計完善的數(shù)據(jù)庫備份和恢復(fù)方案。Oracle提供的各種工具結(jié)合起來使用能夠使數(shù)據(jù)庫的備份和恢復(fù)變得簡單。在實際的oracle數(shù)據(jù)庫的備份和恢復(fù)中,會有許多不同的和復(fù)雜的情況出現(xiàn),針對不同的情況,要本著使數(shù)據(jù)具有最大的可恢復(fù)性和恢復(fù)時間最短的原則去進(jìn)行數(shù)據(jù)庫的恢復(fù),這需要大量的實驗和經(jīng)驗積累。參考文獻(xiàn)ThomasKyte.ExpertOne-on-One[M].Apress,2003.8BenjaminRosenzweig,ElenaSilvestrovaRakhimov.OraclePLSQL實例精解第4版[M].PrenticeHallPTR,2009.6ThomasKyte.ExpertOracleDatabaseArchitecture2ndEdition[M].Apress,2010.7Administrator'sGuide.oracle公司BackupandRecoveryAdvancedUser'sGuide.oracle公司BackupandRecoveryBasics.oracle公司李丙洋.涂抹oracle--三思筆記之一步一步學(xué)oracle[M]中國水利水電出版社,2010.1KarenMorton.OracleSQL高級編程[M].人民郵電出版社,2011.11梁敬彬,梁敬弘.收獲不止oracle[M].電子工業(yè)出版社,2013.5蓋國強(qiáng).循序漸進(jìn)oracle數(shù)據(jù)庫管理、優(yōu)化與備份恢復(fù)[M].人民郵電出版社,2011.8LanAbramson,MicheaelAbbey,MichaelJ.Corey,竇朝輝.oracledatabase11g:初學(xué)者指南[M].清華大學(xué)出版社,2010-01蓋國強(qiáng).oracledba手記3:數(shù)據(jù)庫性能優(yōu)化與內(nèi)部原理解析[M].電子工業(yè)出版社,2011.9KGopalakrishnan,賈洪峰,梁濤,郭紹明.oracledatabase11gRac手冊[M].清華大學(xué)出版社,2012.6JohnBeresniewicz,AdrianBillington,MartinBuchi.oraclePL/SQL實戰(zhàn)[M].人民郵電出版社,2012.11蒙邵良,oracledba高效入職指南[M].清華大學(xué)出版社,2012.1郭鄭州,陳軍紅.oracle完全學(xué)習(xí)手冊[M].清華大學(xué)出版社,2011.1包光磊.臨危不懼:oracle11g數(shù)據(jù)庫恢復(fù)技術(shù)[M].電子工業(yè)出版社,2012.7RobertG.Freeman,MatthewHart,王念濱,陳子陽.oracledatabase11gRman備份與恢復(fù)[M].清華大學(xué)出版社,2011.4EdwardWhalen,陳曙暉.基于Linux平臺的oracledatabase10g管理[M].清華大學(xué)出版社,2007.1林樹澤,歷鐵帥,何會軍.oracle數(shù)據(jù)庫管理之道[M].清華大學(xué)出版社,2012.7附錄資料:不需要的可以自行刪除C語言曲線函數(shù)像素函數(shù)putpixel()畫像素點函數(shù)getpixel()返回像素色函數(shù)直線和線型函數(shù)line()畫線函數(shù)lineto()畫線函數(shù)linerel()相對畫線函數(shù)setlinestyle()設(shè)置線型函數(shù)getlinesettings()獲取線型設(shè)置函數(shù)setwritemode()設(shè)置畫線模式函數(shù)多邊形函數(shù)rectangle()畫矩形函數(shù)bar()畫條函數(shù)bar3d()畫條塊函數(shù)drawpoly()畫多邊形函數(shù)圓、弧和曲線函數(shù)getaspectratio()獲取縱橫比函數(shù)circle()畫圓函數(shù)arc()畫圓弧函數(shù)ellipse()畫橢圓弧函數(shù)fillellipse()畫橢圓區(qū)函數(shù)pieslice()畫扇區(qū)函數(shù)sector()畫橢圓扇區(qū)函數(shù)getarccoords()獲取圓弧坐標(biāo)函數(shù)填充函數(shù)setfillstyle()設(shè)置填充圖樣和顏色函數(shù)setfillpattern()設(shè)置用戶圖樣函數(shù)floodfill()填充閉域函數(shù)fillpoly()填充多邊形函數(shù)getfillsettings()獲取填充設(shè)置函數(shù)getfillpattern()獲取用戶圖樣設(shè)置函數(shù)圖像函數(shù)imagesize()圖像存儲大小函數(shù)getimage()保存圖像函數(shù)putimage()輸出圖像函數(shù)圖形和圖像函數(shù)對許多圖形應(yīng)用程序,直線和曲線是非常有用的。但對有些圖形只能靠操作單個像素才能畫出。當(dāng)然如果沒有畫像素的功能,就無法操作直線和曲線的函數(shù)。而且通過大規(guī)模使用像素功能,整個圖形就可以保存、寫、擦除和與屏幕上的原有圖形進(jìn)行疊加。(一)像素函數(shù)putpixel()畫像素點函數(shù)功能:函數(shù)putpixel()在圖形模式下屏幕上畫一個像素點。用法:函數(shù)調(diào)用方式為voidputpixel(intx,inty,intcolor);說明:參數(shù)x,y為像素點的坐標(biāo),color是該像素點的顏色,它可以是顏色符號名,也可以是整型色彩值。此函數(shù)相應(yīng)的頭文件是graphics.h返回值:無例:在屏幕上(6,8)處畫一個紅色像素點:putpixel(6,8,RED);getpixel()返回像素色函數(shù)功能:函數(shù)getpixel()返回像素點顏色值。用法:該函數(shù)調(diào)用方式為intgetpixel(intx,inty);說明:參數(shù)x,y為像素點坐標(biāo)。函數(shù)的返回值可以不反映實際彩色值,這取決于調(diào)色板的設(shè)置情況(參見setpalette()函數(shù))。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回一個像素點色彩值。例:把屏幕上(8,6)點的像素顏色值賦給變量color。color=getpixel(8,6);(二)直線和線型函數(shù)有三個畫直線的函數(shù),即line(),lineto(),linerel()。這些直線使用整型坐標(biāo),并相對于當(dāng)前圖形視口,但不一定受視口限制,如果視口裁剪標(biāo)志clip為真,那么直線將受到視口邊緣截斷;如果clip為假,即使終點坐標(biāo)或新的當(dāng)前位置在圖形視口或屏幕極限之外,直線截斷到屏幕極限。有兩種線寬及幾種線型可供選擇,也可以自己定義線圖樣。下面分別介紹直線和線型函數(shù)。line()畫線函數(shù)功能:函數(shù)line()使用當(dāng)前繪圖色、線型及線寬,在給定的兩點間畫一直線。用法:該函數(shù)調(diào)用方式為voidline(intstartx,intstarty,intendx,intendy);說明:參數(shù)startx,starty為起點坐標(biāo),endx,endy為終點坐標(biāo),函數(shù)調(diào)用前后,圖形狀態(tài)下屏幕光標(biāo)(一般不可見)當(dāng)前位置不改變。此函數(shù)相應(yīng)的頭文件為graphics.h返回值:無例:見函數(shù)60.linerel()中的實例。lineto()畫線函數(shù)功能:函數(shù)lineto()使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置畫一直線到指定位置。用法:此函數(shù)調(diào)用方式為voidlineto(intx,inty);說明:參數(shù)x,y為指定點的坐標(biāo),函數(shù)調(diào)用后,當(dāng)前位置改變到指定點(x,y)。該函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:見函數(shù)60.linerel()中的實例。linerel()相對畫線函數(shù)功能:函數(shù)linerel()使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置開始,按指定的水平和垂直偏移距離畫一直線。用法:這個函數(shù)調(diào)用方式為voidlinerel(intdx,intdy);說明:參數(shù)dx,dy分別是水平偏移距離和垂直偏移距離。函數(shù)調(diào)用后,當(dāng)前位置變?yōu)樵黾悠凭嚯x后的位置,例如,原來的位置是(8,6),調(diào)用函數(shù)linerel(10,18)后,當(dāng)前位置為(18,24)。返回值:無例:下面的程序為畫線函數(shù)調(diào)用實例:#include<graphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");setcolor(15);line(66,66,88,88);lineto(100,100);linerel(36,64);getch();restorecrtmode();}setlinestyle()設(shè)置線型函數(shù)功能:setlinestyle()為畫線函數(shù)設(shè)置當(dāng)前線型,包括線型、線圖樣和線寬。用法:setlinestyle()函數(shù)調(diào)用方式為voidsetlinestyle(intstly,unsignedpattern,intwigth);說明:參數(shù)style為線型取值,也可以用相應(yīng)名稱表示,如表1-10中所示。參數(shù)pattern用于自定義線圖樣,它是16位(bit)字,只有當(dāng)style=USERBIT_LINE(值為1)時,pattern的值才有意義,使用用戶自定義線圖樣,與圖樣中“1”位對應(yīng)的像素顯示,因此,pattern=0xFFFF,則畫實線;pattern=0x9999,則畫每隔兩個像素交替顯示的虛線,如果要畫長虛線,那么pattern的值可為0xFF00和0xF00F,當(dāng)style不為USERBIT_LINE值時,雖然pattern的值不起作用,但扔須為它提供一個值,一般取為0。參數(shù)wigth用來設(shè)定線寬,其取值見表1-11,表中給出了兩個值,即1和3,實際上,線寬取值為2也是可以接受的。若用非法參數(shù)調(diào)用setlinestyle()函數(shù),那么graphresult()會返回錯誤代碼,并且當(dāng)前線型繼續(xù)有效。TurboC提供的線型與線寬定義在頭文件graphics.h中,表1-10和1-11分別列出了參數(shù)的取值與含義。表1-10線型名稱取值含義SOLID_LINE0實線DOTTED_LINE1點線CENTER_LINE2中心線DASHED_LINE3虛線USERBIT_LINE4用戶自定義線型表1-11線寬名稱取值說明NORM_WIDTH(常寬)1一個像素寬(缺省值)THICK_WIDTH(加寬)3三個像素寬這個函數(shù)的頭文件是graphics.h返回值:無例:下面的程序顯示了BC中所提供的線型圖樣:#include<graphics.h>voidmain(){intdriver,mode;i;driver=DETECT;mode=0;initgraph(&driver,&mode,"");for(i=0;i<4;i++){setlinestyle(i,0,1);line(i*50,200,i*50+60,200);}getch();restorecrtmode();}getlinesettings()獲取線型設(shè)置函數(shù)功能:函數(shù)getlinesettings()用當(dāng)前設(shè)置的線型、線圖樣和線寬填寫linesettingstype型結(jié)構(gòu)。用法:函數(shù)調(diào)用方式為voidgetlinesettings(structlinesettingstype*info);說明:此函數(shù)調(diào)用執(zhí)行后,當(dāng)前的線型、線圖樣和線寬值被裝入info指向的結(jié)構(gòu)里,從而可從該結(jié)構(gòu)中獲得線型設(shè)置。linesettingstype型結(jié)構(gòu)定義如下:structlinesettingstype{intlinestyle;unsignedupattern;intthickness;};其中l(wèi)inestyle用于存放線型,線型值為表1-10中的各值之一。upattern用為裝入用戶自定義線圖樣,這是16位字,每一位等于一個像素,如果哪個位被設(shè)置,那么該像素打開,否則關(guān)閉。thickness為線寬值存放的變量,可參見表1-11。getlinesettings()函數(shù)對應(yīng)的頭文件為graphics.h返回值:返回的線型設(shè)置存放在info指向的結(jié)構(gòu)中。例:把當(dāng)前線型的設(shè)置寫入info結(jié)構(gòu):structlinesettingstypeinfo;getlinesettings(&info);setwritemode()設(shè)置畫線模式函數(shù)功能:函數(shù)setwritemode()設(shè)置畫線模式用法:函數(shù)調(diào)用方式為voidsetwritemode()(intmode);說明:參數(shù)mode只有兩個取值0和1,若mode為0,則新畫的線將覆蓋屏幕上原有的圖形,此為缺省畫線輸出模式。如果mode為1,那么新畫的像素點與原有圖形的像素點先進(jìn)行異或(XOR)運算,然后輸出到屏幕上,使用這種畫線輸出模式,第二次畫同一圖形時,將擦除該圖形。調(diào)用setwritemode()設(shè)置的畫線輸出模式只影響函數(shù)line(),lineto(),linerel(),recangle()和drawpoly()。setwritemode()函數(shù)對應(yīng)的頭文件是graphics.h返回值:無例:設(shè)置畫線輸出模式為0:setwritemode(0);(三)、多邊形函數(shù)對多邊形,無疑可用畫直線函數(shù)來畫出它,但直接提供畫多邊形的函數(shù)會給用戶很大方便。最常見的多邊形有矩形、矩形塊(或稱條形)、多邊形和多邊形塊,我們還把長方形條塊也放到這里一起考慮,雖然它不是多邊形,但它的特例就是矩形(塊)。下面直接介紹畫多邊形的函數(shù)。rectangle()畫矩形函數(shù)功能:函數(shù)rectangle()用當(dāng)前繪圖色、線型及線寬,畫一個給定左上角與右下角的矩形(正方形或長方形)。用法:此函數(shù)調(diào)用方式為voidrectangle(intleft,inttop,intright,intbottom);說明:參數(shù)left,top是左上角點坐標(biāo),right,bottom是右下角點坐標(biāo)。如果有一個以上角點不在當(dāng)前圖形視口內(nèi),且裁剪標(biāo)志clip設(shè)置的是真(1),那么調(diào)用該函數(shù)后,只有在圖形視口內(nèi)的矩形部分才被畫出。這個函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:下面的程序畫一些矩形實例:#include<graphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");rectangle(80,80,220,200);rectangle(140,99,180,300);rectangle(6,6,88,88);rectangle(168,72,260,360);getch();restorecrtmode();}bar()畫條函數(shù)功能:函數(shù)bar()用當(dāng)前填充圖樣和填充色(注意不是給圖色)畫出一個指定上左上角與右下角的實心長條形(長方塊或正方塊),但沒有四條邊線)。用法:bar()函數(shù)調(diào)用方式為voidbar(intleft,inttop,intright,intbottom);說明:參數(shù)left,topright,bottom分別為左上角坐標(biāo)與右下角坐標(biāo),它們和調(diào)用函數(shù)rectangle()的情形相同,調(diào)用此函數(shù)前,可用setfillstyle()或setfillpattern()設(shè)置當(dāng)前填充圖樣和填充色。注意此函數(shù)只畫沒有邊線的條形,如果要畫有邊線的的條形,可調(diào)用下面的函數(shù)bar3d()來畫,并將深度參數(shù)設(shè)為0,同時topflag參數(shù)要設(shè)置為真,否則該條形無頂邊線。這應(yīng)的頭文件為graphics.h返回值:無例:見函數(shù)bar3d()中的實例。bar3d()畫條塊函數(shù)功能:函數(shù)bar3d()使用當(dāng)前繪圖色、線型及線寬畫出三維長方形條塊,并用當(dāng)前填充圖樣和填充色填充該三維條塊的表面。用法:此函數(shù)調(diào)用方式為voidbar3d(intleft,inttop,intright,intbottom,intdepth,inttopflag);說明:參數(shù)left,top,right,bottom分另為左上角與右下角坐標(biāo),這與bar()函數(shù)中的一樣。參數(shù)depth為條塊的深度,以像素為單位,通常按寬度的四分之一計算。深度方向通過屏顯縱橫比調(diào)節(jié)為約45度(即這時x/y比設(shè)置為1:1)。參數(shù)topflag相當(dāng)于一個布爾參數(shù),如果設(shè)置為1(真)那么條塊上放一頂面;若設(shè)置為0(假),則三維條形就沒有頂面,這樣可使多個三維條形疊加在一起。要使圖形更加美觀,可利用函數(shù)floodfill()或setfillpattern()來選擇填充圖樣和填充色(參見本小節(jié)(五)填充函數(shù))。bar3d()函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:下面的程序畫一個條形和條塊:#include<graphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");setfillstyle(SOLID-FILL,GREEN);bar(60,80,220,160);setfillstyle(SOLID-FILL,RED);bar3d(260,180,360,240,20,1);getch();restorecrtmode();}drawpoly()畫多邊形函數(shù)功能:函數(shù)drawpoly()用當(dāng)前繪圖色、線型及線寬,畫一個給定若干點所定義的多邊形。用法:此函數(shù)調(diào)用方式為voiddrawpoly(intpnumber,int*points);說明:參數(shù)pnumber為多邊形的頂點數(shù);參數(shù)points指向整型數(shù)組,該數(shù)組中是多邊形所有頂點(x,y)坐標(biāo)值,即一系列整數(shù)對,x坐標(biāo)值在前。顯然整型數(shù)組的維數(shù)至少為頂點數(shù)的2倍,在定義了多邊形所有頂點的數(shù)組polypoints時,頂點數(shù)目可通過計算sizeof(polypoints)除以2倍的sizeof(int)得到,這里除以2倍的原因是每個頂點有兩個整數(shù)坐標(biāo)值。另外有一點要注意,畫一個n個頂點的閉合圖形,頂點數(shù)必須等于n+1,并且最后一點(第n+1)點坐標(biāo)必須等于第一點的坐標(biāo)。drawpoly()函數(shù)對應(yīng)的頭文件為grpahics.h返回值:無例:下面的程序畫一個封閉星形圖與一個不封閉星形圖:#include<graphics.h>voidmain(){intdriver,mode;staticintpolypoints1[18]={100,100,110,120,100,130,120,125,140,140,130,120,140,110,120,115,100,100};staticintpolypoints2[18]={180,100,210,120,200,130,220,125,240,140,230,120,240,110,220,115,220,110};driver=DETECT;mode=0;initgraph(&driver,&mode,"");drawpoly(9,polypoints1);drawpoly(9,polypoints2);getch();restorecrtmode();}(四)、圓、弧和曲線函數(shù)在一個屏幕上畫得很圓的圖形到另一個屏幕上可能被壓扁或拉長,這是因為每一種顯示卡與之相應(yīng)的顯示模式都有一個縱橫比??v橫比是指像素的水平方向大小與垂直方向大小的比值。如VGA顯示卡由于偈素基本上是正方形,所以縱橫比為1.000。為了保證幾何圖形基本按預(yù)計情況顯示在屏幕上,用屏顯的縱橫比來計算和糾正不同硬件及顯示卡產(chǎn)生的畸變。計算縱橫比所需要的水平方向和垂直方向的比例系數(shù)可調(diào)用函數(shù)getaspectratio()獲得。getaspectratio()獲取縱橫比函數(shù)功能:函數(shù)getaspectratio()返回x方向和y方向的比例系數(shù),用這兩個整型值可計算某一特定屏顯的縱橫比。用法:此函數(shù)調(diào)用方式為voidgetaspectratio(intxasp,intyasp);說明:參數(shù)xasp指向的變量存放返回的x方向比例系數(shù);參數(shù)yasp指向的變量存放返回的y方向比例系數(shù)。通常y方向比例系數(shù)為10000,x方向比例系數(shù)不大于10000(這是因為大多數(shù)屏幕像素高比寬長)。注意縱橫比自動用作下面函數(shù)arc(),circle()和pieslice()中的標(biāo)尺因子,使屏幕上圓或弧正常顯示。但用ellipse()函數(shù)畫橢圓必須調(diào)用本函數(shù)獲取縱橫比作為標(biāo)尺因子,否則不予調(diào)整。縱橫比可用于其它幾何圖形,目的是校正和顯示圖形。getaspectratio()函數(shù)對應(yīng)的頭文件為graphics.h返回值:返回x與y方向比例系數(shù)分別存放在xasp和yasp所指向的變量中。例:下面的程序顯示縱橫比:intxasp,yasp;floataspectratio;getaspectratio(&xasp,&yasp);aspectratio=xasp/yasp;printf("aspectratio:%f",aspectratio);circle()畫圓函數(shù)功能:函數(shù)circle()使用當(dāng)前繪圖色并以實線畫一個完整的圓。用法:該函數(shù)調(diào)用方式為voidcircle(intx,inty,intradius);說明:參數(shù)x,y為圓心坐標(biāo),radius為圓半徑,用像素個素表示。注意,調(diào)用circle()函數(shù)畫圓時不用當(dāng)前線型。不同于ellipse()函數(shù),只用單個半徑radius參數(shù)調(diào)用circle()函數(shù),故屏顯縱橫比可以自動調(diào)節(jié),以產(chǎn)生正確的顯示圖。此函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:畫六個同心圓,圓心在(100,100)。#include<graphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");circle(100,100,10);circle(100,100,20);circle(100,100,30);circle(100,100,40);circle(100,100,50);circle(100,100,60);getch();restorecrtmode();}arc()畫圓弧函數(shù)功能:函數(shù)arc()使用當(dāng)前繪圖色并以實線畫一圓弧。用法:函數(shù)調(diào)用方式為voidarc(intx,inty,intstartangle,intendangle,intradius);說明:參數(shù)x,y為圓心坐標(biāo),startangle與endangle分別為起始角與終止角,radius為半徑。圓心坐標(biāo)和半徑以像素個數(shù)給出,起始角和終止角以度為單位,0度位于右邊,90度位于頂部,180度位于左邊,底部是270度。同往常一樣,360度與0度重合。角度按逆時針方向增加,但并不要求終止角一定比起始角大。例如指定300度和90度分別為起始角和終止角,與指定300度和450度分別為起始角和終止角可畫出相同的弧。大于360度可作為參數(shù),它將被化到0度 ̄360度范圍里。函數(shù)arc()能畫封閉圓,只要取起始角為0度,終止角為360度即可。此函數(shù)中,屏顯縱橫比可自動調(diào)節(jié)。arc()函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:以(200,200)為圓心,100為半徑,從0度到120度畫圓?。?include<graphics.hvoidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");setcolor(WHITE);arc(200,200,0,120,100);getch();restorecrtmode();}graphics.h頭文件的內(nèi)容:/*graphics.hDefinitionsforGraphicsPackage.Copyright(c)BorlandInternational1987,1988AllRightsReserved.*/#if__STDC__#define_Cdecl#else#define_Cdeclcdecl#endif#if!defined(__GRAPHX_DEF_)#define__GRAPHX_DEF_enumgraphics_errors{/*graphresulterrorreturncodes*/grOk=0,grNoInitGraph=-1,grNotDetected=-2,grFileNotFound=-3,grInvalidDriver=-4,grNoLoadMem=-5,grNoScanMem=-6,grNoFloodMem=-7,grFontNotFound=-8,grNoFontMem=-9,grInvalidMode=-10,grError=-11,/*genericerror*/grIOerror=-12,grInvalidFont=-13,grInvalidFontNum=-14,grInvalidVersion=-18};enumgraphics_drivers{/*definegraphicsdrivers*/DETECT,/*requestsautodetection*/CGA,MCGA,EGA,EGA64,EGAMONO,IBM8514,/*1-6*/HERCMONO,ATT400,VGA,PC3270,/*7-10*/CURRENT_DRIVER=-1};enumgraphics_modes{/*graphicsmodesforeachdriver*/CGAC0=0,/*320x200palette0;1page*/CGAC1=1,/*320x200palette1;1page*/CGAC2=2,/*320x200palette2:1page*/CGAC3=3,/*320x200palette3;1page*/CGAHI=4,/*640x2001page*/MCGAC0=0,/*320x200palette0;1page*/MCGAC1=1,/*320x200palette1;1page*/MCGAC2=2,/*320x200palette2;1page*/MCGAC3=3,/*320x200palette3;1page*/MCGAMED=4,/*640x2001page*/MCGAHI=5,/*640x4801page*/EGALO=0,/*640x20016color4pages*/EGAHI=1,/*640x35016color2pages*/EGA64LO=0,/*640x20016color1page*/EGA64HI=1,/*640x3504color1page*/EGAMONOHI=0,/*640x35064Koncard,1256Koncard,4pages*/HERCMONOHI=0,/*720x3482pages*/ATT400C0=0,/*320x200palette0;1page*/ATT400C1=1,/*320x200palette1;1page*/ATT400C2=2,/*320x200palette2;1page*/ATT400C3=3,/*320x200palette3;1page*/ATT400MED=4,/*640x2001page*/ATT400HI=5,/*640x4001page*/VGALO=0,/*640x20016color4pages*/VGAMED=1,/*640x35016color2pages*/VGAHI=2,/*640x48016color1page*/PC3270HI=0,/*720x3501page*/IBM8514LO=0,/*640x480256colors*/IBM8514HI=1/*1024x768256colors*/};/*Colorsforsetpaletteandsetallpalette*/#if!defined(__COLORS)#define__COLORSenumCOLORS{BLACK,/*darkcolors*/BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,/*lightcolors*/LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE};#endifenumCGA_COLORS{CGA_LIGHTGREEN=1,/*PaletteC0ColorNames*/CGA_LIGHTRED=2,CGA_YELLOW=3,CGA_LIGHTCYAN=1,/*PaletteC1ColorNames*/CGA_LIGHTMAGENTA=2,CGA_WHITE=3,CGA_GREEN=1,/*PaletteC2ColorNames*/CGA_RED=2,CGA_BROWN=3,CGA_CYAN=1,/*PaletteC3ColorNames*/CGA_MAGENTA=2,CGA_LIGHTGRAY=3};enumEGA_COLORS{EGA_BLACK=0,/*darkcolors*/EGA_BLUE=1,EGA_GREEN=2,EGA_CYAN=3,EGA_RED=4,EGA_MAGENTA=5,EGA_BROWN=20,EGA_LIGHTGRAY=7,EGA_DARKGRAY=56,/*lightcolors*/EGA_LIGHTBLUE=57,EGA_LIGHTGREEN=58,EGA_LIGHTCYAN=59,EGA_LIGHTRED=60,EGA_LIGHTMAGENTA=61,EGA_YELLOW=62,EGA_WHITE=63};enumline_styles{/*Linestylesforget/setlinestyle*/SOLID_LINE=0,DOTTED_LINE=1,CENTER_LINE=2,DASHED_LINE=3,USERBIT_LINE=4,/*Userdefinedlinestyle*/};enumline_widths{/*Linewidthsforget/setlinestyle*/NORM_WIDTH=1,THICK_WIDTH=3,};enumfont_names{DEFAULT_FONT=0,/*8x8bitmappedfont*/TRIPLEX_FONT=1,/*"Stroked"fonts*/SMALL_FONT=2,SANS_SERIF_FONT=3,GOTHIC_FONT=4};#defineHORIZ_DIR0/*lefttoright*/#defineVERT_DIR1/*bottomtotop*/#defineUSER_CHAR_SIZE0/*user-definedcharsize*/enumfill_patterns{/*Fillpatternsforget/setfillstyle*/EMPTY_FILL,/*fillsareainbackgroundcolor*/SOLID_FILL,/*fillsareainsolidfillcolor*/LINE_FILL,/*fill*/LTSLASH_FILL,/*///fill*/SLASH_FILL,/*///fillwiththicklines*/BKSLASH_FILL,/*\\\fillwiththicklines*/LTBKSLASH_FILL,/*\\\fill*/HATCH_FILL,/*lighthatchfill*/XHATCH_FILL,/*heavycrosshatchfill*/INTERLEAVE_FILL,/*interleavinglinefill*/WIDE_DOT_FILL,/*Widelyspaceddotfill*/CLOSE_DOT_FILL,/*Closelyspaceddotfill*/USER_FILL/*userdefinedfill*/};enumputimage_ops{/*BitBltoperatorsforputimage*/COPY_PUT,/*MOV*/XOR_PUT,/*XOR*/OR_PUT,/*OR*/AND_PUT,/*AND*/NOT_PUT/*NOT*/};enumtext_just{/*Horizontalandverticaljustificationforsettextjustify*/LEFT_TEXT=0,CENTER_TEXT=1,RIGHT_TEXT=2,BOTTOM_TEXT=0,/*CENTER_TEXT=1,alreadydefinedabove*/TOP_TEXT=2};#defineMAXCOLORS15structpalettetype{unsignedcharsize;signedcharcolors[MAXCOLORS+1];};structlinesettingstype{intlinestyle;unsignedupattern;intthickness;};structtextsettingstype{intfont;intdirection;intcharsize;inthoriz;intvert;};structfillsettingstype{intpattern;intcolor;};structpointtype{intx,y;};structviewporttype{intleft,top,right,bottom;intclip;};structarccoordstype{intx,y;intxstart,ystart,xend,yend;};voidfar_Cdeclarc(intx,inty,intstangle,intendangle,intradius);voidfar_Cdeclbar(intleft,inttop,intright,intbottom);voidfar_Cdeclbar3d(intleft,inttop,intright,intbottom,intdepth,inttopflag);voidfar_Cdeclcircle(intx,inty,intradius);voidfar_Cdeclcleardevice(void);voidfar_Cdeclclearviewport(void);voidfar_Cdeclclosegraph(void);voidfar_Cdecldetectgraph(intfar*graphdriver,intfar*graphmode);voidfar_Cdecldrawpoly(intnumpoints,intfar*polypoints);voidfar_Cdeclellipse(intx,inty,intstangle,intendangle,intxradius,intyradius);voidfar_Cdeclfillellipse(intx,inty,intxradius,intyradius);voidfar_Cdeclfillpoly(intnumpoints,intfar*polypoints);voidfar_Cdeclfloodfill(intx,inty,intborder);voidfar_Cdeclgetarccoords(structarccoordstypefar*arccoords);voidfar_Cdeclgetaspectratio(intfar*xasp,intfar*yasp);intfar_Cdeclgetbkcolor(void);intfar_Cdeclgetcolor(void);structpalettetype*far_Cdeclgetdefaultpalette(void);char*far_Cdeclgetdrivername(void);voidfar_Cdeclgetfillpattern(charfar*pattern);voidfar_Cdeclgetfillsettings(structfillsettingstypefar*fillinfo);intfar_Cdeclgetgraphmode(void);voidfar_Cdeclgetimage(intleft,inttop,intright,intbottom,voidfar*bitmap);voidfar_Cdeclgetlinesettings(structlinesettingstypefar*lineinfo);intfar_Cdeclgetmaxcolor(void);intfar_Cdeclgetmaxmode(void);intfar_Cdeclgetmaxx(void);intfar_Cdeclgetmaxy(void);char*far_Cdeclgetmodename(intmode_number);voidfar_Cdeclgetmoderange(intgraphdriver,intfar*lomode,intfar*himode);unsignedfar_Cdeclgetpixel(intx,inty);voidfar_Cdeclgetpalette(structpalettetypefar*palette);intfar_Cdeclgetpalettesize(void);voidfar_Cdeclgettextsettings(structtextsettingstypefar*texttypeinfo);voidfar_Cdeclgetvie

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論