- 達(dá)夢(mèng)數(shù)據(jù)庫(kù)應(yīng)用基礎(chǔ)(第二版)
- 張海粟 朱明東 王龍 戴劍偉 張守帥等編著
- 2856字
- 2022-05-06 19:17:13
1.2.1 物理存儲(chǔ)結(jié)構(gòu)
物理存儲(chǔ)結(jié)構(gòu)描述了達(dá)夢(mèng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)在操作系統(tǒng)中的組織和管理。典型的物理存儲(chǔ)結(jié)構(gòu)包括:用于進(jìn)行功能設(shè)置的配置文件;用于記錄文件分布的控制文件;用于保存用戶實(shí)際數(shù)據(jù)的數(shù)據(jù)文件、REDO日志文件、歸檔日志文件、備份文件;用來(lái)進(jìn)行問(wèn)題跟蹤的跟蹤日志文件等,如圖1-2所示。

圖1-2 達(dá)夢(mèng)數(shù)據(jù)庫(kù)物理存儲(chǔ)結(jié)構(gòu)
1.配置文件
配置文件是達(dá)夢(mèng)數(shù)據(jù)庫(kù)用來(lái)設(shè)置功能選項(xiàng)的一些文本文件的集合。配置文件以.ini為后綴,具有固定的格式,用戶可以通過(guò)修改其中的某些參數(shù)取值實(shí)現(xiàn)特定功能項(xiàng)的啟用和禁用,并針對(duì)當(dāng)前系統(tǒng)運(yùn)行環(huán)境設(shè)置更優(yōu)的參數(shù)值以提升系統(tǒng)性能。
2.控制文件
每個(gè)達(dá)夢(mèng)數(shù)據(jù)庫(kù)都有一個(gè)名為dm.ctl的控制文件??刂莆募且粋€(gè)二進(jìn)制文件,記錄了數(shù)據(jù)庫(kù)必要的初始信息,其中主要包括:
(1)數(shù)據(jù)庫(kù)名稱;
(2)數(shù)據(jù)庫(kù)服務(wù)器模式;
(3)數(shù)據(jù)庫(kù)服務(wù)器版本;
(4)數(shù)據(jù)文件版本;
(5)表空間信息,包括表空間名、表空間物理文件路徑等,記錄了所有數(shù)據(jù)庫(kù)中使用的表空間,并以數(shù)組的方式保存起來(lái);
(6)控制文件校驗(yàn)碼,校驗(yàn)碼由數(shù)據(jù)庫(kù)服務(wù)器在每次修改控制文件后計(jì)算生成,保證控制文件的合法性,防止文件被損壞及被手動(dòng)修改。
3.數(shù)據(jù)文件
數(shù)據(jù)文件以.dbf為后綴,是數(shù)據(jù)庫(kù)中最重要的文件類型。一個(gè)DM數(shù)據(jù)文件對(duì)應(yīng)磁盤上的一個(gè)物理文件,數(shù)據(jù)文件是真實(shí)數(shù)據(jù)存儲(chǔ)的地方,每個(gè)數(shù)據(jù)庫(kù)至少有一個(gè)與之相關(guān)的數(shù)據(jù)文件。在實(shí)際應(yīng)用中,數(shù)據(jù)庫(kù)中通常有多個(gè)數(shù)據(jù)文件。
當(dāng)達(dá)夢(mèng)數(shù)據(jù)庫(kù)的數(shù)據(jù)文件空間用完時(shí),它可以自動(dòng)擴(kuò)展,但可以在創(chuàng)建數(shù)據(jù)文件時(shí)通過(guò)MAXSIZE參數(shù)限制其擴(kuò)展量,當(dāng)然也可以不限制。但是,數(shù)據(jù)文件的大小最終會(huì)受物理磁盤大小的限制。在實(shí)際使用時(shí),一般不建議使用單個(gè)巨大的數(shù)據(jù)文件,為一個(gè)表空間創(chuàng)建多個(gè)較小的數(shù)據(jù)文件是更好的選擇。
數(shù)據(jù)文件中還有兩類特殊的文件:ROLL文件和TEMP文件。ROLL文件用于保存系統(tǒng)的回滾記錄,提供事務(wù)在回滾時(shí)的信息。每個(gè)事務(wù)的回滾頁(yè)在回滾段中各自掛鏈,頁(yè)內(nèi)則順序存放回滾記錄。TEMP文件是臨時(shí)數(shù)據(jù)文件,主要用于存放臨時(shí)結(jié)果集,用戶創(chuàng)建的臨時(shí)表也存儲(chǔ)在TEMP文件中。
4.REDO日志文件
REDO日志文件以.log為后綴。無(wú)論何時(shí),在達(dá)夢(mèng)數(shù)據(jù)庫(kù)中添加、刪除、修改對(duì)象,或者改變數(shù)據(jù),都會(huì)將 REDO 日志寫入當(dāng)前的 REDO 日志文件中。每個(gè)達(dá)夢(mèng)數(shù)據(jù)庫(kù)實(shí)例至少要有兩個(gè) REDO 日志文件,默認(rèn)兩個(gè) REDO 日志文件為 DAMENG01.log、DAMENG02.log,這兩個(gè)REDO日志文件循環(huán)使用。
在理想情況下,數(shù)據(jù)庫(kù)系統(tǒng)不會(huì)用到REDO日志文件中的信息。然而現(xiàn)實(shí)世界總是充滿了各種意外,例如,電源故障、系統(tǒng)故障、介質(zhì)故障,或者數(shù)據(jù)庫(kù)實(shí)例進(jìn)程被強(qiáng)制終止等,當(dāng)出現(xiàn)以上情況時(shí),數(shù)據(jù)庫(kù)緩沖區(qū)中的數(shù)據(jù)頁(yè)會(huì)來(lái)不及寫入數(shù)據(jù)文件。這樣,在重啟達(dá)夢(mèng)數(shù)據(jù)庫(kù)實(shí)例時(shí),通過(guò)REDO日志文件中的信息,就可以將數(shù)據(jù)庫(kù)的狀態(tài)恢復(fù)到發(fā)生意外時(shí)的狀態(tài)。REDO日志文件對(duì)于數(shù)據(jù)庫(kù)是至關(guān)重要的。它們用于存儲(chǔ)數(shù)據(jù)庫(kù)的事務(wù)日志,以便系統(tǒng)在出現(xiàn)系統(tǒng)故障和介質(zhì)故障時(shí)能夠進(jìn)行故障恢復(fù)。在達(dá)夢(mèng)數(shù)據(jù)庫(kù)運(yùn)行過(guò)程中,任何修改數(shù)據(jù)庫(kù)的操作都會(huì)產(chǎn)生REDO日志。例如,當(dāng)一條元組插入一個(gè)表的時(shí)候,插入的結(jié)果寫入REDO日志;當(dāng)刪除一條元組時(shí),刪除該元組的事實(shí)也被寫入REDO日志,這樣,當(dāng)系統(tǒng)發(fā)生故障時(shí),通過(guò)分析日志就可以知道在故障發(fā)生前系統(tǒng)做了哪些動(dòng)作,并可以重做這些動(dòng)作使系統(tǒng)恢復(fù)到發(fā)生故障之前的狀態(tài)。
日志文件分為聯(lián)機(jī)日志文件和歸檔日志文件。以上所說(shuō)的REDO日志文件都是聯(lián)機(jī)日志文件。在歸檔模式下,REDO日志文件會(huì)被連續(xù)復(fù)制到歸檔日志文件中,這就生成了歸檔日志文件。聯(lián)機(jī)日志文件指的是系統(tǒng)當(dāng)前正在使用的日志文件,在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),聯(lián)機(jī)日志文件通常被擴(kuò)展至一定長(zhǎng)度,其內(nèi)容則被初始化為空;當(dāng)系統(tǒng)運(yùn)行時(shí),聯(lián)機(jī)日志文件逐漸被產(chǎn)生的日志所填充,對(duì)聯(lián)機(jī)日志文件的寫入是順序連續(xù)的。然而,系統(tǒng)磁盤空間總是有限的,系統(tǒng)必須能夠循環(huán)利用聯(lián)機(jī)日志文件空間,為了做到這一點(diǎn),當(dāng)所有聯(lián)機(jī)日志文件空間被占滿時(shí),系統(tǒng)需要清空一部分日志以便重用日志文件空間。為了保證被清空的日志所“保護(hù)”的數(shù)據(jù)在磁盤上是安全的,需要引入一個(gè)關(guān)鍵的數(shù)據(jù)庫(kù)概念——檢查點(diǎn)。當(dāng)產(chǎn)生檢查點(diǎn)時(shí),系統(tǒng)將系統(tǒng)緩沖區(qū)中的日志和臟數(shù)據(jù)頁(yè)都寫入磁盤,以保證當(dāng)前日志所“保護(hù)”的數(shù)據(jù)頁(yè)都已安全寫入磁盤,這樣日志文件就可以被安全重用。
5.歸檔日志文件
歸檔日志文件以歸檔時(shí)間命名,后綴也是.log。達(dá)夢(mèng)數(shù)據(jù)庫(kù)可以在歸檔模式和非歸檔模式下運(yùn)行。但是,只有當(dāng)達(dá)夢(mèng)數(shù)據(jù)庫(kù)在歸檔模式下運(yùn)行時(shí),其在重做聯(lián)機(jī)日志文件時(shí)才能生成歸檔日志文件。
采用歸檔模式會(huì)對(duì)系統(tǒng)的性能產(chǎn)生影響,然而系統(tǒng)在歸檔模式下運(yùn)行會(huì)更安全。當(dāng)系統(tǒng)發(fā)生故障時(shí)其丟失數(shù)據(jù)的可能性更小,這是因?yàn)橄到y(tǒng)一旦發(fā)生介質(zhì)故障,如磁盤損壞,利用歸檔日志文件系統(tǒng)可以被恢復(fù)至發(fā)生故障前一刻,也可以還原到指定的時(shí)間點(diǎn),而如果沒(méi)有歸檔日志文件,則只能利用備份進(jìn)行系統(tǒng)恢復(fù)。
歸檔日志文件還是數(shù)據(jù)守護(hù)功能的核心,數(shù)據(jù)守護(hù)中的備機(jī)就是通過(guò)REDO日志文件來(lái)完成與主機(jī)數(shù)據(jù)同步的。
6.邏輯日志文件
如果在達(dá)夢(mèng)數(shù)據(jù)庫(kù)上配置了復(fù)制功能,復(fù)制源就會(huì)產(chǎn)生邏輯日志文件。邏輯日志文件是一個(gè)流式的文件,有自己的格式,并且不在頁(yè)、簇和段的管理之下。
邏輯日志文件內(nèi)部存儲(chǔ)按照復(fù)制記錄的格式,一條記錄緊接著一條記錄,存儲(chǔ)復(fù)制源端的各種邏輯操作,用于發(fā)送給復(fù)制目的端。
7.備份文件
備份文件以.bak為后綴,當(dāng)系統(tǒng)正常運(yùn)行時(shí),備份文件不會(huì)發(fā)揮任何作用。備份文件也不是數(shù)據(jù)庫(kù)必須有的聯(lián)機(jī)文件類型之一。然而,從來(lái)沒(méi)有哪個(gè)數(shù)據(jù)庫(kù)系統(tǒng)能夠保證永遠(yuǎn)正確無(wú)誤地運(yùn)行,當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)故障時(shí),備份文件就顯得尤為重要了。
當(dāng)客戶利用管理工具或直接發(fā)出備份的SQL命令時(shí),DM Server會(huì)自動(dòng)進(jìn)行備份,并產(chǎn)生一個(gè)或多個(gè)備份文件,備份文件自身包含了備份的名稱、對(duì)應(yīng)的數(shù)據(jù)庫(kù)、備份類型和備份時(shí)間等信息。同時(shí),系統(tǒng)還會(huì)自動(dòng)記錄備份信息及該備份文件所處的位置,但這種記錄是松散的,用戶可根據(jù)需要將其復(fù)制至任何地方,并不會(huì)影響系統(tǒng)的運(yùn)行。
8.跟蹤日志文件
用戶在dm.ini中配置SVR_LOG和SVR_LOG_SWITCH_COUNT參數(shù)后就會(huì)打開(kāi)跟蹤日志文件。跟蹤日志文件是一個(gè)純文本文件,以“dm_commit_日期_時(shí)間”命名,在 DM安裝目錄的log子目錄下生成,其內(nèi)容包含系統(tǒng)各會(huì)話執(zhí)行的SQL語(yǔ)句、參數(shù)信息、錯(cuò)誤信息等。跟蹤日志文件主要用于分析錯(cuò)誤和性能問(wèn)題,基于跟蹤日志文件可以對(duì)系統(tǒng)運(yùn)行狀態(tài)進(jìn)行分析,例如,可以挑出系統(tǒng)當(dāng)前執(zhí)行速度較慢的SQL語(yǔ)句,進(jìn)而對(duì)其進(jìn)行優(yōu)化。
打開(kāi)跟蹤日志文件會(huì)對(duì)系統(tǒng)的性能有較大影響,一般在查錯(cuò)和調(diào)優(yōu)的時(shí)候才會(huì)打開(kāi),在默認(rèn)情況下系統(tǒng)是關(guān)閉跟蹤日志文件的。
9.事件日志文件
達(dá)夢(mèng)數(shù)據(jù)庫(kù)系統(tǒng)在運(yùn)行過(guò)程中,會(huì)在log子目錄下產(chǎn)生一個(gè)“dm_實(shí)例名_日期”命名的事件日志文件。事件日志文件對(duì)達(dá)夢(mèng)數(shù)據(jù)庫(kù)運(yùn)行的關(guān)鍵事件進(jìn)行記錄,如系統(tǒng)啟動(dòng)、系統(tǒng)關(guān)閉、內(nèi)存申請(qǐng)失敗、I/O錯(cuò)誤等致命錯(cuò)誤。事件日志文件主要用于系統(tǒng)在出現(xiàn)嚴(yán)重錯(cuò)誤時(shí)查看并定位產(chǎn)生錯(cuò)誤的問(wèn)題。事件日志文件隨著達(dá)夢(mèng)數(shù)據(jù)庫(kù)服務(wù)的運(yùn)行一直存在。
10.數(shù)據(jù)重演文件
調(diào)用系統(tǒng)存儲(chǔ)過(guò)程 SP_START_CAPTURE 和 SP_STOP_CAPTURE,可以獲得數(shù)據(jù)重演文件。數(shù)據(jù)重演文件用于數(shù)據(jù)重演,存儲(chǔ)了從抓取開(kāi)始到抓取結(jié)束時(shí)達(dá)夢(mèng)數(shù)據(jù)庫(kù)與客戶端的通信消息。使用數(shù)據(jù)重演文件,可以多次重復(fù)抓取這段時(shí)間內(nèi)的數(shù)據(jù)庫(kù)系統(tǒng)操作,為系統(tǒng)調(diào)試和性能調(diào)優(yōu)提供了一種分析手段。
- LibGDX Game Development Essentials
- Mastering Ninject for Dependency Injection
- 卷積神經(jīng)網(wǎng)絡(luò)的Python實(shí)現(xiàn)
- 大數(shù)據(jù)可視化
- 云計(jì)算服務(wù)保障體系
- 商業(yè)分析思維與實(shí)踐:用數(shù)據(jù)分析解決商業(yè)問(wèn)題
- 醫(yī)療大數(shù)據(jù)挖掘與可視化
- Mockito Cookbook
- Sybase數(shù)據(jù)庫(kù)在UNIX、Windows上的實(shí)施和管理
- 數(shù)據(jù)庫(kù)程序員面試筆試真題庫(kù)
- INSTANT Apple iBooks How-to
- 數(shù)據(jù)庫(kù)原理與應(yīng)用
- 數(shù)字IC設(shè)計(jì)入門(微課視頻版)
- SAS金融數(shù)據(jù)挖掘與建模:系統(tǒng)方法與案例解析
- SQL Server 2012實(shí)施與管理實(shí)戰(zhàn)指南