日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle区概念总结

發布時間:2024/8/26 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle区概念总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據區概述

數據擴展(extent)是由一組連續的數據塊(data block)構成的數據庫邏輯存儲分配單位。而段(segment)則是由一個或多個數據擴展構成。當一個段中已有空間已經用完,Oracle為這個段分配新的數據擴展。

數據區何時被分配

當用戶創建數據表時,Oracle為此表的數據段分配一個包含若干數據塊的初始數據擴展(initial extent)。雖然此時數據表中還沒有數據,但是在此初始數據擴展中的數據塊已經為插入新數據做好了準備。

如果一個段(segment)的?初始區中的數據塊(data block)都已裝滿,且有新數據插入需要空間時,Oracle自動為這個段分配一個增量數據擴展(incremental extent)。增量數據擴展?是一個段中繼已有數據擴展之后分配的后續數據擴展,她的容量大于或等于之前的數據擴展?。

為了管理的需要,每個段的段頭(header block)中包含一個記錄此段所有數據擴展(extent)的目錄。(對于這里的數據擴展目錄,個人理解為,在本地管理表空間中段所使用的位圖來管理數據區的分配,待驗證?)

如何決定分配數據擴展的容量與數量

每個段(segment)的定義中都包含了數據擴展(extent)的存儲參數?(storage parameter)。存儲參數適用于各種類型的段。這個參數控制著Oracle如何為段分配可用空間。例如,用戶可以在?CREATE TABLE 語句中使用?STORAGE 子句設定存儲參數,決定創建表時為其數據段(data segment)分配多少初始空間,或限定一個表最多可以包含多少數據擴展。如果用戶沒有為表設定存儲參數,那么表在創建時使用所在表空間(tablespace)的默認存儲參數。

用戶既可以使用?數據字典管理的表空間(dictionary managed tablespace)(依賴數據字典表監控空間的利用情況),也可以使用本地管理的表空間(locally managed tablespace)(使用位圖(bitmap)來標記可用與已用空間)。由于本地管理的表空間性能較好且易于管理,當用戶沒有顯式地設定數據擴展(extent)管理參數時,除了10G以后?SYSTEM?之外的所有永久表空間(permanent tablespace)默認使用本地管理方式。

在一個本地管理的表空間中,其中所分配的數據擴展(extent)的容量既可以是用戶設定的固定值,也可以是由系統自動決定的可變值。當用戶創建表空間(tablespace)時可以使用UNIFORM?(用戶指定)或?AUTOALLOCATE?(?由系統管理)子句設定數據擴展的分配方式。

對于固定容量(UNIFORM?)的數據擴展,用戶可以為數據擴展設定容量或使用默認大小(1 MB)。?用戶須確保?其中最小的UNIFORM SIZE容量至少能包含5個數據塊?。本地管理的臨時表空間?在分配數據擴展時只能使用此種方式。

對于由系統管理(AUTOALLOCATE?)的數據擴展,由Oracle決定新增數據擴展的最佳容量,其最小容量為 64 KB?。如果創建表空間時使用了“segment space management auto”子句,且數據塊容量大于等于 16 KB,Oracle擴展一個段時所創建的數據擴展的最小容量為 1 MB。對于永久表空間上述參數均為默認值。

在本地管理的表空間中,INITIAL?,NEXT?,PCTINCREASE?,和?MINEXTENTS?這四個存儲參數可以作用于段(segment),但不能作用于表空間。INITIAL?,NEXT?,PCTINCREASE?,和?MINEXTENTS?相結合可以用于計算段的初始容量。當段容量確定后,Oracle使用內部算法確定其中每個初始數據擴展(extent)的容量。

區如何被分配

Oracle依據表空間管理方式的不同(本地管理(locally managed)或數據字典管理(dictionary managed)),選擇不同的算法分配數據擴展(extent)。

對于本地管理的表空間,Oracle在為新的數據擴展(extent)尋找可用空間時,首先選擇一個屬于此表空間的數據文件(datafile),再搜 索此數據文件的位圖(bitmap)查找連續的數據塊(free block)。如果此數據塊中沒有足夠的連續可用空間,Oracle將查詢其他數據文件。

數據區合適被回收

Oracle 數據庫提供了 Segment Advisor 工具,她依據方案對象(schema object)存儲空間中的碎片程度來判斷此對象中是否包含可回收的空間。

