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