OCP之5 管理数据库存储结构
存儲(chǔ)結(jié)構(gòu)
一個(gè)數(shù)據(jù)庫可劃分為多個(gè)稱為表空間的邏輯存儲(chǔ)單元。每個(gè)表空間可以包含很多Oracle
邏輯數(shù)據(jù)塊。DB_BLOCK_SIZE 參數(shù)指定了邏輯塊的大小。邏輯塊的大小介于2 KB 到
32 KB 之間,默認(rèn)大小為8 KB。特定數(shù)目的相鄰邏輯塊構(gòu)成了一個(gè)區(qū)。為特定邏輯結(jié)構(gòu)分配的一組區(qū)構(gòu)成了一個(gè)段。Oracle 數(shù)據(jù)塊是邏輯I/O 的最小單位。
如何存儲(chǔ)表數(shù)據(jù)
創(chuàng)建表時(shí),就會(huì)創(chuàng)建段來保存表數(shù)據(jù)。表空間包含一組段。從邏輯上講,表包含由列值組
成的行。行最終將以行片段的形式存儲(chǔ)在數(shù)據(jù)庫塊中。之所以稱為行片段,是因?yàn)槟承┣?br /> 況下,無法在一個(gè)位置存儲(chǔ)一整行。當(dāng)插入行由于太長單個(gè)塊容納不下時(shí),或者由于更新
而導(dǎo)致現(xiàn)有行大小超出了行的當(dāng)前空間時(shí),就會(huì)發(fā)生這種情況。
數(shù)據(jù)庫塊:
Oracle 數(shù)據(jù)塊包含:
? 塊頭:塊頭包含段類型(如表或索引)、數(shù)據(jù)塊地址、表目錄、行目錄和事務(wù)
處理插槽。每個(gè)插槽的大小為23 字節(jié),修改塊中的行時(shí)會(huì)使用這些插槽。塊頭
按從上向下的方向擴(kuò)展。
? 行數(shù)據(jù):這是塊中行的實(shí)際數(shù)據(jù)。行數(shù)據(jù)空間按從下向上的方向擴(kuò)展。
? 空閑空間:空閑空間位于塊的中間。這樣可以根據(jù)需要擴(kuò)展頭和行數(shù)據(jù)空間。
插入了一些新行之后,或者使用較大值更新了現(xiàn)有行的某些列之后,行數(shù)據(jù)就會(huì)
占用空閑空間。如果行目錄需要更多的行條目,或者需要的事務(wù)處理插槽數(shù)多于
最初配置的數(shù)目,就會(huì)出現(xiàn)頭擴(kuò)展。最初,塊中的空閑空間是相鄰的。但是,
刪除和更新操作可能會(huì)導(dǎo)致在塊空閑空間中產(chǎn)生碎片。必要時(shí)Oracle 服務(wù)器會(huì)
接合塊中的空閑空間。
表空間和數(shù)據(jù)文件
Oracle 數(shù)據(jù)庫在邏輯上將數(shù)據(jù)存儲(chǔ)在表空間中,在物理上
將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)文件中。
表空間和數(shù)據(jù)文件
數(shù)據(jù)庫、表空間和數(shù)據(jù)文件彼此密切相關(guān),但也存在不可忽視的差異:
? Oracle 數(shù)據(jù)庫包括一個(gè)或多個(gè)稱為表空間的邏輯存儲(chǔ)單元,這些表空間可以作為一個(gè)整體存儲(chǔ)數(shù)據(jù)庫的所有數(shù)據(jù)。
? Oracle 數(shù)據(jù)庫中的每個(gè)表空間都包括一個(gè)或多個(gè)稱為數(shù)據(jù)文件的文件,這些數(shù)據(jù)文件具有與運(yùn)行Oracle 軟件的操作系統(tǒng)一致的物理結(jié)構(gòu)。
? 數(shù)據(jù)庫的數(shù)據(jù)作為一個(gè)整體存儲(chǔ)在構(gòu)成數(shù)據(jù)庫各個(gè)表空間的數(shù)據(jù)文件中。例如,
最簡單的Oracle 數(shù)據(jù)庫包括兩個(gè)表空間(SYSTEM 和SYSAUX 表空間,這兩個(gè)表
空間是必須存在的),每個(gè)表空間包含一個(gè)數(shù)據(jù)文件。另一個(gè)數(shù)據(jù)庫可能包括三
表空間,每個(gè)表空間包含兩個(gè)數(shù)據(jù)文件(共有六個(gè)數(shù)據(jù)文件)。一個(gè)數(shù)據(jù)庫最多可以包含65,534 個(gè)數(shù)據(jù)文件。
Oracle Managed Files (OMF)
如果使用Oracle Managed Files (OMF),則不需要直接管理構(gòu)成Oracle 數(shù)據(jù)庫的操作系統(tǒng)文件。可以根據(jù)數(shù)據(jù)庫對象而不是文件名指定操作。對于以下數(shù)據(jù)庫結(jié)構(gòu),可以按需要在數(shù)據(jù)庫內(nèi)部使用標(biāo)準(zhǔn)文件系統(tǒng)接口來創(chuàng)建和刪除文件:
? 表空間
? 重做日志文件
? 控制文件
? 歸檔日志
? 塊更改跟蹤文件
? 閃回日志
? RMAN 備份
數(shù)據(jù)庫可以混合包含Oracle Managed Files 和非Oracle Managed Files。由上面任一參數(shù)指定的文件系統(tǒng)目錄必須已經(jīng)存在:數(shù)據(jù)庫不會(huì)創(chuàng)建文件系統(tǒng)目錄。該目錄還必須擁有允許數(shù)據(jù)庫在其中創(chuàng)建文件的權(quán)限。
表空間中的空間管理
在表空間中以區(qū)為單位分配空間。創(chuàng)建表空間后可使用以下方法之一來跟蹤空閑空間和已用空間:
? 本地管理的表空間:在表空間中通過位圖管理區(qū)。位圖中的每一位對應(yīng)一個(gè)塊或一組塊。分配區(qū)或?yàn)橹匦吕每臻g而釋放區(qū)后,Oracle 服務(wù)器通過更改位圖值來顯示塊的新狀態(tài)。
? 字典管理的表空間:由數(shù)據(jù)字典管理區(qū)。每當(dāng)分配或取消分配區(qū)后,Oracle 服務(wù)器
會(huì)更新數(shù)據(jù)字典中的相應(yīng)表。這是為了實(shí)現(xiàn)向后兼容;建議使用本地管理的表空間。
本地管理表空間的存儲(chǔ)
可通過以下兩種方式之一分配本地管理表空間中的區(qū):
? Automatic(自動(dòng)):又稱為自動(dòng)分配,這種方式指定表空間中的區(qū)大小由系統(tǒng)管理。
您不能指定區(qū)大小。不能為臨時(shí)表空間指定“Automatic(自動(dòng))”。
? Uniform(統(tǒng)一):這種方式指定使用指定的統(tǒng)一區(qū)大小管理表空間。默認(rèn)大小為
1 MB。臨時(shí)表空間的所有區(qū)都是統(tǒng)一的,而且采用默認(rèn)值。不能為還原表空間指定
“Uniform(統(tǒng)一)”。
可將本地管理表空間中的段空間管理指定為:
? Automatic(自動(dòng)):Oracle 數(shù)據(jù)庫使用位圖管理段中的空閑空間。位圖描述了段中各個(gè)數(shù)據(jù)塊的狀態(tài),該狀態(tài)與插入行可使用的塊中的空間量有關(guān)。隨著數(shù)據(jù)塊中可用空間的增多或減少,位圖會(huì)反映數(shù)據(jù)塊的新狀態(tài)。通過使用位圖,Oracle 數(shù)據(jù)庫
可以更自動(dòng)地管理空閑空間,因此,這種空間管理方式被稱為“自動(dòng)段空間管理
(ASSM)”。
? Manual(手動(dòng)):此方式指定使用空閑列表來管理段中的空閑空間。空閑列表是由
一些數(shù)據(jù)塊組成的列表,插入行可使用這些數(shù)據(jù)塊中的空間。由于這種管理段空間
的方式需要為在表空間中創(chuàng)建的方案對象指定并優(yōu)化PCTUSED、FREELISTS 和
FREELIST GROUPS 存儲(chǔ)參數(shù),因此這種方式稱為“手動(dòng)段空間管理”。支持此方
式是為了實(shí)現(xiàn)向后兼容;建議使用ASSM。
本地管理表空間的優(yōu)勢
與字典管理表空間相比,本地管理表空間具有以下優(yōu)勢:
? 如果使用本地管理,則不需要執(zhí)行遞歸空間管理操作。采用字典管理表空間時(shí),
如果使用或釋放區(qū)中的空間導(dǎo)致另一個(gè)操作使用或釋放還原段或數(shù)據(jù)字典表中的
空間,就會(huì)發(fā)生這種情況。
? 由于采用本地管理表空間時(shí)并不記錄數(shù)據(jù)字典表中的空閑空間,因此可以減少對
這些表的爭用。
? 在本地管理區(qū),可自動(dòng)跟蹤相鄰的空閑空間而無需合并空閑區(qū)。
? 系統(tǒng)會(huì)自動(dòng)確定本地管理區(qū)的大小。
? 對區(qū)位圖進(jìn)行更改不會(huì)生成還原信息,因?yàn)檫@些更改并不更新數(shù)據(jù)字典中的表
(表空間限額信息等特殊情況除外)。
預(yù)配置數(shù)據(jù)庫中的表空間
在本課程中,您將在預(yù)配置數(shù)據(jù)庫中創(chuàng)建以下表空間:
? SYSTEM:Oracle 服務(wù)器使用SYSTEM 表空間管理數(shù)據(jù)庫。包含在這個(gè)表空間中的數(shù)據(jù)字典和表包含關(guān)于數(shù)據(jù)庫的管理信息。以上信息均包含在SYS 方案中,只有SYS用戶或者擁有所需權(quán)限的其它管理用戶才能訪問這些信息。
? SYSAUX:這是SYSTEM 表空間的輔助表空間。在Oracle 數(shù)據(jù)庫早期版本中使用
SYSTEM 表空間或自己表空間的某些組件和產(chǎn)品,現(xiàn)在改為使用SYSAUX 表空間。
每個(gè)Oracle Database 10g 或更高版本都必須擁有SYSAUX 表空間。
? TEMP:如果執(zhí)行的SQL 語句需要?jiǎng)?chuàng)建臨時(shí)段(如大規(guī)模排序或創(chuàng)建索引),則可以使用臨時(shí)表空間。如同為每個(gè)用戶分配默認(rèn)的表空間以存儲(chǔ)創(chuàng)建的數(shù)據(jù)對象一樣,還會(huì)向每個(gè)用戶分配臨時(shí)表空間。除非另行指定,否則最佳方案是為數(shù)據(jù)庫定義一個(gè)默認(rèn)臨時(shí)表空間,會(huì)為所有新建用戶分配此表空間。在預(yù)配置數(shù)據(jù)庫中,TEMP表空間被指定為默認(rèn)臨時(shí)表空間。這意味著,如果在創(chuàng)建用戶帳戶時(shí)未指定臨時(shí)表空間,Oracle 數(shù)據(jù)庫會(huì)將此表空間分配給用戶作為臨時(shí)表空間。
? UNDOTBS1:這是數(shù)據(jù)庫服務(wù)器用于存儲(chǔ)還原信息的還原表空間。如果數(shù)據(jù)庫使用“自動(dòng)還原管理”,那么數(shù)據(jù)庫在任何指定時(shí)間必須只具有一個(gè)活動(dòng)的還原表空間。此表空間是在創(chuàng)建數(shù)據(jù)庫時(shí)創(chuàng)建的。
? USERS:此表空間用于存儲(chǔ)永久用戶對象和數(shù)據(jù)。在預(yù)配置數(shù)據(jù)庫中,USERS 表空間是用于存儲(chǔ)非系統(tǒng)用戶創(chuàng)建的所有對象的默認(rèn)表空間。對于SYS 和SYSTEM 用戶(系統(tǒng)用戶),默認(rèn)的永久表空間依然是SYSTEM。
? EXAMPLE:此表空間包含創(chuàng)建數(shù)據(jù)庫時(shí)可以安裝的示例方案。這些示例方案為各種示例提供了一個(gè)通用平臺。Oracle 文檔和課件中包含了建立在這些示例方案基礎(chǔ)上的示例
變更表空間
更改狀態(tài):表空間有三種不同的狀態(tài),它可以處于其中任一種狀態(tài)。由于表空間可用性取決于表空間的類型,所以以下三種狀態(tài)不一定可用:
? Read Write(讀寫):表空間已聯(lián)機(jī),可進(jìn)行讀寫。
? Read Only(只讀):指定“只讀”可使表空間轉(zhuǎn)換到只讀模式。此狀態(tài)下,可以完成(提交或回退)現(xiàn)有的事務(wù)處理,但是,不允許對表空間中的對象進(jìn)一步執(zhí)行數(shù)據(jù)操縱語言(DML) 操作。表空間已聯(lián)機(jī),但處于只讀狀態(tài)。不能使SYSTEM 或SYSAUX 表空間處于只讀模式。
? Offline(脫機(jī)):可以讓聯(lián)機(jī)的表空間脫機(jī),使數(shù)據(jù)庫的這部分暫時(shí)不可用于一般
用途。數(shù)據(jù)庫的余下部分是開放的,用戶可以訪問其中的數(shù)據(jù)。表空間脫機(jī)時(shí),可
以使用以下選項(xiàng):
- Normal(正常):如果表空間中的所有數(shù)據(jù)文件都不存在錯(cuò)誤狀態(tài),則通過正
常方式便可使表空間脫機(jī)。當(dāng)Oracle 數(shù)據(jù)庫使表空間脫機(jī)時(shí),通過對表空間中
的所有數(shù)據(jù)文件設(shè)置檢查點(diǎn),可以確保將所有數(shù)據(jù)寫入磁盤。
- Temporary(臨時(shí)):如果表空間中的一個(gè)或多個(gè)文件存在錯(cuò)誤狀態(tài),也可以
使表空間暫時(shí)脫機(jī)。當(dāng)Oracle 數(shù)據(jù)庫使(尚未脫機(jī)的)數(shù)據(jù)文件脫機(jī)時(shí),會(huì)對
這些數(shù)據(jù)文件設(shè)置檢查點(diǎn)。如果沒有任何文件脫機(jī),但是您使用了臨時(shí)子句,
則使表空間重新聯(lián)機(jī)時(shí)便不需要執(zhí)行介質(zhì)恢復(fù)。但是,如果因?qū)戝e(cuò)誤而導(dǎo)致表
空間的一個(gè)或多個(gè)文件脫機(jī),而此時(shí)您讓表空間臨時(shí)脫機(jī),那么表空間需要執(zhí)
行恢復(fù)后才能重新聯(lián)機(jī)。
- Immediate(立即):表空間可以立即脫機(jī),Oracle 數(shù)據(jù)庫不需要對任何數(shù)據(jù)
文件設(shè)置檢查點(diǎn)。如果指定了“Immediate(立即)”,則必須先對表空間執(zhí)行
介質(zhì)恢復(fù),才能使表空間聯(lián)機(jī)。如果數(shù)據(jù)庫在NOARCHIVELOG 模式下運(yùn)行,
則無法立即使表空間脫機(jī)。
- For Recover(進(jìn)行恢復(fù)):FOR RECOVER 設(shè)置已被淘汰。支持此語法的目的
是為了實(shí)現(xiàn)向后兼容。
查看表空間信息
? 表空間信息:
- DBA_TABLESPACES
- V$TABLESPACE
? 數(shù)據(jù)文件信息:
- DBA_DATA_FILES
- V$DATAFILE
? 臨時(shí)文件信息:
- DBA_TEMP_FILES
- V$TEMPFILE
什么是Automatic Storage Management
ASM 將文件系統(tǒng)與卷管理器縱向集成在一起,這是一項(xiàng)專門為Oracle 數(shù)據(jù)庫文件構(gòu)建的技術(shù)。使用ASM 可管理單個(gè)對稱多處理(SMP) 計(jì)算機(jī),或通過管理集群的多個(gè)節(jié)點(diǎn)來支持Oracle Real Application Clusters (RAC)。
ASM 在所有可用的資源中分布輸入/輸出(I/O) 負(fù)載,在免除了手動(dòng)I/O 優(yōu)化的同時(shí)優(yōu)化了性能。ASM 幫助DBA 管理動(dòng)態(tài)數(shù)據(jù)庫環(huán)境,讓DBA 在不關(guān)閉數(shù)據(jù)庫的情況下,通過增加數(shù)據(jù)庫的大小來調(diào)整存儲(chǔ)分配。
ASM 通過提供冗余的數(shù)據(jù)副本來提供容錯(cuò)能力,也可以在供應(yīng)商提供的存儲(chǔ)機(jī)制基礎(chǔ)上構(gòu)建此功能。數(shù)據(jù)管理是通過為數(shù)據(jù)類選擇期望的可靠性和性能特性實(shí)現(xiàn)的,而不是對每個(gè)文件都使用人工交互。通過自動(dòng)處理手動(dòng)存儲(chǔ),ASM 功能節(jié)省了DBA 的時(shí)間,因此提高了DBA 的能力,使他們可以管理更多和更大的數(shù)據(jù)庫,而且效率也更高。
ASM:主要功能和優(yōu)點(diǎn)
ASM 將文件劃分為區(qū)(不同于前面介紹的數(shù)據(jù)文件區(qū)),而且將每個(gè)文件的區(qū)均勻地分布在所有磁盤上。ASM 使用索引技術(shù)跟蹤每個(gè)區(qū)的位置。存儲(chǔ)容量發(fā)生變化時(shí),ASM 并不重新條帶化所有數(shù)據(jù),而是根據(jù)添加或刪除的存儲(chǔ)量,按比例移動(dòng)一定數(shù)量的數(shù)據(jù),通過重新平均分配文件來保持磁盤間的負(fù)載平衡。此操作是在數(shù)據(jù)庫處于活動(dòng)狀態(tài)時(shí)完成的。
可以提高重新平衡操作的速度以更快地完成操作,也可以降低此速度以減少對I/O 子系統(tǒng)的影響。ASM 還提供了鏡像保護(hù),因此不需要購買第三方邏輯卷管理器。ASM 的一個(gè)特有優(yōu)勢是可為每個(gè)文件創(chuàng)建鏡像,而不是為每個(gè)卷創(chuàng)建鏡像。因此,同一磁盤組可以包含鏡像文件或非鏡像文件的組合。
ASM 支持?jǐn)?shù)據(jù)文件、日志文件、控制文件、歸檔日志、Recovery Manager (RMAN) 備份集及其它Oracle 數(shù)據(jù)庫文件類型。ASM 還支持RAC,這樣就不再需要使用集群邏輯卷管理器或集群文件系統(tǒng)。
? 表空間管理相關(guān)操作
一.表空間的create /drop /edit擴(kuò)容 /move? /offline? /online /read write /read only
| alter tablespace tbs read only; alter tablespace tbs offline; |
二.表空間的更改
| select tablespace_name ,status from dba_tablespaces; |
?三.表空間的查看
| SQL> set wrap off SQL> set linesize 200 SQL> select t.* ? 2? from (SELECT D.TABLESPACE_NAME, ? 3? SPACE "SUM_SPACE(M)", ? 4? BLOCKS SUM_BLOCKS, ? 5? SPACE - NVL(FREE_SPACE, 0) "USED_SPACE(M)", ? 6? ROUND((1 - NVL(FREE_SPACE, 0) / SPACE) * 100, 2) "USED_RATE(%)", ? 7? FREE_SPACE "FREE_SPACE(M)" ? 8? FROM (SELECT TABLESPACE_NAME, ? 9? ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE, ?10? SUM(BLOCKS) BLOCKS ?11? FROM DBA_DATA_FILES ?12? GROUP BY TABLESPACE_NAME) D, ?13? (SELECT TABLESPACE_NAME, ?14? ROUND(SUM(BYTES) / (1024 * 1024), 2) FREE_SPACE ?15? FROM DBA_FREE_SPACE ?16? GROUP BY TABLESPACE_NAME) F ?17? WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) ?18? UNION ALL --if have tempfile ?19? SELECT D.TABLESPACE_NAME, ?20? SPACE "SUM_SPACE(M)", ?21? BLOCKS SUM_BLOCKS, ?22? USED_SPACE "USED_SPACE(M)", ?23? ROUND(NVL(USED_SPACE, 0) / SPACE * 100, 2) "USED_RATE(%)", ?24? SPACE - USED_SPACE "FREE_SPACE(M)" ?25? FROM (SELECT TABLESPACE_NAME, ?26? ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE, ?27? SUM(BLOCKS) BLOCKS ?28? FROM DBA_TEMP_FILES ?29? GROUP BY TABLESPACE_NAME) D, ?30? (SELECT TABLESPACE, ?31? ROUND(SUM(BLOCKS * 8192) / (1024 * 1024), 2) USED_SPACE ?32? FROM V$SORT_USAGE ?33? GROUP BY TABLESPACE) F ?34? WHERE D.TABLESPACE_NAME = F.TABLESPACE(+)) t ?35? order by "USED_RATE(%)" desc; TABLESPACE_NAME SUM_SPACE(M) SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M) --------------- ------------ ---------- ------------- ------------ ------------- USERS???????????????? 971.25???? 124320??????? 970.06??????? 99.88????????? 1.19 SYSTEM?????????????????? 480????? 61440?????????? 477??????? 99.38???????????? 3 SYSAUX?????????????????? 270????? 34560??????? 262.94??????? 97.39????????? 7.06 TBS1?????????????????????? 1??????? 128?????????? .62?????????? 62?????????? .38 UNDOTBS1????????????????? 45?????? 5760????????? 9.81???????? 21.8???????? 35.19 TBS1_M???????????????????? 1??????? 128?????????? .19?????????? 19?????????? .81 TBS3?????????????????????? 1??????? 128?????????? .12?????????? 12?????????? .88 TBS4?????????????????????? 1??????? 128?????????? .06??????????? 6?????????? .94 TEMP????????????????????? 20?????? 2560????????????????????????? 0 已選擇9行。 |
?
轉(zhuǎn)載于:https://blog.51cto.com/liuleideshitou/708516
總結(jié)
以上是生活随笔為你收集整理的OCP之5 管理数据库存储结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: InnerText和InnerXml的区
- 下一篇: 分享WCF文件传输---WCFFileT