一般來說,在用戶將一個段(segment)對應的方案對象(schema object)移除(使用?DROP TABLE?或?DROP CLUSTER?語句)之前,此段的數據擴展(extent)不會被回收到表空間(tablespace)中,但是以下情況例外:

1、表,簇表的所有者(owner)或擁有?DELETE ANY?權限的用戶, 可以使用?TRUNCATE...DROP STORAGE?語句將表,簇表的數據清除

2、DBA 可以使用以下語法收回一個段中未使用的數據擴展:

ALTER TABLE table_name DEALLOCATE UNUSED;

3、如果用戶為回滾段(rollback segment)設定了?OPTIMAL?參數,Oracle將周期性地從其中回收數據擴展。

當數據擴展(extent)被釋放后,Oracle修改數據文件中的位圖(對于本地管理的表空間)或更新數據字典(對于數據字典管理的表空間),將回收的數據擴展視為可用空間。被釋放的數據擴展中的數據無法繼續訪問。

非簇表中的數據擴展

只要用戶沒有移除(drop)或清空(truncate)非簇表,那么對應數據段內的任何數據塊都不會被回收。Oracle會在插入數據時使用這些數據塊(只要數據塊有足夠的空間)。即使用戶刪除(delete)了表的所有行,Oracle也不會回收此表的數據塊供表空間內的其他方案對象(schema object)使用。

當用戶移除(drop)了一個非簇表(nonclustered table),Oracle將在需要空間時回收此表對應的數據擴展?。Oracle將此表對應的數據段(data segment)、索引段(index segment)中包含的數據擴展(extent)全部收回,并供存儲于此表空間的其他方案對象(schema object)使用。

對于數據字典管理的表空間(dictionary managed tablespace),當一個段(segment)需要的數據擴展(extent)比現有可用擴展的都大時,Oracle通過尋找、合并連續的被回收的數據擴展來形成更大的數據擴展。這個過程被稱為數據擴展合并?(coalescing)。本地管理的表空間沒有必要進行數據擴展合并,因為所有連續空間都可以被用于分配新數據擴展,而無需關心所用空間是如何被回收的。

簇表中的數據擴展

Therefore, if you drop one table in a cluster, the data segment remains for the other tables in the cluster, and no extents are deallocated. You can also truncate clusters (except for hash clusters) to free extents.
  簇表(clustered table)的數據存儲在為整個簇(cluster)分配的數據段(data segment)中。因此當用戶移除(drop)簇中的一個表時,數據段還要為簇中的其他表保留,因此沒有數據擴展(extent)被回收。用戶可以通過清空(truncate)整個簇來回收屬于簇的數據擴展(哈希簇(hash cluster)除外)。

物化視圖的數據擴展

Oracle回收屬于物化視圖(materialized view)及其日志(materialized view log)的數據擴展的方式與表或簇相同。

索引的數據擴展

只要索引存在,那么對應索引段(index segment)的所有數據擴展(extent)都不會被回收。當用戶移除(drop)索引相關的表、簇表時,Oracle才將索引使用的數據擴展回收。

臨時段中的數據擴展

當Oracle執行完一個 SQL 語句,且在執行過程中使用的臨時段時,Oracle通過以下機制對臨時段的數據空間進行回收。

1、當用戶執行單一排序語句時,Oracle將在此用戶的臨時表空間中創建為這個排序服務的臨時段,并在執行后將此臨時段使用的數據擴展回收。

2、?當用戶執行?多重排序?語句??,可能會使用臨時表空間中專為排序而創建的排序段。在每個實例中只會分配一個排序段,在排序操作使用后也不會被回收,而是繼續供以后的多重排序使用。?
同一會話或同一事務的多個 SQL 語句,有可能共同使用一個臨時表的臨時段存儲臨時數據。在這種情況下,Oracle在會話或事務結束后才移除臨時段,并為臨時段所在表空間回收使用的數據擴展。

回滾段的數據擴展

如果用戶為回滾段(rollback segment)設定了?OPTIMAL?參數,?Oracle周期性地檢查數據庫回滾段的容量是否超過了最優值。如果回滾段超過了這個最優值(即回滾段中的數據擴展過多),Oracle將自動地從回滾段回收一些數據擴展。

總結

以上是生活随笔為你收集整理的Oracle区概念总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。