李凡
摘 要:為了管理數(shù)據(jù)文件,Oracle提出了表空間的概念。本論文通過先引入數(shù)據(jù)庫(kù)表邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的比對(duì),及兩者之間的關(guān)系,再講解如何使用DBA熟練操縱表空間管理,最后對(duì)創(chuàng)建表空間的方法及修改表空間的狀態(tài)與權(quán)限進(jìn)行了說明,并對(duì)數(shù)據(jù)文件的管理趨勢(shì)進(jìn)行了展望。
關(guān)鍵詞:表空間;DBA;數(shù)據(jù)文件
1 邏輯結(jié)構(gòu)和物理結(jié)構(gòu)
Oracle數(shù)據(jù)庫(kù)具有跨平臺(tái)特性,在一個(gè)數(shù)據(jù)庫(kù)平臺(tái)上開發(fā)的數(shù)據(jù)庫(kù)可以不加修改地移植到另一個(gè)操作系統(tǒng)平臺(tái)上。這樣Oracle就不會(huì)直接操作底層操作系統(tǒng)的數(shù)據(jù)文件,而是提供一個(gè)中間層,這個(gè)中間層就是Oracle的邏輯結(jié)構(gòu),它與操作系統(tǒng)的平臺(tái)無關(guān),而中間層到數(shù)據(jù)文件的映射通過DBMS來完成。邏輯結(jié)構(gòu)從上到下是包含關(guān)系,也是一對(duì)多的關(guān)系,即一個(gè)數(shù)據(jù)庫(kù)有一個(gè)或多個(gè)表空間,一個(gè)表空間由多個(gè)操作系統(tǒng)數(shù)據(jù)庫(kù)塊組成。而物理結(jié)構(gòu)中表空間有多個(gè)數(shù)據(jù)文件,一個(gè)數(shù)據(jù)文件物理上由操作系統(tǒng)塊組成。
2 表空間的分類
Oracle數(shù)據(jù)庫(kù)把表空間分為兩類:系統(tǒng)表空間和非系統(tǒng)表空間。系統(tǒng)表空間是數(shù)據(jù)庫(kù)系統(tǒng)創(chuàng)建時(shí)需要的表空間,這些表空間在數(shù)據(jù)庫(kù)創(chuàng)建時(shí)自動(dòng)創(chuàng)建,是每個(gè)數(shù)據(jù)庫(kù)必須的表空間。
非系統(tǒng)表空間是用戶根據(jù)業(yè)務(wù)需求而創(chuàng)建的表空間,通過創(chuàng)建用戶自定義的表空間,使得數(shù)據(jù)庫(kù)的管理更加靈活、方便。
3 表空間的創(chuàng)建
在一個(gè)生產(chǎn)數(shù)據(jù)庫(kù)中,往往存在大量的表空間,根據(jù)業(yè)務(wù)需要將用戶表或其他對(duì)象保存在表空間中,以實(shí)例說明。創(chuàng)建一個(gè)表空間,表空間名為user_data,該表空間用來存儲(chǔ)用戶表,表空間就包含一個(gè)數(shù)據(jù)文件,大小100M,文件名為d:\userdata\userdata1.dbf。程序代碼如下:SQL> create tablespace user_data
2 datafile ‘d:\userdata\userdata1.dbf size 100 M
這樣就完成了表空間的創(chuàng)建。
4 臨時(shí)表空間的創(chuàng)建
在Oracle數(shù)據(jù)庫(kù)中臨時(shí)表空間用于用戶的特定會(huì)話活動(dòng)。如用戶會(huì)話的排序操作,排序的中間結(jié)果需要存儲(chǔ)在某個(gè)區(qū)域,這個(gè)區(qū)域就是臨時(shí)表空間,臨時(shí)表空間的排序段是在實(shí)例啟動(dòng)后有第一個(gè)排序操作時(shí)創(chuàng)建的。臨時(shí)表空間是使用當(dāng)前數(shù)據(jù)庫(kù)的多個(gè)用戶共享使用的,臨時(shí)表空間中的區(qū)段在需要時(shí)按照創(chuàng)建臨時(shí)表空間時(shí)的參數(shù)或管理方式進(jìn)行擴(kuò)展。下面用程序代碼形式展示臨時(shí)表空間的創(chuàng)建過程。
代碼如下:SQL> Create temporary tablespace user_temp
2 tempfile ‘d:\usertemp\user_temp.dbf size 20 M
3 extent management lacal
4 uniform size 1M;
這樣就完成了臨時(shí)表空間的創(chuàng)建。
5 大文件表空間的創(chuàng)建
大文件表空間由一個(gè)大文件組成,而不是由多個(gè)傳統(tǒng)的小文件組成,隨著數(shù)據(jù)庫(kù)的升級(jí),使得Oracle有能力創(chuàng)建和管理大文件。使用大文件表空間在數(shù)據(jù)庫(kù)開啟時(shí)和與DBWR進(jìn)程的性能相比會(huì)有顯著的提高,從而簡(jiǎn)化了數(shù)據(jù)文件的管理。創(chuàng)建大文件表空間,須定義初始區(qū)段,然后使用CREATE TABLESPACE BIGFILE 子句創(chuàng)建大文件空間,程序代碼如下:
SQL> Create bigfile tablespace bigfilebs
2 datafile ‘d:\bigfile_tbs\bfile_tbs01.dbf size 2G
這樣大文件表空間就創(chuàng)建完成。
6 表空間的管理
表空間的管理主要是它的狀態(tài)管理,根據(jù)狀態(tài)可分為脫機(jī)管理與只讀管理。脫機(jī)管理的表空間無法實(shí)現(xiàn)數(shù)據(jù)訪問,此時(shí)可以完成一些如脫機(jī)備份等操作,處于只讀狀態(tài)的表空間,用戶或應(yīng)用程序可以訪問這些表空間,但是無法更改表空間中的數(shù)據(jù),如果一個(gè)表空間中的數(shù)據(jù)不會(huì)變化,屬于靜態(tài)數(shù)據(jù),這樣就可以把相應(yīng)表空間改為只讀,只讀表空間不產(chǎn)生變化的數(shù)據(jù)。當(dāng)一個(gè)表空間處于脫機(jī)狀態(tài),Oracle不允許執(zhí)行任何的SQL語(yǔ)句,用戶試圖訪問存儲(chǔ)在該表空間中的對(duì)象會(huì)報(bào)錯(cuò)。當(dāng)表空間脫機(jī)聯(lián)機(jī)時(shí),這個(gè)事件會(huì)記錄在數(shù)據(jù)字典和控制文件中。只讀管理就是把表空間置為只讀狀態(tài),這樣的表空間中的數(shù)據(jù)只能被用戶讀取,而不能做任何修改或插入操作,在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),如果有的數(shù)據(jù)是靜態(tài)數(shù)據(jù),則可以將存儲(chǔ)這些數(shù)據(jù)的表放在一個(gè)表空間中,只讀管理的表空間不被重做日志保護(hù),減少重做日志文件的
大小。
另外還有表空間的內(nèi)容管理,它涉及到表空間的大小、刪除表空間以及修改表空間的存儲(chǔ)參數(shù)。其中修改表空間的存儲(chǔ)參數(shù)只對(duì)數(shù)據(jù)字典的表空間有效,在刪除表空間后,該數(shù)據(jù)庫(kù)中不再有該表空間的任何數(shù)據(jù),數(shù)據(jù)庫(kù)不再管理這些數(shù)據(jù)文件,但只讀狀態(tài)的表空間和表空間的區(qū)段仍然可以順利刪除。
具體來說,修改表空間有四種方法:第一種方法是使用AUTOEXTEND ON字句使得表空間在需要時(shí)可以自動(dòng)擴(kuò)展;第二種方法是在創(chuàng)建表空間后使用ALTER DATABASE DATAFILE修改不能自動(dòng)擴(kuò)展的表空間的數(shù)據(jù)文件;第三種方法是在表空間中增加數(shù)據(jù)文件;第四種方法是重新設(shè)置表空間中某個(gè)數(shù)據(jù)文件的大小。
7 數(shù)據(jù)表文件的管理
數(shù)據(jù)文件邏輯地存放在表空間中,管理數(shù)據(jù)文件涉及修改數(shù)據(jù)文件的大小、遷移數(shù)據(jù)文件等,其中涉及遷移數(shù)據(jù)文件的部分最為關(guān)鍵。遷移數(shù)據(jù)文件是指把當(dāng)前表空間中的數(shù)據(jù)文件遷移到其他磁盤空間,可以想象在生產(chǎn)數(shù)據(jù)庫(kù)中,當(dāng)一個(gè)表空間所在的磁盤滿時(shí),為了使數(shù)據(jù)庫(kù)系統(tǒng)正常運(yùn)行,必須將其中的數(shù)據(jù)文件遷移到其他空閑磁盤。遷移數(shù)據(jù)文件主要分為兩種,即遷移系統(tǒng)表空間中的文件和遷移非系統(tǒng)表空間中的文件,使用ALTER DATABASE RENAME FILE指令遷移數(shù)據(jù)文件,打開數(shù)據(jù)庫(kù)根據(jù)MOUNT狀態(tài)獲知數(shù)據(jù)庫(kù)做了哪些數(shù)據(jù)遷移和數(shù)據(jù)遷移地點(diǎn)及在哪里打開過數(shù)據(jù)文件。而對(duì)于非系統(tǒng)表空間的遷移,需要沒有活躍的還原段、臨時(shí)段、排序段等,這樣非系統(tǒng)表空間才可以遷移。
8 數(shù)據(jù)字典的管理
數(shù)據(jù)字典管理的方式是將每個(gè)數(shù)據(jù)字典表空間的使用情況記錄在數(shù)據(jù)字典的表中,當(dāng)有數(shù)據(jù)變動(dòng)時(shí),就隱含使用SQL語(yǔ)句對(duì)表記錄進(jìn)行修改,由于變動(dòng)頻繁會(huì)引起數(shù)據(jù)的不穩(wěn)定,效率也低下,所以對(duì)該管理進(jìn)行改進(jìn),以本地管理的方式結(jié)合數(shù)據(jù)字典進(jìn)行數(shù)據(jù)的變動(dòng),就是以位圖的方式表示數(shù)據(jù)塊,通過操作系統(tǒng)對(duì)位圖進(jìn)行置換來進(jìn)行數(shù)據(jù)的修改,這樣提高了效率,解決了數(shù)據(jù)字典管理帶來的空閑塊多等問題,瓶頸問題得到了很好的解決。
9 小結(jié)
表空間管理是Oracle數(shù)據(jù)庫(kù)中非常重要的概念。表空間是一個(gè)邏輯概念,它和段、區(qū)段和數(shù)據(jù)庫(kù)塊組成了數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu),而數(shù)據(jù)文件和操作系統(tǒng)塊組成了數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),采用邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的模式是Oracle為了滿足其在不同操作系統(tǒng)之間能夠方便地移植而設(shè)計(jì)的。本論文講解了表空間的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)之間的關(guān)系,從而理解Oracle如何操作數(shù)據(jù)文件以及操作系統(tǒng)如何管理和操作數(shù)據(jù)文件。Oracle把表空間的管理方式分為數(shù)據(jù)字典管理的表空間和本地管理的表空間,而本地管理的表空間是Oracle推薦的方式。表空間的維護(hù)是DBA的一項(xiàng)重要任務(wù),同時(shí)對(duì)表數(shù)據(jù)文件的修改也是建立在數(shù)據(jù)字典管理有效性上的,對(duì)表空間的修改刪除要謹(jǐn)慎對(duì)待,因?yàn)橐坏﹦h除數(shù)據(jù)很難恢復(fù)。
參考文獻(xiàn)
[1]王麗.Oracle數(shù)據(jù)庫(kù)表空間的維護(hù)[J].科技與企業(yè),2016,2.
[2]劉年國(guó),王芬.Oracle數(shù)據(jù)庫(kù)表空間的檢測(cè)[J].數(shù)字技術(shù)與應(yīng)用,2016,9.
[3]劉暢.Oracle數(shù)據(jù)庫(kù)的性能優(yōu)化[J].江蘇科技信息,2016,1.