OCP之5 管理数据库存储结构
存儲結構
一個數(shù)據(jù)庫可劃分為多個稱為表空間的邏輯存儲單元。每個表空間可以包含很多Oracle
邏輯數(shù)據(jù)塊。DB_BLOCK_SIZE 參數(shù)指定了邏輯塊的大小。邏輯塊的大小介于2 KB 到
32 KB 之間,默認大小為8 KB。特定數(shù)目的相鄰邏輯塊構成了一個區(qū)。為特定邏輯結構分配的一組區(qū)構成了一個段。Oracle 數(shù)據(jù)塊是邏輯I/O 的最小單位。
如何存儲表數(shù)據(jù)
創(chuàng)建表時,就會創(chuàng)建段來保存表數(shù)據(jù)。表空間包含一組段。從邏輯上講,表包含由列值組
成的行。行最終將以行片段的形式存儲在數(shù)據(jù)庫塊中。之所以稱為行片段,是因為某些情
況下,無法在一個位置存儲一整行。當插入行由于太長單個塊容納不下時,或者由于更新
而導致現(xiàn)有行大小超出了行的當前空間時,就會發(fā)生這種情況。
數(shù)據(jù)庫塊:
Oracle 數(shù)據(jù)塊包含:
? 塊頭:塊頭包含段類型(如表或索引)、數(shù)據(jù)塊地址、表目錄、行目錄和事務
處理插槽。每個插槽的大小為23 字節(jié),修改塊中的行時會使用這些插槽。塊頭
按從上向下的方向擴展。
? 行數(shù)據(jù):這是塊中行的實際數(shù)據(jù)。行數(shù)據(jù)空間按從下向上的方向擴展。
? 空閑空間:空閑空間位于塊的中間。這樣可以根據(jù)需要擴展頭和行數(shù)據(jù)空間。
插入了一些新行之后,或者使用較大值更新了現(xiàn)有行的某些列之后,行數(shù)據(jù)就會
占用空閑空間。如果行目錄需要更多的行條目,或者需要的事務處理插槽數(shù)多于
最初配置的數(shù)目,就會出現(xiàn)頭擴展。最初,塊中的空閑空間是相鄰的。但是,
刪除和更新操作可能會導致在塊空閑空間中產(chǎn)生碎片。必要時Oracle 服務器會
接合塊中的空閑空間。
表空間和數(shù)據(jù)文件
Oracle 數(shù)據(jù)庫在邏輯上將數(shù)據(jù)存儲在表空間中,在物理上
將數(shù)據(jù)存儲在數(shù)據(jù)文件中。
表空間和數(shù)據(jù)文件
數(shù)據(jù)庫、表空間和數(shù)據(jù)文件彼此密切相關,但也存在不可忽視的差異:
? Oracle 數(shù)據(jù)庫包括一個或多個稱為表空間的邏輯存儲單元,這些表空間可以作為一個整體存儲數(shù)據(jù)庫的所有數(shù)據(jù)。
? Oracle 數(shù)據(jù)庫中的每個表空間都包括一個或多個稱為數(shù)據(jù)文件的文件,這些數(shù)據(jù)文件具有與運行Oracle 軟件的操作系統(tǒng)一致的物理結構。
? 數(shù)據(jù)庫的數(shù)據(jù)作為一個整體存儲在構成數(shù)據(jù)庫各個表空間的數(shù)據(jù)文件中。例如,
最簡單的Oracle 數(shù)據(jù)庫包括兩個表空間(SYSTEM 和SYSAUX 表空間,這兩個表
空間是必須存在的),每個表空間包含一個數(shù)據(jù)文件。另一個數(shù)據(jù)庫可能包括三
表空間,每個表空間包含兩個數(shù)據(jù)文件(共有六個數(shù)據(jù)文件)。一個數(shù)據(jù)庫最多可以包含65,534 個數(shù)據(jù)文件。
Oracle Managed Files (OMF)
如果使用Oracle Managed Files (OMF),則不需要直接管理構成Oracle 數(shù)據(jù)庫的操作系統(tǒng)文件。可以根據(jù)數(shù)據(jù)庫對象而不是文件名指定操作。對于以下數(shù)據(jù)庫結構,可以按需要在數(shù)據(jù)庫內部使用標準文件系統(tǒng)接口來創(chuàng)建和刪除文件:
? 表空間
? 重做日志文件
? 控制文件
? 歸檔日志
? 塊更改跟蹤文件
? 閃回日志
? RMAN 備份
數(shù)據(jù)庫可以混合包含Oracle Managed Files 和非Oracle Managed Files。由上面任一參數(shù)指定的文件系統(tǒng)目錄必須已經(jīng)存在:數(shù)據(jù)庫不會創(chuàng)建文件系統(tǒng)目錄。該目錄還必須擁有允許數(shù)據(jù)庫在其中創(chuàng)建文件的權限。
表空間中的空間管理
在表空間中以區(qū)為單位分配空間。創(chuàng)建表空間后可使用以下方法之一來跟蹤空閑空間和已用空間:
? 本地管理的表空間:在表空間中通過位圖管理區(qū)。位圖中的每一位對應一個塊或一組塊。分配區(qū)或為重新利用空間而釋放區(qū)后,Oracle 服務器通過更改位圖值來顯示塊的新狀態(tài)。
? 字典管理的表空間:由數(shù)據(jù)字典管理區(qū)。每當分配或取消分配區(qū)后,Oracle 服務器
會更新數(shù)據(jù)字典中的相應表。這是為了實現(xiàn)向后兼容;建議使用本地管理的表空間。
本地管理表空間的存儲
可通過以下兩種方式之一分配本地管理表空間中的區(qū):
? Automatic(自動):又稱為自動分配,這種方式指定表空間中的區(qū)大小由系統(tǒng)管理。
您不能指定區(qū)大小。不能為臨時表空間指定“Automatic(自動)”。
? Uniform(統(tǒng)一):這種方式指定使用指定的統(tǒng)一區(qū)大小管理表空間。默認大小為
1 MB。臨時表空間的所有區(qū)都是統(tǒng)一的,而且采用默認值。不能為還原表空間指定
“Uniform(統(tǒng)一)”。
可將本地管理表空間中的段空間管理指定為:
? Automatic(自動):Oracle 數(shù)據(jù)庫使用位圖管理段中的空閑空間。位圖描述了段中各個數(shù)據(jù)塊的狀態(tài),該狀態(tài)與插入行可使用的塊中的空間量有關。隨著數(shù)據(jù)塊中可用空間的增多或減少,位圖會反映數(shù)據(jù)塊的新狀態(tài)。通過使用位圖,Oracle 數(shù)據(jù)庫
可以更自動地管理空閑空間,因此,這種空間管理方式被稱為“自動段空間管理
(ASSM)”。
? Manual(手動):此方式指定使用空閑列表來管理段中的空閑空間。空閑列表是由
一些數(shù)據(jù)塊組成的列表,插入行可使用這些數(shù)據(jù)塊中的空間。由于這種管理段空間
的方式需要為在表空間中創(chuàng)建的方案對象指定并優(yōu)化PCTUSED、FREELISTS 和
FREELIST GROUPS 存儲參數(shù),因此這種方式稱為“手動段空間管理”。支持此方
式是為了實現(xiàn)向后兼容;建議使用ASSM。
本地管理表空間的優(yōu)勢
與字典管理表空間相比,本地管理表空間具有以下優(yōu)勢:
? 如果使用本地管理,則不需要執(zhí)行遞歸空間管理操作。采用字典管理表空間時,
如果使用或釋放區(qū)中的空間導致另一個操作使用或釋放還原段或數(shù)據(jù)字典表中的
空間,就會發(fā)生這種情況。
? 由于采用本地管理表空間時并不記錄數(shù)據(jù)字典表中的空閑空間,因此可以減少對
這些表的爭用。
? 在本地管理區(qū),可自動跟蹤相鄰的空閑空間而無需合并空閑區(qū)。
? 系統(tǒng)會自動確定本地管理區(qū)的大小。
? 對區(qū)位圖進行更改不會生成還原信息,因為這些更改并不更新數(shù)據(jù)字典中的表
(表空間限額信息等特殊情況除外)。
預配置數(shù)據(jù)庫中的表空間
在本課程中,您將在預配置數(shù)據(jù)庫中創(chuàng)建以下表空間:
? SYSTEM:Oracle 服務器使用SYSTEM 表空間管理數(shù)據(jù)庫。包含在這個表空間中的數(shù)據(jù)字典和表包含關于數(shù)據(jù)庫的管理信息。以上信息均包含在SYS 方案中,只有SYS用戶或者擁有所需權限的其它管理用戶才能訪問這些信息。
? SYSAUX:這是SYSTEM 表空間的輔助表空間。在Oracle 數(shù)據(jù)庫早期版本中使用
SYSTEM 表空間或自己表空間的某些組件和產(chǎn)品,現(xiàn)在改為使用SYSAUX 表空間。
每個Oracle Database 10g 或更高版本都必須擁有SYSAUX 表空間。
? TEMP:如果執(zhí)行的SQL 語句需要創(chuàng)建臨時段(如大規(guī)模排序或創(chuàng)建索引),則可以使用臨時表空間。如同為每個用戶分配默認的表空間以存儲創(chuàng)建的數(shù)據(jù)對象一樣,還會向每個用戶分配臨時表空間。除非另行指定,否則最佳方案是為數(shù)據(jù)庫定義一個默認臨時表空間,會為所有新建用戶分配此表空間。在預配置數(shù)據(jù)庫中,TEMP表空間被指定為默認臨時表空間。這意味著,如果在創(chuàng)建用戶帳戶時未指定臨時表空間,Oracle 數(shù)據(jù)庫會將此表空間分配給用戶作為臨時表空間。
? UNDOTBS1:這是數(shù)據(jù)庫服務器用于存儲還原信息的還原表空間。如果數(shù)據(jù)庫使用“自動還原管理”,那么數(shù)據(jù)庫在任何指定時間必須只具有一個活動的還原表空間。此表空間是在創(chuàng)建數(shù)據(jù)庫時創(chuàng)建的。
? USERS:此表空間用于存儲永久用戶對象和數(shù)據(jù)。在預配置數(shù)據(jù)庫中,USERS 表空間是用于存儲非系統(tǒng)用戶創(chuàng)建的所有對象的默認表空間。對于SYS 和SYSTEM 用戶(系統(tǒng)用戶),默認的永久表空間依然是SYSTEM。
? EXAMPLE:此表空間包含創(chuàng)建數(shù)據(jù)庫時可以安裝的示例方案。這些示例方案為各種示例提供了一個通用平臺。Oracle 文檔和課件中包含了建立在這些示例方案基礎上的示例
變更表空間
更改狀態(tài):表空間有三種不同的狀態(tài),它可以處于其中任一種狀態(tài)。由于表空間可用性取決于表空間的類型,所以以下三種狀態(tài)不一定可用:
? Read Write(讀寫):表空間已聯(lián)機,可進行讀寫。
? Read Only(只讀):指定“只讀”可使表空間轉換到只讀模式。此狀態(tài)下,可以完成(提交或回退)現(xiàn)有的事務處理,但是,不允許對表空間中的對象進一步執(zhí)行數(shù)據(jù)操縱語言(DML) 操作。表空間已聯(lián)機,但處于只讀狀態(tài)。不能使SYSTEM 或SYSAUX 表空間處于只讀模式。
? Offline(脫機):可以讓聯(lián)機的表空間脫機,使數(shù)據(jù)庫的這部分暫時不可用于一般
用途。數(shù)據(jù)庫的余下部分是開放的,用戶可以訪問其中的數(shù)據(jù)。表空間脫機時,可
以使用以下選項:
- Normal(正常):如果表空間中的所有數(shù)據(jù)文件都不存在錯誤狀態(tài),則通過正
常方式便可使表空間脫機。當Oracle 數(shù)據(jù)庫使表空間脫機時,通過對表空間中
的所有數(shù)據(jù)文件設置檢查點,可以確保將所有數(shù)據(jù)寫入磁盤。
- Temporary(臨時):如果表空間中的一個或多個文件存在錯誤狀態(tài),也可以
使表空間暫時脫機。當Oracle 數(shù)據(jù)庫使(尚未脫機的)數(shù)據(jù)文件脫機時,會對
這些數(shù)據(jù)文件設置檢查點。如果沒有任何文件脫機,但是您使用了臨時子句,
則使表空間重新聯(lián)機時便不需要執(zhí)行介質恢復。但是,如果因寫錯誤而導致表
空間的一個或多個文件脫機,而此時您讓表空間臨時脫機,那么表空間需要執(zhí)
行恢復后才能重新聯(lián)機。
- Immediate(立即):表空間可以立即脫機,Oracle 數(shù)據(jù)庫不需要對任何數(shù)據(jù)
文件設置檢查點。如果指定了“Immediate(立即)”,則必須先對表空間執(zhí)行
介質恢復,才能使表空間聯(lián)機。如果數(shù)據(jù)庫在NOARCHIVELOG 模式下運行,
則無法立即使表空間脫機。
- For Recover(進行恢復):FOR RECOVER 設置已被淘汰。支持此語法的目的
是為了實現(xiàn)向后兼容。
查看表空間信息
? 表空間信息:
- DBA_TABLESPACES
- V$TABLESPACE
? 數(shù)據(jù)文件信息:
- DBA_DATA_FILES
- V$DATAFILE
? 臨時文件信息:
- DBA_TEMP_FILES
- V$TEMPFILE
什么是Automatic Storage Management
ASM 將文件系統(tǒng)與卷管理器縱向集成在一起,這是一項專門為Oracle 數(shù)據(jù)庫文件構建的技術。使用ASM 可管理單個對稱多處理(SMP) 計算機,或通過管理集群的多個節(jié)點來支持Oracle Real Application Clusters (RAC)。
ASM 在所有可用的資源中分布輸入/輸出(I/O) 負載,在免除了手動I/O 優(yōu)化的同時優(yōu)化了性能。ASM 幫助DBA 管理動態(tài)數(shù)據(jù)庫環(huán)境,讓DBA 在不關閉數(shù)據(jù)庫的情況下,通過增加數(shù)據(jù)庫的大小來調整存儲分配。
ASM 通過提供冗余的數(shù)據(jù)副本來提供容錯能力,也可以在供應商提供的存儲機制基礎上構建此功能。數(shù)據(jù)管理是通過為數(shù)據(jù)類選擇期望的可靠性和性能特性實現(xiàn)的,而不是對每個文件都使用人工交互。通過自動處理手動存儲,ASM 功能節(jié)省了DBA 的時間,因此提高了DBA 的能力,使他們可以管理更多和更大的數(shù)據(jù)庫,而且效率也更高。
ASM:主要功能和優(yōu)點
ASM 將文件劃分為區(qū)(不同于前面介紹的數(shù)據(jù)文件區(qū)),而且將每個文件的區(qū)均勻地分布在所有磁盤上。ASM 使用索引技術跟蹤每個區(qū)的位置。存儲容量發(fā)生變化時,ASM 并不重新條帶化所有數(shù)據(jù),而是根據(jù)添加或刪除的存儲量,按比例移動一定數(shù)量的數(shù)據(jù),通過重新平均分配文件來保持磁盤間的負載平衡。此操作是在數(shù)據(jù)庫處于活動狀態(tài)時完成的。
可以提高重新平衡操作的速度以更快地完成操作,也可以降低此速度以減少對I/O 子系統(tǒng)的影響。ASM 還提供了鏡像保護,因此不需要購買第三方邏輯卷管理器。ASM 的一個特有優(yōu)勢是可為每個文件創(chuàng)建鏡像,而不是為每個卷創(chuàng)建鏡像。因此,同一磁盤組可以包含鏡像文件或非鏡像文件的組合。
ASM 支持數(shù)據(jù)文件、日志文件、控制文件、歸檔日志、Recovery Manager (RMAN) 備份集及其它Oracle 數(shù)據(jù)庫文件類型。ASM 還支持RAC,這樣就不再需要使用集群邏輯卷管理器或集群文件系統(tǒng)。
? 表空間管理相關操作
一.表空間的create /drop /edit擴容 /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行。 |
?
轉載于:https://blog.51cto.com/liuleideshitou/708516
總結
以上是生活随笔為你收集整理的OCP之5 管理数据库存储结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: InnerText和InnerXml的区
- 下一篇: 创建oracle 数据库表空间,角色,用