目的 描述塊中表行數據的存儲 創建和管理表空間 獲取表空間信息 表數據的存儲方式 創建表時,還會創建一個用於保存其數據的段。 表空間包含一個段集合。 從邏輯上表包含許多行列值。行最終以行片段的形式存儲在資料庫塊中。之所以稱為行片段,是因為在某些情況下可能會在一個位置存儲不完整的行。 -當插入的行太大 ...
目的 描述塊中表行數據的存儲 創建和管理表空間 獲取表空間信息 表數據的存儲方式 創建表時,還會創建一個用於保存其數據的段。 表空間包含一個段集合。 從邏輯上表包含許多行列值。行最終以行片段的形式存儲在資料庫塊中。之所以稱為行片段,是因為在某些情況下可能會在一個位置存儲不完整的行。 -當插入的行太大而無法裝入單塊時,鏈接行 -當更新導致現有行超出當前塊的可用空閑空間時,遷移行 -當表中的列多於255列時,也使用行片段。這種情況下,這些行片段可能位於同一個塊(塊內鏈)中,也可能位於多個塊中。 資料庫塊 塊頭:塊頭包含段類型(如表或索引)/數據塊地址/表目錄/行目錄和事務處理插槽。每個插槽的大小約23位元組,修改塊中的行時會使用這些插槽。塊頭自上而下進行增長。 行數據:這是塊中行的實際數據。行數據空間自下而上進行增長。 空閑空間:空閑空間位於塊的中部,允許頭和行數據空間在必要時進行增長。當插入新行或更大的值更新現有行的列時,行數據會占用空閑空間。 導致塊頭增長的事件: -行目錄需要更多的行條目 -需要的事務處理插槽數多於最初配置的數目 起初,塊中的空閑空間是相鄰的。但是,刪除和更新操作可能會導致塊中的空閑空間變成碎片。需要時Oracle伺服器會接合塊中的空閑空間。 表空間的存儲 區分配:可通過以下兩種方法之一分配本地管理表空間中的區: -自動,“自動分配”,這種方法指定表空間中的區的大小是由系統管理的。不能對臨時表空間指定“Automatic自動”。 -統一,這種方法規定使用指定的統一區大小來管理表空間。預設大小為1MB.臨時表空間的所有區都是統一的。不能對還原表空間(UNDO)指定“Uniform(統一)” 段空間管理 -自動,Oracle DB使用點陣圖管理段中的空閑空間。點陣圖描述了段中每個數據塊的狀態。該狀態與可插入行的塊中的空間量有關。當數據塊中可用空間增多或減少時,點陣圖中會反映數據塊的新狀態。通過使用點陣圖,Oracle DB可以提高管理空閑空間的自動化程度。因此,這種空間管理方式稱為“自動段空間管理(ASSM)” -手動,使用空閑列表來管理段中的空閑空間。空閑列表是由一些數據塊組成的列表,這些數據塊中有可插入行的空間。由於這種管理段空間的方式需要為表空間中創建的方案對象指定並優化PCTUSED/FREELISTS和FREELIST GROUPS存儲參數,因此這種方式稱為‘手動段空間管理’。支持使用此方法是為向後相容,建議使用ASSM自動段管理。 壓縮選項:預設情況下,數據段壓縮功能處於禁用狀態。啟用數據段壓縮功能可以節省磁碟空間使用量,減少緩衝區高速緩存中的記憶體使用量,還可以加快讀取執行查詢的效率。但是,在數據載入和DML過程中會產生CPU開銷。本功能在聯機分析處理(OLAP)系統中尤其有用,在這些系統中存在長時間的只讀運算;但也可用在聯機事務處理(OLTP)系統中。 事件記錄:事件記錄子句為表空間中創建的所有段設置預設的事件記錄值。對錶空間中的對象所做的更改會寫入重做日誌。如果未啟用事件記錄,則使用SQL*loader和直接載入Insert操作進行的任何直接載入都不會寫入重做日誌,因此,如果發生數據丟失的情況,這些對象將不可恢復。如果在未啟用事件記錄的情況下創建了對象,則只有備份這些對象才能進行恢復。選擇不啟用事件記錄會對日後恢復對象的能力造成巨大影響。《Oracle Database SQL Reference》Reference 註意:如果對資料庫啟用了force logging模式,該預設優先順序高於表空間事件記錄設置。可以在創建資料庫時將資料庫置於FORCE LOGGING模式,也可以在創建資料庫後使用alter database force logging命令將資料庫置於該模式。 塊信息:此區域顯示所創建的表空間使用的塊大小。此處顯示的值為只讀值。如果設置了任何其它塊大小初始化參數(db_nK_cache_size),則會在此處列出其它值作為選項。 預配置的資料庫中的表空間 SYSTEM Oracle伺服器使用SYSTEM表空間管理資料庫。這個表空間包含的數據字典和表中包含關於資料庫的管理信息。上述信息均包含SYS用戶中,只有SYS用戶或擁有者所需許可權的其它管理用戶才可訪問這些信息。 SYSAUX SYSTEM表空間的輔助表空間。Oracle DB早期版本中某些使用SYSTEM表空間或其本身表空間的組件和產品現改為使用SYSAUX表空間。每個Oracle Database 10g(或更高版本)資料庫都必須擁有SYSAUX表空間。 USERS 此表空間用於存儲用戶對象和數據。如果在創建用戶時未指定預設的表空間,則USERS表空間將成為該用戶創建的所有對象的預設表空間。對於SYS和SYSTEM用戶,預設的永久表空間是SYSTEM。 UNDOTBS1 資料庫伺服器用於存儲還原信息的還原表空間。如果資料庫使用“自動還原管理”,那麼資料庫在任何指定時間只能使用一個還原表空間。此表空間是創建資料庫時創建的。 TEMP 如果執行的SQL語句需要創建臨時段(如大規模排序或創建索引),則需要使用臨時表空間。創建用戶時向用戶分配一個預設的臨時表空間。最好的做法是為資料庫定義一個預設臨時表空間,並且將此表空間分配給所有新建用戶(除非另行指定)。 是 EXAMPLE(可選) 此表空間包含創建資料庫時可以安裝的示例方案。這些示例方案為各種示例提供了一個通用平臺。 註意:為簡化管理,通常為索引使用單獨的表空間。 變更表空間 重命名 更改狀態: -讀寫,表空間已聯機,可進行讀寫。 -只讀,指定‘只讀’可將表空間置於只讀模式。此狀態下,可以完成(提交或回退)現有的事務處理,但是,不允許對錶空間中的對象進一步執行數據操縱語言(DML)操作。表空間已聯機,但處於只讀狀態。不能使SYSTEM和SYSAUX表空間處於只讀模式。 註:無法使還原表空間和臨時表空間成為只讀表空間。 -離線,可以讓聯機的表空間離線,使資料庫的這部分暫時不可用於一般用途。資料庫的餘下部分是開放的,可讓用戶訪問其中的數據。表空間離線時,可以使用以下選項: Normal(正常),如果表空間中的任一數據文件都不存在任何錯誤狀態,通過正常方式便可使表空間離線。當Oracle DB使表空間離線時,通過為表空間的所有數據文件設置檢查點,來確保所有數據寫入磁碟。 Temporary(臨時),如果表空間中的一個或多個文件存在錯誤狀態,也可以使表空間臨時離線。當Oracle DB使數據文件(尚未離線的)離線時,將為這些數據文件設置檢查點。如果沒有任何文件離線,但是您使用了臨時子句,則在使表空間重新聯機時不需要執行介質恢復。但是,如果因寫錯誤而導致表空間的一個或個文件離線,而且設置了表空間臨時離線,那麼表空間需要執行恢復後才能重新聯機。 Immediate(立即),Oracle DB可以使表空間立即離線,而不需要為任何數據文件設置檢查點。如果指定了“Immediate(立即)”,則必須先對錶空間執行介質恢復,才能使表空間聯機。如果資料庫在NOARCHIVELOG模式下運行,則無法立即使表空間離線。 For Recover(用於恢復),FOR Recover設置已被廢棄。支持此語法是為了向後相容。 註:不能使系統表空間離線。 更改大小:通過向表空間添加數據文件/或更改現有數據文件的大小,可增加現有表空間的空間。 -ADD ALTER TABLESPACE <tablespace_name> ADD DATAFILE <data file path> SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE 8192M; 註:無法向大文件表空間中繼續添加其它數據文件。 -RESIZE ALTER DATABASE DATAFILE <data file path> RESIZE <change_size>; 可以擴大或縮小表空間。但是,不能使數據文件小於該文件中已使用的空間。ORA-03297:flie contains used data beyond requested resize value. 存儲選項 閥值:Thresholds(閥值),可更改表空間的空間使用到達警告或嚴重級別時的值。 -Use Database Default Thresholds(使用資料庫預設閥值) -Specify Thresholds(指定閥值) -Disable Thresholds(禁用閥值) 註:預設情況下,每隔10分鐘才檢查一次空間使用率,因此,可能要花費數分鐘時間才會註冊一條閥值預警。 表空間操作 -Add Datafile(添加數據文件):將數據文件添加到表空間 -Create Like(類似創建):將表空間作模板,創建另一個表空間。 -Generate DDL(生成DDL):生成用於創建表空間的數據定義語言(DDL)語句。隨後,此語句可複製並粘貼到文本文件,以用作腳本或文檔。 -Make Locally Managed(進行本地管理):如果表空間當前是字典管理的表空間,則可將該表空間轉換為本地管理的表空間。這種轉換隻能單向進行;不能將表空間重新轉換到字典管理的表空間。如果需要,可以使用PL\SQL程式包。DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL來轉換到字典管理的表空間。 -Make Readonly(只讀):停止對錶空間的所有寫操作。允許完成當前的事務處理,但是,不允許對錶空間啟動新的DML活動或其他寫活動。只有表空間的當前狀態不是只讀時,才顯示此選項。 -Make Writable(可寫):允許對錶空間中的對象啟動DML活動和其它寫活動。只有表空間的當前狀態不可寫時,才顯示此選項。 -Place Online(聯機):使當前離線的表空間聯機。 -Reorganize(重組):表空間中各處移動對象以回收空間,使其變為可用。重組時請在表空間對象處於非使用/非高峰時執行。 -Run Segment Advisor(運行段指導):使用該指導可根據對象中空間碎片的級別來確定對象是否擁有可回收的空間。會在表空間級別上針對錶空間中的每個段生成建議。 -Show Dependencies(顯示依賴性):顯示此表空間依賴的對象,或依賴於此表空間的對象。 -Show Tablespace Contents(顯示表空間內容):顯示關於表空間中所有段的信息,包括所有區的圖形。 -Take Offline(離線):使當前聯機的表空間不可用。此時不會刪除表空間,只是表空間不可用。 刪除表空間 不再需要表空間及其內容(表空間中包含的段),可以從資料庫中刪除表空間及其內容。必須具有DROP TABLESPACE系統許可權才可以刪除表空間。 刪除表空間時,會刪除關聯資料庫控制文件中的文件指針。如果在使用Oracle管理的文件(OMF),則還會刪除基礎操作系統文件。如果未使用OMF,則可以根據需要指示Oracle伺服器其刪除包含在已刪除表空間中的操作系統文件。如果不指示,Oracle伺服器只會刪除表空間的數據文件指針,後續還要在操作系統刪除這些數據文件。 查看表空間信息 表空間信息: DBA_TABLESPACES V$TABLESPACE 數據文件信息: DBA_DATA_FILES V$DATAFILE V$DBFILE視圖顯示資料庫中的所有數據文件,保留此視圖是為了向後相容。 臨時文件信息 DBA_TEMP_FILES V$TEMPFILE Oracle管理的文件(OMF) 按照資料庫對象而不是文件名指定文件操作. DB_CREATE_FILE_DEST 定義數據文件和臨時文件預設文件系統目錄的位置 DB_CREATE_ONLINE_LOG_DEST_n 定義重做日誌文件和控制文件的創建位置 DB_RECOVERY_FILE_DEST 快速恢復區的預設位置 ALTER SYSTEM SET DB_CREATE_FILE_DEST = '+DATA'; CREATE TABLESPACE TBS_1; OMF根據內部使用標準文件系統介面創建或刪除下列資料庫結構的文件: -表空間 -重做日誌文件 -控制文件 -歸檔日誌 -塊更改跟蹤文件 -閃回日誌 -RMAN備份 資料庫既可以包含Oracle管理的文件,也可以包含非Oracle管理的文件。由這兩個參數之一指定的文件系統目錄必須都已存在;資料庫不會創建該目錄。該目錄還必須具有相應的許可權,以便資料庫在其中創建文件。 Oracle管理的文件具有特定的命名格式。例如,基於Linux和Unix的系統中使用以下格式: <destination_prefix>/o1_mf_%t_%u_.dbf 請勿重命名Oracle管理的文件。資料庫通過名稱來識別Oracle管理的文件。重命名文件會導致資料庫無法將其識別為Oracle管理的文件,從而無法正確地管理該文件。 預設情況下,Oracle管理的數據文件(包括SYSTEM和SYSAUX表空間中Oracle管理的數據文件)為100MB大小且可以自動擴展。 註:預設情況下,ASM使用OMF文件,但是,如果在創建表空間時或向現有表空間中添加ASM數據文件時為ASM數據文件指定了別名,則該ASM數據文件不會為OMF格式。 擴大資料庫 創建新的表空間 將數據文件添加到現有的小文件表空間 增加數據文件的大小 動態擴展數據文件