邏輯儲存體結構
本章描述邏輯儲存體結構之間的性質與關係。這些結構由 Oracle AI Database 建立和辨識,且作業系統不清楚。
-
邏輯儲存體結構簡介 Oracle AI Database 會為資料庫中的所有資料配置邏輯空間。
-
資料區塊簡介 Oracle AI Database 管理資料庫資料檔中的邏輯儲存空間 (稱為資料區塊,亦稱為 Oracle 區塊或頁面 )。資料區塊是資料庫 I/O 的最小單位。
-
擴充區塊簡介:擴充區塊是由邏輯連續資料區塊所組成的資料庫儲存單位。由於 RAID 分割與檔案系統實作,資料區塊實際上可以分散到磁碟上。
-
區隔概要:區隔是一組擴充區塊,其中包含表格空間內邏輯儲存體結構的所有資料。
-
表格空間簡介:表格空間是區段的邏輯儲存體容器。
邏輯儲存體結構簡介
Oracle AI Database 會為資料庫中的所有資料配置邏輯空間。
資料庫空間配置的邏輯單位是資料區塊、擴充區塊、區段及表格空間。而在實體層次上,資料會儲存在磁碟上的資料檔中。資料檔中的資料都儲存在作業系統區塊中。
下圖是實體與邏輯儲存的實體關係圖。群眾的註腳表示法代表一對多關係。
圖 1:邏輯與實體儲存

-
邏輯儲存階層:區段包含一或多個擴充區塊,每個擴充區塊包含多個資料區塊。
-
邏輯空間管理 Oracle AI Database 必須使用邏輯空間管理來追蹤和配置表格空間中的擴充區塊。另請參閱:「實體儲存體結構」
邏輯儲存階層
區段包含一或多個擴充區塊,每個擴充區塊都包含多個資料區塊。
下圖顯示表格空間內資料區塊、擴充區塊以及區段之間的關係。在此範例中,一個區段會有兩個儲存在不同資料檔中的擴充區塊。
圖 2:表格空間內的區段、擴充區塊以及資料區塊

Oracle AI Database 將資料從最低層級儲存到最高層級,如下所示:
-
資料區塊是 Oracle AI Database 中最小的資料儲存邏輯單元。
一個邏輯資料區塊會對應至特定數目的永久儲存位元組,例如 2 KB。資料區塊是 Oracle AI Database 可以使用或配置的最小儲存單位。
傳統上,資料檔都已儲存在磁碟或固態磁碟 (SSD) 上。Oracle AI Database 也支援用於儲存資料庫檔案的永久記憶體 (PMEM)。無論基礎資料的實體儲存方式為何,Oracle 處理作業一律會讀取和寫入邏輯資料區塊。
-
擴充區塊是一組配置來儲存特定類型資訊的一組邏輯連續資料區塊
在上圖中,24 KB 擴充區塊具有 12 個資料區塊,而 72 KB 擴充區塊則具有 36 個資料區塊。
-
區段是一組配置給特定資料庫物件 (例如表格 ) 的擴充區塊。
例如,
employees表格的資料會儲存在其本身的資料區段中,而employees的每個索引則儲存在其本身的索引區段中。使用儲存的每個資料庫物件都由單一區段組成。 -
表格空間是包含一或多個區段的資料庫儲存單位。
每個區段只屬於一個表格空間。因此,區段的所有擴充區塊都會儲存在相同的表格空間中。在表格空間中,區段可以包含多個資料檔的擴充區塊,如上圖所示。例如,區段的一個擴充區塊可以儲存在
users01.dbf中,另一個擴充區塊則儲存在users02.dbf中。單一擴充區塊永遠不會跨資料檔。
另請參閱:「實體儲存結構簡介」
邏輯空間管理
Oracle AI Database 必須使用邏輯空間管理來追蹤和配置表格空間中的擴充區塊。
當資料庫物件需要擴充區塊時,資料庫就必須要有找到和提供它的方法。同樣地,當物件不再需要擴充區塊時,資料庫必須要有讓可用擴充區塊的方法。
Oracle AI Database 會根據您建立的類型來管理表格空間內的空間。您可以建立下列其中一種表格空間類型:
-
本機管理的表格體空間 (預設)
資料庫會在表格空間中自行使用位元映射來管理擴充區塊。因此,在本機管理的表格空間中,會保留位元映射的部分表格空間。在表格空間內,資料庫可以使用自動區段空間管理 (ASSM) 或手動區段空間管理 (MSSM) 來管理區段。
-
字典管理的表格區
資料庫使用資料說明來管理擴充區塊。
圖 15-3 顯示表格空間中邏輯空間管理的替代方法。
圖 3:邏輯空間管理

-
本機管理的表格空間:本機管理的表格空間會在資料檔標頭中維護位元映射,以追蹤資料檔主體中可用與已使用的空間。
本機管理的表格空間
本機管理的表格空間會在資料檔標頭中維護位元映射,以追蹤資料檔主體中可用與已使用的空間。
每個位元都對應到一組區塊。配置空間或釋出空間時,Oracle AI Database 會變更位元映射值,以反映區塊的新狀態。
下圖是點陣圖管理儲存的概念性表示法。標頭中的 1 是指已使用的空間,而 0 則是指可用空間。
圖 4:點陣圖管理的儲存

本機管理的表格空間有下列優點:
-
避免使用資料說明管理擴充區塊
若在擴充區塊中消耗或釋出空間,在說明管理的表格空間中會造成另一個在資料說明表格或還原區段中耗用或釋出空間的作業,遞迴作業便會發生。
-
自動追蹤相鄰的可用空間
如此一來,資料庫就不需要聯合可用的擴充區塊。
-
自動判斷本機管理擴充區塊的大小
或者,所有擴充區塊在本機管理的表格空間中可以有相同的大小,並覆寫物件儲存選項。注意:Oracle 強烈建議您搭配「自動區段空間管理」使用本機管理的表格空間。
區段空間管理是繼承自包含區段之表格空間的屬性。在本機管理的表格空間中,資料庫可以自動或手動管理區段。例如,當表格空間 tools 中的區段以手動方式管理時,可以自動管理表格空間 users 中的區段。
-
自動區段空間管理 自動區段空間管理 (ASSM) 方法使用位元映射來管理表格空間中的空間。
-
手動區段空間管理:舊有的手動區段空間管理 (MSSM) 方法會使用名為可用清單的連結清單來管理區段中的可用空間。
自動對談空間管理
自動區段空間管理 (ASSM) 方法使用位元映射來管理表格空間中的空間。
點陣圖提供下列優點:
-
簡化管理
ASSM 可避免手動決定許多儲存參數的正確設定值。只有一個重要的 SQL 參數會控制空間配置:
PCTFREE。此參數指定區塊中保留供未來更新使用的空間百分比 (請參閱資料區塊中的可用空間百分比 )。 -
增加並行
多個交易可以搜尋個別的可用資料區塊清單,從而減少競爭和等待。對許多標準工作負載來說,使用 ASSM 的應用程式效能比使用 MSSM 之經過完善調整的應用程式的效能更好。
-
Oracle Real Application Clusters (Oracle RAC) 環境中執行處理的空間動態相關性
ASSM 較有效率,並且是永久、本機管理之表格空間的預設值。
注意:本章假設 ASSM 在其邏輯儲存空間的所有討論中使用。
手動區隔空間管理
舊有的手動區段空間管理 (MSSM) 方法會使用稱為可用清單的連結清單來管理區段中的可用空間。
對於具有可用空間的資料庫物件,可用清單會追蹤高水位標記 (HWM) (HWM) 底下的區塊,亦即已使用且尚未使用的區段空間之間的分隔線。使用區塊時,資料庫會視需要將區塊置於可用清單中或從可用清單中移除區塊。
除了 PCTFREE 之外,MSSM 還需要您控制 SQL 參數 (例如 PCTUSED、FREELISTS 和 FREELIST GROUPS) 的空間配置。PCTUSED 會設定資料庫目前使用之區塊中必須存在的可用空間百分比,以將它放到可用清單中。例如,如果您在 CREATE TABLE 敘述句中將 PCTUSED 設為 40,則在使用少於 40% 的區塊空間之前,無法將資料列插入區段中的區塊中。
例如,假設您在表格中插入一列。資料庫會檢查表格的可用清單,以取得第一個可用的區塊。如果資料列不適合區塊,且區塊中的已使用空間大於或等於 PCTUSED,則資料庫會從清單中移除區塊並搜尋另一個區塊。如果您刪除區塊中的資料列,則資料庫會檢查區塊中的已使用空間現在是否小於 PCTUSED。如果是,資料庫會將區塊置於可用清單的開頭。
一個物件可以有多個可用清單。如此一來,在表格上執行 DML 的多個階段作業可以使用不同的清單,以減少競爭。每個資料庫階段作業在其階段作業期間只會使用一個可用清單。
如圖 15-5 所示,您也可以建立一或多個可用清單群組的物件,這是可用清單的集合。每個群組都有一個主要可用清單,可管理群組中的個別處理可用清單。可用清單的空間負荷 (特別是可用清單群組) 可能相當重要。
圖 5:可用清單群組

手動管理區段空間可能會很複雜。您必須調整 PCTFREE 和 PCTUSED 以減少資料列移轉,並避免浪費空間。例如,如果區段中每個已使用的區塊都已滿一半,且如果 PCTUSED 為 40,則資料庫不允許插入任何這些區塊。由於微調空間配置參數的困難,Oracle 強烈建議 ASSM。在 ASSM 中,PCTFREE 會決定是否可以將新資料列插入區塊中,但不會使用可用清單並忽略 PCTUSED。
另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解本機管理的表格空間
-
Oracle AI Database Administrator's Guide,深入瞭解自動區段空間管理
-
Oracle AI Database SQL Language Reference,瞭解
PCTFREE和PCTUSED等儲存參數
字典管理的表格空間
說明管理的表格空間會使用資料說明來管理其擴充區塊。
每當配置或釋出擴充區塊以供重複使用時,Oracle AI Database 會更新資料說明中的表格。例如,當表格需要擴充區塊時,資料庫會查詢資料說明表格,並搜尋可用的擴充區塊。如果資料庫找到空間,就會修改一個資料說明表格,並在另一個資料列中插入一個資料列。如此一來,資料庫就可以透過修改與移動資料來管理空間。
資料庫在背景執行以取得資料庫物件空間的 SQL 是遞迴 SQL 。遞迴 SQL 的經常使用會對效能造成負面影響,因為必須序列化對資料說明的更新。本機管理的表格空間 (預設值) 可避免此效能問題。
另請參閱:Oracle AI Database Administrator's Guide,瞭解如何將表格空間從字典管理移轉至本機管理
資料區塊總覽
Oracle AI Database 管理資料庫資料檔中的邏輯儲存空間 (稱為資料區塊的單位),也稱為 Oracle 區塊或頁面。資料區塊是資料庫 I/O 的最小單位。
-
資料區塊與作業系統區塊:在實體層次,資料庫資料儲存在由作業系統區塊組成的磁碟檔案中。
-
資料區塊格式:每個資料區塊都有一個格式或內部結構,讓資料庫能夠追蹤區塊中的資料和可用空間。此格式類似於資料區塊是否包含表格、索引或表格叢集資料。
-
資料區塊壓縮資料庫可以使用表格壓縮來排除資料區塊中的重複值。本節描述使用壓縮的資料區塊格式。
-
資料區塊中的空間管理:當資料庫從底端向上填入資料區塊時,資料列資料與區塊標頭之間的可用空間會減少。
-
索引區塊簡介:索引區塊是一種特殊類型的資料區塊,可管理與表格區塊不同的空間。Oracle AI Database 使用索引區塊來管理索引中的邏輯儲存空間。
資料區塊與作業系統區塊
在實體層次上,資料庫資料會儲存在由作業系統區塊組成的磁碟檔案中。
作業系統區塊是作業系統可以讀取或寫入的最小資料單位。相反地,Oracle 區塊是邏輯儲存體結構,其大小和結構不被作業系統所知。
下圖顯示作業系統區塊的大小可能與資料區塊不同。資料庫會以多個資料區塊要求資料,而非作業系統區塊。
圖 6:資料區塊與作業系統區塊

資料庫要求資料區塊時,作業系統會將此作業轉譯為永久儲存體中資料的要求。資料區塊與作業系統區塊的邏輯區隔具有下列考量:
-
應用程式不需要決定磁碟上資料的實體位址。
-
資料庫資料可以在多個實體磁碟上分割或鏡射。
-
資料庫區塊大小 - 每個資料庫都會有資料庫區塊大小。
-
表格空間區塊大小:您可以建立區塊大小與
DB_BLOCK_SIZE設定不同的個別表格空間。
資料庫區塊大小
每個資料庫都有一個資料庫區塊大小。
DB_BLOCK_SIZE 初始化參數會在建立資料庫時設定資料庫的資料區塊大小。設定 SYSTEM 和 SYSAUX 表格空間的大小,是所有其他表格空間的預設值。除非重新建立資料庫,否則無法變更資料庫區塊大小。
如果未設定 DB_BLOCK_SIZE,則預設資料區塊大小為作業系統特定大小。資料庫的標準資料區塊大小是 4 KB 或 8 KB。如果資料區塊與作業系統區塊的大小不同,則資料區塊大小必須是作業系統區塊大小的倍數。
另請參閱:
-
Oracle AI Database Reference,瞭解
DB_BLOCK_SIZE初始化參數 -
Oracle AI Database Administrator's Guide 和 Oracle AI Database Performance Tuning Guide,瞭解如何選擇區塊大小
表格空間區塊大小
您可以建立區塊大小與 DB_BLOCK_SIZE 設定不同的個別表格空間。
將可傳輸表格空間移到其他平台時,非標準區塊大小就很有用。
另請參閱:Oracle AI Database Administrator's Guide,瞭解如何指定表格空間的非標準區塊大小
資料區塊格式
每個資料區塊都有一個格式或內部結構,讓資料庫可以追蹤區塊中的資料與可用空間。此格式類似於資料區塊是否包含表格、索引或表格叢集資料。
下圖顯示未壓縮資料區塊的格式。
圖 7:資料區塊格式

-
資料區塊經常費用 Oracle AI Database 使用區塊經常費用來管理區塊本身。區塊超載無法儲存使用者資料。
-
資料列格式區塊的資料列資料部分包含實際的資料,例如表格資料列或索引索引鍵項目。就像每個資料區塊都有內部格式,每一列都有一個資料列格式,讓資料庫能夠追蹤資料列中的資料。另請參閱:「資料區塊壓縮」以瞭解壓縮的區塊
資料區塊超載
Oracle AI Database 使用阻隔負荷來管理區塊本身。區塊超載無法儲存使用者資料。
如「資料區塊格式」所示,區塊超載包含下列部分:
-
區塊標頭
這個部分包含區塊的一般資訊,包括磁碟位址和區段類型。對於交易管理的區塊,區塊標頭包含作用中和歷史交易資訊。
更新鎖房團訂的每個交易都需要交易輸入。Oracle AI Database 一開始會保留區塊標頭中的交易項目空間。在配置給支援交易變更之區段的資料區塊中,可用空間也可以在標頭空間用盡時保留交易項目。交易項目所需的空間視作業系統而定。不過,大部分作業系統的交易項目大約需要 23 個位元組。
-
表格目錄
對於堆集組織的表格,此目錄包含此區塊中儲存資料列之表格的相關描述資料。在表格叢集中,多個表格可以將資料列儲存在相同的區塊中。
-
資料列目錄
對於堆集組織的表格,此目錄描述區塊之資料部分中的資料列位置。資料庫可將資料列置於區塊底端的任何位置。列位址會記錄在列目錄向量的其中一個槽位中。
列 ID 指向特定檔案、區塊與列號碼。例如,在列 ID
AAAPecAAFAAAABSAAA中,最後的AAA代表列號。列號碼是進入列目錄中項目的索引。資料列目錄項目包含指向資料區塊中資料列位置的指標。如果資料庫在區塊內移動資料列,則資料庫會更新資料列目錄項目來修改指標。rowid 會保持常數。資料庫在資料列目錄中配置空間之後,就不會在刪除資料列之後回收此空間。因此,目前空白但先前最多有 50 個資料列的區塊,會繼續為資料列目錄配置 100 個位元組。只有當階段作業在區塊中插入新資料列時,資料庫才會重複使用此空間。
區塊負荷的某些部分是固定大小,但總大小是可變的。區塊超載平均為 84 到 107 個位元組。
資料列格式
區塊的資料列資料部分包含實際的資料,例如表格資料列或索引索引鍵項目。就像每個資料區塊都有內部格式,每一列都有一個資料列格式,讓資料庫能夠追蹤資料列中的資料。
Oracle AI Database 將列儲存為可變長度記錄。列包含在一或多個區段中。每個區段都稱為資料列片段。每個資料列片段都有一個資料列標頭與資料欄資料。
下圖顯示資料列的格式。
圖 8:列塊的格式

-
資料列標頭 Oracle AI Database 使用資料列標頭來管理儲存在區塊中的資料列片段。
-
資料欄資料:在資料列標頭之後,資料欄資料區段會將實際資料儲存在資料列中。資料列片段通常會以
CREATE TABLE敘述句中所列的順序儲存資料欄,但是不保證此順序。例如,會在最後建立類型為LONG的資料欄。 -
資料列 ID 格式:Oracle AI Database 使用資料列 ID 來唯一識別資料列。資料列 ID 內部是保存資料庫存取資料列所需之資訊的結構。資料列 ID 實際不會儲存在資料庫中,而是會從儲存資料的檔案與區塊來推斷。
資料列標頭
Oracle AI Database 使用資料列標頭來管理儲存在區塊中的資料列片段。
資料列標頭包含下列資訊:
-
資料列片段中的資料欄
-
位於其他資料區塊中的部分資料列
如果可以將整個資料列插入單一資料區塊,則 Oracle AI Database 會將資料列儲存為一個資料列片段。不過,如果無法將所有列資料插入單一區塊中,或是更新造成現有列移出其區塊,則資料庫會將該列儲存在多個資料列片段中。資料區塊的每個資料列通常只包含一個資料列片段。
-
表格叢集的叢集索引鍵
一個區塊中完全包含的資料列至少有 3 個位元組的資料列標頭。
資料欄資料
在列標頭之後,欄資料區段會將實際資料儲存在列中。資料列片段通常會以 CREATE TABLE 敘述句中所列的順序儲存資料欄,但是不保證此順序。例如,會在最後建立類型為 LONG 的資料欄。
如資料列格式圖所示,Oracle AI Database 會針對資料列片段中的每個資料欄分別儲存資料欄長度與資料。所需的空間視資料類型而定。如果資料欄的資料類型為變數長度,則保留值所需的空間可能會隨著資料的更新而成長與縮小。
每一列在資料區塊標頭的資料列目錄中都有一個插槽。槽位指向資料列的開頭。
Rowid 格式
Oracle AI Database 使用 rowid 來唯一識別資料列。資料列 ID 內部是保存資料庫存取資料列所需之資訊的結構。資料列 ID 實際不會儲存在資料庫中,而是會從儲存資料的檔案與區塊來推斷。
延伸的列 ID 包含資料物件號碼。此 rowid 類型會針對每一列使用實體地址的基準 64 編碼。編碼字元為 A-Z、a-z、0-9、+ 和 /。
範例 15-1 ROWID Pseudocolumn
下列範例會查詢 ROWID 虛擬資料欄,以顯示員工 100 之 employees 表格中資料列的擴充資料列 ID:
SQL> SELECT ROWID FROM employees WHERE employee_id = 100;
ROWID
------------------
AAAPecAAFAAAABSAAA
下圖說明擴充 rowid 的格式。
圖 9:ROWID 格式

延伸的 rowid 會以 OOOOOOFFFBBBBBBRRR 格式顯示,其格式分為下列元件:
-
OOOOOO資料物件編號可識別區段 (範例查詢中的資料物件
AAAPec)。資料物件編號會指派給每個資料庫區段。相同區段中的綱要物件 (例如表格叢集 ) 具有相同的資料物件編號。 -
FFF表格空間相關資料檔編號會識別包含資料列的資料檔 (範例查詢中的檔案
AAF)。 -
BBBBBB資料區塊編號會識別包含資料列的區塊 (範例查詢中的區塊
AAAABS)。區塊編號是相對於其資料檔,而非其表格空間。因此,具有相同區塊編號的兩個資料列可以位於相同表格空間的不同資料檔中。 -
RRR資料列編號可識別區塊中的資料列 (範例查詢中的資料列
AAA)。
將 rowid 指定給資料列片段後,資料列 ID 便可在特殊情況下變更。例如,如果啟用資料列移動,則資料列 ID 可能會因為分割區索引鍵更新、「倒溯表格」作業、縮小表格作業等等而變更。如果停用資料列移動,則如果使用 Oracle AI Database 公用程式匯出和匯入資料列,則資料列 ID 會變更。注意:資料庫會在內部執行資料列移動,就像實際刪除並重新插入資料列一樣。不過,列變動被視為更新,這對於觸發器有影響。
另請參閱:
-
「 Rowid 資料類型」
資料區塊壓縮
資料庫可以使用表格壓縮來排除資料區塊中的重複值。本節描述使用壓縮的資料區塊格式。
使用基本表格與進階資料列壓縮的資料區塊格式,基本上與未壓縮區塊相同。差異在於區塊開頭的符號表格會儲存資料列與資料欄的重複值。資料庫會以符號表格的簡短參照取代這些值的複本。
範例 15-2 壓縮資料區塊的格式
假設下列資料列儲存在七欄 sales 表格的資料區塊中:
2190,13770,25-NOV-00,S,9999,23,161
2225,15720,28-NOV-00,S,9999,25,1450
34005,120760,29-NOV-00,P,9999,44,2376
9425,4750,29-NOV-00,I,9999,11,979
1675,46750,29-NOV-00,S,9999,19,1121
將基本表格或進階資料列壓縮套用至此表格時,資料庫會以符號參照取代重複的值。以下的壓縮概念表示法顯示取代 29-NOV-00 和取代 9999 之 % 的符號 *:
2190,13770,25-NOV-00,S,%,23,161
2225,15720,28-NOV-00,S,%,25,1450
34005,120760,*,P,%,44,2376
9425,4750,*,I,%,11,979
1675,46750,*,S,%,19,1121
表格 15-1 概念代表將符號對應至值的符號表格。
表 1 符號表
| 符號 | 值 | 資料欄 | 資料列 |
|---|---|---|---|
| * | 29-NOV-00 | 3 | 958-960 |
| % | 9999 | 5 | 956-960 |
另請參閱:「表格壓縮」
資料區塊中的空間管理
當資料庫從上到下填入資料區塊時,資料列資料與區塊標頭之間的可用空間也會減少。
更新期間,資料區塊中的可用空間也可以縮小,就像將尾端空值變更為非空值時一樣。資料庫會管理資料區塊中的可用空間,以最佳化效能並避免浪費的空間。
注意:本節假設使用自動區段空間管理。
-
資料區塊中的可用空間百分比:
PCTFREESQL 參數會設定保留為可用空間以更新現有資料列的資料區塊最小百分比。PCTFREE對於防止資料列移轉及避免浪費空間而言十分重要。 -
資料區塊中的可用空間最佳化:可用空間百分比不可以小於
PCTFREE,但可用空間的大小可以大於。例如,將PCTFREE設為 20% 會讓可用空間總量無法降到 5% 的區塊,但允許 50% 的區塊是可用的。 -
鏈結和移轉的資料列:Oracle AI Database 使用鏈結和移轉來管理無法放入單一區塊的資料列。
資料區塊中的可用空間百分比
PCTFREE SQL 參數會設定保留為可用空間以更新現有資料列的資料區塊最小百分比。PCTFREE 對於防止資料列移轉及避免浪費空間而言十分重要。
例如,假設您建立一個只需要偶爾更新的表格,其中大部分的表格並不會增加現有資料的大小。您可以在 CREATE TABLE 敘述句中指定 PCTFREE 參數,如下所示:
CREATE TABLE test_table (n NUMBER) PCTFREE 20;
圖 15-10 顯示 20 的 PCTFREE 設定如何影響空間管理。資料庫會隨時間將資料列新增至區塊,讓資料列資料往上成長到區塊標頭,而區塊標頭本身則往下擴充至資料列資料。PCTFREE 設定可確保至少 20% 的資料區塊是免費的。例如,資料庫會防止 INSERT 敘述句填滿區塊,讓資料列資料與標頭佔用 90% 的總區塊空間,而只剩下 10% 的空間。
圖 10:PCTFREE

注意:此討論不適用於未使用 PCTFREE 儲存體參數或可用清單的 LOB 資料類型。
另請參閱:
-
Oracle AI Database SQL Language Reference,瞭解
PCTFREE參數的語法和語意
最佳化資料區塊中的可用空間
雖然可用空間的百分比不能小於 PCTFREE,但可用空間的大小可以大於。例如,將 PCTFREE 設為 20% 會讓可用空間總量無法降到 5% 的區塊,但允許 50% 的區塊是可用的。
-
增加可用空間以最佳化:某些 DML 敘述句會增加資料區塊的可用空間。
-
聯合片段化空間最佳化釋出空間不一定會和資料區塊中的主要可用空間區域連續。非連續的可用空間稱為分散式空間。
增加可用空間以最佳化
部分 DML 敘述句可增加資料區塊的可用空間。
下列敘述句可增加空間:
-
DELETE敘述句 -
將現有值更新為較小值或增加現有值並強制移轉資料列的
UPDATE敘述句 -
表格上使用進階資料列壓縮的
INSERT敘述句如果
INSERT敘述句填入含有資料的區塊,則資料庫會呼叫區塊壓縮,這可能會導致具有較多可用空間的區塊。
在下列情況下,INSERT 敘述句可以使用釋出空間:
-
如果
INSERT敘述句在相同的交易中,而且它是在釋出空間的敘述句之後,則該敘述句可以使用空格。 -
如果
INSERT敘述句與釋出空間 (可能由其他使用者執行) 的敘述句位於不同的交易中,而且如果需要空間,則該敘述句可以使用可用空間,但只有在其他交易確認之後。
另請參閱:Oracle AI Database Administrator's Guide 以瞭解進階資料列壓縮
依聯合片段空間最佳化
發行的空間不一定會與資料區塊中的可用空間主要區域連續。非連續的可用空間稱為分散式空間。
下圖顯示具有非連續可用空間的資料區塊。
圖 11:含有片段化空間的資料區塊

只有符合下列條件時,Oracle AI Database 才會自動且透明地聯合資料區塊的可用空間:
-
INSERT或UPDATE敘述句嘗試使用包含足夠可用空間的區塊來包含新的資料列片段。 -
可用空間已經過片段,所以無法在區塊的連續區段中插入資料列片段。
聯合之後,可用空間量還是會與進行此作業之前的空間量相同,但現在空間是連續的。圖 15-12 顯示空間聯合之後的資料區塊。
圖 12:聯合可用空間之後的資料區塊

Oracle AI Database 僅在上述情況下執行聯合,因為其他情況會降低效能,因為會持續合併資料區塊中的可用空間。
鏈結與移轉的資料列
Oracle AI Database 使用鏈結和移轉來管理無法放入單一區塊的資料列。注意:標準表格中的鏈結資料列與區塊鏈表格中的資料列鏈結不同。Oracle AI Database 使用不同的技術來管理區塊鏈資料表中的列。
可能的情況如下:
-
資料列太大,無法在第一次插入時放入一個資料區塊中。
在資料列鏈結中,Oracle AI Database 會將資料列的資料儲存在保留給區段的一或多個資料區塊鏈中。資料列鏈結最常發生在大型資料列中。範例包括包含
LONG或LONG RAW資料欄的資料列,或包含大量資料欄的資料列。在這些情況下,無法避免發生資料列鏈結。 -
系統會更新一開始放入一個資料區塊的資料列,以便讓整體資料列長度增加,但是沒有足夠的可用空間來保存更新的資料列。
在資料列移轉中,Oracle AI Database 會將整個資料列移至新的資料區塊 (假設資料列可以容納在新的區塊中)。已移轉資料列的原始資料列片段包含指標或「轉送位址」至包含已移轉資料列的新區塊。已移轉資料列的資料列 ID 不會變更。
-
資料列的資料欄超過 255 個。
Oracle AI Database 只能在資料列片段中儲存 255 個資料欄。因此,如果您將資料列插入含有 1000 個資料欄的表格中,資料庫就會建立 4 個資料列片段,通常會鏈結至多個區塊。
圖 15-13 說明在資料區塊中插入大型資料列。資料列對左側區塊而言太大,因此資料庫將第一個資料列片段置於左側區塊,而第二個資料列片段置於右側區塊中,以鏈結資料列。
圖 13:資料列鏈結

圖 15-14 ,左側區塊包含已更新的資料列,讓該資料列對區塊而言太大。資料庫會將整個資料列移到右側區塊,並讓指標移到左側區塊中已移轉資料列。
圖 14:資料列移轉

當資料列鏈結或移轉時,擷取資料所需的 I/O 會增加。此情況會產生,因為 Oracle AI Database 必須掃描多個區塊,才能擷取資料列的資訊。例如,如果資料庫執行一個 I/O 來讀取索引,以及一個 I/O 來讀取未移轉的表格資料列,則需要額外的 I/O 來取得已移轉資料列的資料。
「區段建議程式」可手動或自動執行,是 Oracle AI Database 元件,可識別具有可回收空間的區段。建議程式可針對具有顯著可用空間或過多鏈結資料列的物件提供建議。
另請參閱:
-
「資料列儲存體」和「資料列部分的資料列 ID 」
-
「區塊鏈資料表概要」
-
Oracle AI Database Administrator's Guide,瞭解如何回收浪費的空間
-
Oracle AI Database Performance Tuning Guide,瞭解如何減少鏈結和移轉的列
索引區塊總覽
索引區塊是一種特殊類型的資料區塊,其管理空間與表格區塊不同。Oracle AI Database 使用索引區塊來管理索引中的邏輯儲存空間。
-
索引區塊的類型:索引包含根區塊、分支區塊和分支區塊。
-
索引項目的儲存體索引項目會以與資料區塊中表格資料列相同的方式儲存在索引區塊中。區塊部分的索引項目不會以二進位順序儲存,而是以堆集方式儲存。
-
重複使用索引區塊中的槽位:資料庫可以重複使用索引區塊內的空間。
-
聯合索引區塊:聯合會就地壓縮現有的索引資料,如果重組釋出區塊,則會在索引結構中保留可用的區塊。因此,聯合並不會釋出索引區塊供其他用途使用,也不會造成索引重新配置區塊。
索引區塊類型
索引包含根區塊、分支區塊以及分支終端區塊。
區塊類型定義如下:
-
根圖塊
此區塊識別進入索引的進入點。
-
分支區塊
搜尋索引索引鍵時,資料庫會瀏覽分支區塊。
-
葉節點區塊
這些區塊包含指向相關列的索引關鍵值列 ID。分葉區塊會依排序順序儲存關鍵碼值,讓資料庫可以有效率地搜尋範圍之關鍵碼值的所有列。
儲存索引項目
索引項目以和資料區塊中表格資料列相同的方式儲存於索引區塊中。區塊部分中的索引項目不會以二進位順序儲存,而是以堆集方式儲存。
資料庫管理索引區塊中資料列目錄的方式與資料區塊中的目錄不同。資料列目錄中的項目 (不是索引區塊的主體中的項目) 依索引鍵值排序。例如,在資料列目錄中,索引索引鍵 000000 的目錄項目在索引索引鍵 111111 的目錄項目之前,依此類推。
資料列目錄中的項目順序可提升索引掃描的效率。在範圍掃描中,資料庫必須讀取範圍內指定的所有索引索引鍵。資料庫會周遊分支區塊,以識別包含第一個索引鍵的分支終端區塊。因為已排序列目錄中的項目,所以資料庫可以使用二進位搜尋來尋找範圍中的第一個索引關鍵碼,然後依序處理列目錄中的項目,直到找到最後一個關鍵碼為止。如此一來,資料庫就可避免讀取分葉區塊主體中的所有金鑰。
另請參閱:「資料區塊經常費用」
重複使用索引區塊中的槽位
資料庫可以重複使用索引區塊內的空間。
例如,應用程式可以將值插入資料欄中,然後刪除該值。當某個資料列需要空間時,資料庫就可以重複使用先前被刪除的值佔用的索引位置。
索引區塊的資料列通常多於堆集組織的表格區塊。將許多資料列儲存在單一索引區塊中的功能,可讓資料庫更容易維護索引,因為它會避免區塊經常分割以儲存新資料。
雖然您可以手動將索引與 ALTER INDEX 敘述句搭配使用 REBUILD 或 COALESCE 選項,但索引無法與其本身合併。例如,如果您將值 1 填入資料欄至 500000,然後刪除包含偶數的資料列,則索引將會包含 250,000 個空白時段。只有當資料庫能夠將符合的資料插入包含空白槽位的索引區塊時,才會重複使用槽位。
聯合索引區塊
索引聯合會就地壓縮現有的索引資料,如果重組釋出區塊,則會在索引結構中保留可用的區塊。因此,聯合並不會釋出索引區塊供其他用途使用,也不會造成索引重新配置區塊。
Oracle AI Database 不會自動壓縮索引:您必須執行含有 REBUILD 或 COALESCE 選項的 ALTER INDEX 敘述句。圖 15-15 顯示聯合索引之前 employees.department_id 資料欄的索引。前三個分葉圖塊僅部分填滿,由灰色填滿線表示。
圖 15:聯合之前的索引

圖 15-16 顯示結合索引之後的圖 15-15 中的索引。前兩個分葉圖塊已滿,如灰色填滿線所示,第三個分葉圖塊已釋出。
圖 16:聯合後的索引

另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解如何聯合和重建索引
-
Oracle AI Database SQL Language Reference,瞭解
COALESCE陳述式
擴充區塊概要
擴充區塊是資料庫儲存體單元,由邏輯上連續的資料區塊組成。由於 RAID 分割與檔案系統實作,資料區塊實際上可以分散到磁碟上。
-
擴充區塊配置:依照預設,資料庫會在建立區段時,為資料區段配置起始擴充區塊。擴充區塊一律包含在一個資料檔中。
-
擴充區塊的取消配置一般而言,除非您使用
DROP敘述句刪除物件,否則使用者區段的擴充區塊不會返回表格空間。 -
擴充區塊的儲存參數:每個區段都是由以擴充區塊表示的儲存參數所定義。這些參數控制 Oracle AI Database 如何分配區段的可用空間。
擴充區塊配置
依照預設,資料庫會在建立區段時,配置資料區段的初始擴充區塊。擴充區塊一律包含在一個資料檔中。
雖然尚未將資料新增至區段,但初始擴充區塊中的資料區塊是專門針對此區段保留的。每個區段的第一個資料區塊都包含區段中擴充區塊的目錄。圖 15-17 顯示資料檔中先前未包含任何資料的區段初始擴充區塊。
圖 17:區段的起始擴充區塊

如果起始擴充區塊已滿,且需要更多空間,則資料庫會自動配置此區段的增量擴充區塊。增量擴充區塊是針對區段建立的後續擴充區塊。
配置演算法取決於表格空間是本機管理還是字典管理的。在本機管理的案例中,資料庫會搜尋資料檔的位元映射,找出相鄰的可用區塊。如果資料檔的空間不足,則資料庫會查看其他資料檔。區段的擴充區塊一律位於相同的表格空間,但可能位於不同的資料檔中。圖 15-18 顯示資料庫可以在表格空間的任何資料檔中配置區段的擴充區塊。例如,區段可以在 users01.dbf 中配置初始擴充區塊,在 users02.dbf 中配置第一個增量擴充區塊,然後在 users01.dbf 中配置下一個擴充區塊。
圖 18:區段的增量範圍

新配置擴充區塊的區塊雖然可用,但舊資料可能不是空的。在 ASSM 中,Oracle AI Database 會在開始使用擴充區塊時,將新配置擴充區塊的區塊格式化,但僅會視需要格式化。注意:本節適用於序列作業,其中有一個伺服器處理作業會剖析和執行敘述句。資料庫會以不同的平行 SQL 敘述句來配置擴充區塊,而平行 SQL 敘述句會包含多個伺服器處理作業。
另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解如何手動配置擴充區塊
擴充區塊配置
一般而言,除非您使用 DROP 敘述句刪除物件,否則使用者區段的擴充區塊不會返回表格空間。
例如,如果您刪除表格中所有的資料列,資料庫就不會回收資料區塊,供表格空間中的其他物件使用。您也可以使用 DBMS_SPACE_ADMIN 套裝軟體來刪除區段。
注意:在還原區段中,如果一或多個擴充區塊已指定 OPTIMAL 大小,或資料庫處於自動還原管理模式,Oracle AI Database 會定期取消配置。
在某些情況下,您可以手動取消配置空間。Oracle Segment Advisor 會根據物件中的片段層次,判斷物件是否有可回收的空間。下列技術可以釋出擴充區塊:
-
使用線上區段縮小,即可回收區段中的片段化空間。區段縮小是線上、就地作業。一般而言,資料壓縮可提高快取使用率,而且在完整表格掃描中需要較少的區塊讀取。
-
將非分割表格或表格分割區的資料移到新的區段,也可以選擇將它移到您有配額的其他表格空間中。
-
重建或聯合索引。
-
截斷表格或表格叢集,以移除所有資料列。依照預設,Oracle AI Database 會取消配置已移除資料列所使用的所有空間,但
MINEXTENTS儲存體參數所指定的資料列除外。從 Oracle Database 11g 版本 2 (11.2.0.2) 開始,您也可以使用TRUNCATE搭配DROP ALL STORAGE選項來刪除整個區段。 -
解除配置未使用的空間,此空間可釋放資料庫區段高水位標記結尾的未使用空間,並讓表格空間中其他區段的空間可供使用。
釋出擴充區塊時,Oracle AI Database 會修改資料檔中本機管理表格空間的位元映射,以將重新鏈結的擴充區塊反映為可用空間。已釋出擴充區塊中的任何資料都將無法存取。
另請參閱:
-
「聯合索引區塊」
-
Oracle AI Database Administrator's Guide,瞭解如何回收區段空間
擴充區塊的儲存參數
每個區段都是由以擴充區塊表示的儲存參數所定義。這些參數控制 Oracle AI Database 如何分配區段的可用空間。
儲存體設定值的優先順序如下,清單的設定值較高,覆寫清單的較低設定值:
-
區段儲存子句
-
表格空間儲存子句
-
Oracle AI Database 預設值
本機管理的表格空間可以有統一的擴充區塊大小,或由系統自動決定的變數擴充區塊大小:
-
對於統一擴充區塊,您可以指定擴充區塊大小,或使用預設大小 1 MB。表格空間中的所有擴充區塊都是此大小。本機管理的暫時表格空間只能使用此類型的配置。
-
對於自動配置的擴充區塊,Oracle AI Database 會決定額外擴充區塊的最佳大小。
如果是本機管理的表格空間,則無法在表格空間層次指定某些儲存體參數。不過,您可以在節段層次指定這些參數。在此案例中,資料庫會使用所有參數來計算區段的起始大小。內部演算法會決定每個範圍的後續大小。
另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解建立本機管理表格空間時的擴充區塊管理考量事項
-
Oracle AI Database SQL Language Reference,瞭解儲存子句中的選項
區段總覽
區隔是一組擴充區塊,其中包含表格空間內邏輯儲存體結構的所有資料。
例如,Oracle AI Database 會配置一或多個擴充區塊,以形成表格的資料區段。資料庫也會配置一或多個擴充區塊,以形成表格上索引的索引區段。
Oracle AI Database 會自動或手動管理區段空間。本節假設使用 ASSM。
-
使用者區段:資料庫中的單一資料區段會儲存一個使用者物件的資料。
-
暫時區段:處理查詢時,Oracle AI Database 通常需要暫時工作區,才能執行 SQL 敘述句的中介階段。
-
還原區段 - Oracle AI Database 會維護交易動作的記錄,統稱為還原資料。
-
區段空間和上限標準:若要管理空間,Oracle AI Database 會追蹤區段中的區塊狀態。高水位標記 (HWM) 是區段中的點,超出該區段的資料區塊未格式化且從未使用過。另請參閱:「邏輯空間管理」以進一步瞭解 ASSM
使用者區段
資料庫中的單一資料區段會儲存一個使用者物件的資料。
有不同類型的區段。使用者區隔的範例包括:
-
表格、表格分割區或表格叢集
-
LOB 或 LOB 分割區
-
索引或索引分割區
每個非分割的物件與物件分割區都會儲存在自己的區段中。例如,如果索引有五個分割區,則五個區段會包含索引資料。
- 建立使用者區段:資料庫預設會使用建立延緩區段作業,在建立表格、索引以及分割區時只更新資料庫描述資料。
建立使用者區段
資料庫預設會使用建立延緩區段作業,在建立表格、索引以及分割區時只更新資料庫描述資料。
當使用者將第一個資料列插入表格或分割區時,資料庫會為表格或分割區、其 LOB 資料欄以及其索引建立區段。建立延緩區段作業可避免不必要使用資料庫資源。例如,安裝應用程式可建立數以千計的物件,耗用大量的磁碟空間。許多物件永遠都不會被使用。
DBMS_SPACE_ADMIN 套裝軟體會管理空物件的區段。您可以使用此 PL/SQL 套裝程式執行下列作業:
-
手動具體化未建立區段之空白表格或分割區的區段
-
從目前配置空白區段的空白表格或分割區中移除區段
為了能充分說明建立物件與建立區段之間的關係,請假設已停用建立延緩區段作業。您建立表格的方式如下:
CREATE TABLE test_table (my_column NUMBER);
如圖 15-19 所示,資料庫會為表格建立一個區段。
圖 19:建立使用者區段

當您使用主索引鍵或唯一索引鍵建立表格時,Oracle AI Database 會自動為此索引鍵建立索引。再次假設已停用建立延緩區段作業。您可以依照下列方式建立表格:
CREATE TABLE lob_table (my_column NUMBER PRIMARY KEY, clob_column CLOB);
圖 15-20 顯示 lob_table 的資料儲存在一個區段中,而隱含建立的索引則位於不同的區段中。此外,CLOB 資料會儲存在其本身的區段中,就像其關聯的 CLOB 索引一樣。因此,CREATE TABLE 敘述句會建立 4 個不同的區段。
圖 20:多重區段

注意:表格的區段和此表格的索引不需要佔用相同的表格空間。
建立區段時,資料庫會配置一或多個擴充區塊。物件的儲存參數決定如何配置每個區段的擴充區塊。這些參數會影響與物件關聯之資料區段的資料擷取和儲存效率。
另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解如何管理建立延緩區隔
-
Oracle AI Database SQL Language Reference,瞭解
CREATE TABLE語法
暫時區段
處理查詢時,Oracle AI Database 通常需要暫時工作區,才能執行 SQL 陳述式的中介階段。
可能需要暫時區段的一般作業包括排序、雜湊以及合併位元映射。建立索引時,Oracle AI Database 也會將索引區段放置在暫時區段中,然後在索引完成時將它們轉換成永久區段。
如果可以在記憶體中執行作業,Oracle AI Database 就不會建立暫時區段。不過,如果無法使用記憶體,則資料庫會自動在磁碟上配置暫時區段。
-
查詢的暫時區段配置:Oracle AI Database 會視需要在使用者階段作業期間為查詢配置暫時區段,並在查詢完成時刪除這些區段。對暫時區段進行的變更不會記錄在線上重做日誌中,除非是對暫時區段進行的空間管理作業。
-
暫時表格和索引的區段配置 Oracle AI Database 可以為暫時表格及其索引配置暫時區段。
查詢的暫時區段配置
Oracle AI Database 會視需要在使用者階段作業期間配置查詢的暫時區段,並在查詢完成時刪除這些區段。對暫時區段進行的變更不會記錄在線上重做日誌中,除非是對暫時區段進行的空間管理作業。
資料庫會在指派給使用者的暫時表格空間中建立暫時區段。表格空間的預設儲存特性會決定暫時區段中擴充區塊的特性。因為暫時區段的配置與取消配置經常發生,所以最佳作法是為暫時區段建立至少一個特殊表格空間。資料庫會將 I/O 分配到各個磁碟,避免讓 SYSTEM 以及其他具有暫時區段的表格空間分散。
注意:當本機管理 SYSTEM 時,您必須在建立資料庫時定義預設暫時表格空間。本機管理的 SYSTEM 表格空間無法用於預設暫時儲存。
另請參閱:
-
「線上重做日誌總覽」
-
Oracle AI Database Administrator's Guide,瞭解如何建立暫時表格空間
-
Oracle AI Database SQL Language Reference,瞭解
CREATE TEMPORARY TABLESPACE的語法和語意
暫時表格與索引的區段配置
Oracle AI Database 可以為暫時表格及其索引配置暫時區段。
暫時表格僅保留異動或梯次期間內存在的資料。每個階段作業只會存取配置給其本身的擴充區塊,無法存取配置給其他階段作業的擴充區塊。
發生第一個 INSERT 時,Oracle AI Database 會為全域暫時表格配置區段,且只有在需要時才為專用暫時表格配置區段。插入可以明確進行,或因為 CREATE TABLE AS SELECT。資料庫會配置表格的區段及其索引、建立索引的根頁面,以及配置任何 LOB 區段。
目前使用者的暫時表格空間會配置暫時表格的區段。例如,指派給 user1 的暫時表格空間是 temp1,指派給 user2 的暫時表格空間則是 temp2。在此情況下,user1 會將暫時資料儲存在 temp1 區段中,而 user2 則會將暫時資料儲存在 temp2 區段中。
另請參閱:
-
「暫時表格概要」
-
Oracle AI Database Administrator's Guide,瞭解如何建立暫時表格
還原區段
Oracle AI Database 維護交易動作的記錄,統稱為還原資料。
Oracle AI Database 使用還原資料來執行下列作業:
Oracle AI Database 將還原資料儲存在資料庫中,而不是儲存在外部日誌中。還原資料儲存在像資料區塊一樣更新的區塊中,這些區塊的變更會產生重做記錄。如此一來,Oracle AI Database 就可以有效率地存取還原資料,而無需讀取外部日誌。
永久物件的還原資料會儲存在還原表格空間中。Oracle AI Database 提供完全自動化的機制 (稱為自動還原管理模式 ),用於管理還原表格空間中的還原區段和空間。
資料庫會將還原資料區分為兩個串流。暫時還原串流只會封裝暫時物件變更所產生的還原記錄,而永久還原串流則只會封裝永久物件的還原記錄。資料庫會獨立管理暫時和永久還原。還原區隔可減少儲存體,並透過執行下列動作來提升效能:
-
讓您設定最適合永久與暫時表格之工作負載的永久與還原表格空間大小
-
減少寫入線上重做日誌的重做大小
-
避免備份暫時還原資料
在 Active Data Guard 執行處理上,全域暫時表格上的 DML 需要在暫時還原區段中產生還原。
-
還原區段和交易:當交易啟動時,資料庫會將交易連結至還原區段,因此連結至目前還原表格空間中的交易表格。在極少數的情況下,如果資料庫執行處理沒有指定的還原表格空間,交易就會連結至系統還原區段。
-
交易倒回:發出
ROLLBACK敘述句時,資料庫會使用還原記錄來倒回由未確認的交易對資料庫所做的變更。 -
暫時還原區段:暫時還原區段是選擇性的空間管理容器,僅適用於暫時還原資料。
另請參閱:
-
「使用線上重做日誌」
-
「暫時還原區段」
-
Oracle AI Database Reference,瞭解
TEMP_UNDO_ENABLED初始化參數
還原區段和交易
當交易開始時,資料庫會將該交易繫結 (指定) 至還原區段,因此連結至目前還原表格空間中的交易表格。在極少數的情況下,如果資料庫執行處理沒有指定的還原表格空間,交易就會連結至系統還原區段。
多個作用中交易可以同時寫入相同的還原區段,或是寫入不同的區段。例如,交易 T1 和 T2 可以寫入還原區段 U1,而 T1 則可以寫入 U1,而 T2 則寫入還原區段 U 2。
在概念上,還原區段中的擴充區塊會形成環狀。交易會寫入一個還原擴充區塊,然後寫入環中的下一個擴充區塊,以此類推。圖 15-21 顯示 T1 和 T2 這兩個交易,從還原區段的第三個擴充區塊 (E3) 開始寫入,然後繼續寫入第四個擴充區塊 (E4)。
圖 21:還原區段中配置的擴充區塊環

在任何指定的時間,交易都會依序寫入還原區段中只有一個擴充區塊,也就是交易的目前擴充區塊。多個作用中交易可以同時寫入相同的目前擴充區塊或不同的目前擴充區塊。圖 15-21 顯示擴充區塊 E3 同時寫入 T1 和 T2 的交易。在還原擴充區塊中,資料區塊只包含一個交易的資料。
當目前的還原擴充區塊填滿時,第一個需要空間的交易會檢查環中下一個配置擴充區塊的可用性。如果下一個擴充區塊未包含作用中交易的資料,則此擴充區塊會變成目前的擴充區塊。現在,所有需要空間的交易都可以寫入新的目前擴充區塊。在圖 15-22 中,當 E4 已滿時,T1 和 T2 會繼續寫入 E1,覆寫 E1 中的非作用中還原資料。
圖 22:還原區段中配置之擴充區塊的循環使用

如果下一個擴充區塊有包含作用中交易的資料,資料庫就必須配置新的擴充區塊。圖 15-23 顯示 T1 和 T2 寫入 E4 的案例。E4 填入時,交易無法繼續寫入 E1,因為 E1 包含作用中的還原項目。因此,資料庫會為這個還原區段配置新的擴充區塊 (E5)。交易會繼續寫入 E5。
圖 23:還原區段的新擴充區塊配置

另請參閱:Oracle AI Database Administrator's Guide,瞭解如何管理還原區段
交易倒回
發出 ROLLBACK 敘述句時,資料庫會使用還原記錄來倒回由未確認的交易對資料庫所做的變更。
在復原期間,資料庫會將從線上重做日誌套用的所有未確認變更倒回至資料檔。還原記錄提供讀取一致性,可維護資料之前的圖像,供其他使用者在變更資料前的同時存取資料。
暫時還原區段
暫時還原區段是選擇性的空間管理容器,只能用於暫時還原資料。
暫時表格變更的還原記錄,是階段作業特定的記錄,而且只對讀取一致性與交易倒回有用。在 Oracle Database 12c 之前,資料庫一律會將這些記錄儲存在線上重做日誌中。因為暫時物件的變更不會記錄在線上重做日誌中,所以將暫時物件的還原寫入暫時還原區段會節省線上重做日誌與存檔重做日誌檔的空間。資料庫不會將變更記錄到還原,也不會將變更記錄到可改善效能的暫時表格。
您可以設定 TEMP_UNDO_ENABLED 初始化參數,讓暫時表格將還原資料儲存在暫時還原區段中。當此參數為 TRUE 時,資料庫會從暫時表格空間配置暫時還原區段。
另請參閱:
-
Oracle AI Database Reference,瞭解
TEMP_UNDO_ENABLED初始化參數
區段空間與上限標準
為了管理空間,Oracle AI Database 會追蹤區段中的區塊狀態。高水位標記 (HWM) 是區段中的點,超出該區段的資料區塊未格式化且從未使用過。
MSSM 使用可用清單來管理區段空間。建立表格時,區段中的任何區塊都會格式化。當階段作業首次在表格中插入資料列時,資料庫會搜尋可用清單中的可用區塊。如果資料庫找不到可用的區塊,它會預先格式化一組區塊,將它們放在可用清單上,然後開始將資料插入區塊中。在 MSSM 中,完整表格掃描會讀取 HWM 下的所有區塊。
ASSM 不使用可用清單,因此必須以不同的方式管理空間。當階段作業首次將資料插入表格時,資料庫會將單一位元映射區塊格式化,而非以 MSSM 的方式預先格式化一組區塊。點陣圖會追蹤區段中區塊的狀態,並取代可用清單。資料庫會使用位元映射來尋找可用的區塊,然後格式化每個區塊,再以資料填入區塊。ASSM 在區塊之間分攤插入,以避免並行問題。
ASSM 區段中的每個資料區塊皆處於下列其中一種狀態:
-
在 HWM 之上
這些區塊未格式化,因此從未被使用過。
-
HWM 之下
這些區塊處於下列其中一種狀態:
-
已配置,但目前未格式化且未使用
-
格式化並包含資料
-
已格式化且空白,因為資料已被刪除
-
圖 15-24 將 ASSM 區段描述為水平的區塊數列。在建立表格時,HWM 位於左側區段的開頭。因為還沒有插入任何資料,所以區段中的所有區塊都會未經格式化,永遠都不會被使用。
圖 24:建立表格時的 HWM

假設交易在區段中插入資料列。資料庫必須配置一組區塊,以保存資料列。配置的區塊落在 HWM 之下。資料庫會格式化此群組中的點陣圖區塊以保留描述資料,但不會預先格式化群組中其餘的區塊。
在圖 15-25 中,會配置 HWM 下方的區塊,而 HWM 上方的區塊則不會配置或格式化。在插入時,資料庫可以寫入具有可用空間的任何區塊。低高水位標記 (低 HWM) 會在下方標示已知所有區塊的格式,因為這些區塊包含資料或先前包含的資料。
圖 25:HWM 和低 HWM

在圖 15-26 中,資料庫會選擇 HWM 與低 HWM 之間的區塊並寫入區塊。資料庫可以像在 HWM 和低 HWM 之間輕鬆選擇任何其他區塊一樣,或者在具有可用空間的低 HWM 之下的任何區塊一樣。在圖 15-26 中,新填滿區塊之任一側的區塊會被取消格式化。
圖 26:HWM 和低 HWM

低 HWM 在完整表格掃描中很重要。因為只有在使用時,才會格式化 HWM 下方的區塊,所以某些區塊可能無法格式化,如圖 15-26 所示。因此,資料庫會讀取點陣圖區塊以取得低 HWM 的位置。由於 HWM 已知是格式化區塊,因此資料庫會讀取 HWM 不足的所有區塊,然後仔細地只讀取 HWM 和 HWM 之間格式化的區塊。
假設新的交易在表格中插入資料列,但點陣圖指出 HWM 下的可用空間不足。在圖 15-27 中,資料庫會將 HWM 進展到右側,並配置一組新的未格式化區塊。
圖 27:提升 HWM 和低 HWM

當 HWM 與低 HWM 之間的圖塊已滿時,HWM 會向右移動,而低 HWM 會向上移動到舊 HWM 的位置。當資料庫在一段時間內插入資料時,HWM 會繼續向右前進,而低 HWM 則一律會落後。除非您手動重建、截斷或縮小物件,否則 HWM 永遠不會撤回。
另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解如何在線上縮小區隔
-
Oracle AI Database SQL Language Reference,瞭解
TRUNCATE TABLE的語法和語意
表格空間總覽
表格空間是區段的邏輯儲存體容器。
區段是會使用儲存體空間的資料庫物件,例如表格與索引。在實體層次上,表格空間會將資料儲存在一或多個資料檔或暫存檔中。
-
多用戶環境中的表格空間 在 CDB 中,每個 PDB 和應用程式 root 都有它自己的一組表格空間。
-
永久表格空間:永久表格空間會將永久綱要物件群組。表格空間中物件的區段會以實體方式儲存在資料檔中。
-
暫時表格空間:暫時表格空間包含暫時資料,只會保存階段作業的持續時間。沒有永久綱要物件可以位於暫時表格空間中。暫存檔會儲存暫時表格空間資料。
-
表格空間模式:表格空間模式會決定表格空間的存取性。
-
表格空間檔案大小:表格空間可以是大型檔案表格空間或小型檔案表格空間。在未明確參照資料檔或暫存檔的 SQL 敘述句執行時,這些表格空間就可區分。
多雲端用戶環境中的表格空間
在 CDB 中,每個 PDB 與應用程式 root 都有它自己的一組表格空間。
每個 CDB 根、PDB 以及應用程式根目錄都必須要有 SYSTEM 和 SYSAUX 表格空間。下圖顯示一般容器中的表格空間。
圖 28:表格空間

CDB 包含下列項目:
-
一個控制檔
-
一個線上重做日誌
-
一或多個還原表格空間
只有具備適當權限且目前容器為 CDB root 的通用使用者可以建立還原表格空間。CDB 在任何指定的時間會使用下列任何一種還原模式:
-
本機還原模式
在此情況下,每個 PDB 都有自己的還原表格空間。如果 CDB 使用本機還原模式,則資料庫會在每個 PDB 中自動建立還原表格空間。本機還原的優點包括執行 PDB 的熱複製和快速重新定位 PDB。此外,本機還原也提供隔離層次,並可更快速地拔除及時間點復原作業。
開啟 PDB 之 Oracle Real Application Clusters (RAC) 叢集中的每個節點都需要本機還原表格空間。例如,如果您將一個 PDB 從雙節點叢集移到四節點叢集,而且如果 PDB 是在所有節點中開啟的,則資料庫會自動建立其他需要的還原表格空間。如果您再次將 PDB 移回,則可以刪除冗餘還原表格空間。
注意:依照預設,「資料庫組態輔助程式 (DBCA)」會建立啟用本機還原的新 CDB。
-
共用還原模式
在單一執行處理 CDB 中,只有一個作用中還原表格空間。若為 Oracle RAC CDB,每個執行處理都會有一個作用中的還原表格空間。所有還原表格空間都會顯示在資料說明與所有容器的相關視觀表中。
還原模式會套用至整個 CDB,這表示每個容器都會使用共用還原,或是每個容器都使用本機還原。您可以在需要重新啟動資料庫的 CDB 中切換還原模式。
-
-
每個容器的
SYSTEM和SYSAUX表格空間CDB 根,每個應用程式根目錄,每個 PDB 都有自己的
SYSTEM和SYSAUX表格空間。每個容器也會有各自的資料說明表格集,這些表格描述位於容器中的物件。 -
零個或多個使用者建立的表格空間
在一般使用案例中,每個 PDB 都有它自己的一組非系統表格空間。這些表格空間包含 PDB 中使用者定義的綱要與物件的資料。您可以在
CREATE PLUGGABLE DATABASE或ALTER PLUGGABLE DATABASE敘述句中使用STORAGE子句來限制 PDB 資料檔使用的儲存體大小。資料說明在 PDB 內的儲存體可讓它可攜式。您可以將 PDB 從 CDB 拔除,然後再插入到不同的 CDB 中。
-
每個容器的一組暫時檔
範例 15-3 在本機還原模式下的 CDB
此範例顯示具有兩個 PDB 之 CDB 的實體儲存體架構層面:hrpdb 和 salespdb。在此範例中,資料庫使用本機還原模式,因此 CDB 根、hrpdb 以及 salespdb 中有還原資料檔。
圖 29:本機還原模式中 CDB 的實體架構

另請參閱:「 CDB 中的資料說明區隔」
永久表格空間
永久表格空間群組永久綱要物件。表格空間中物件的區段會以實體方式儲存在資料檔中。
每個資料庫使用者都會被指派預設的永久表格空間。非常小的資料庫可能只需要預設的 SYSTEM 和 SYSAUX 表格空間。不過,Oracle 建議您至少建立一個表格空間來儲存使用者和應用程式資料。您可以使用表格空間來達成下列目標:
-
控制資料庫資料的磁碟空間配置
-
指定配額 (空間限制或限制) 給資料庫使用者
-
讓個別表格空間上線或離線,而不影響整個資料庫的可用性
-
執行個別表格空間的備份與復原
-
使用 Oracle Data Pump 公用程式匯入或匯出應用程式資料
-
建立一個可傳輸表格空間,讓您可以從一個資料庫複製或移到另一個資料庫,甚至跨平台
傳輸表格空間可以讓資料的移動速度比匯出 / 匯入相同資料的速度快,或是取消載入 / 載入相同資料的順序,因為傳輸表格空間只牽涉到複製資料檔以及整合表格空間描述資料。當您傳輸表格空間時,也可以移動索引資料。
-
SYSTEM 表格空間
SYSTEM表格空間是建立資料庫時所含的必要管理表格空間。Oracle AI Database 使用SYSTEM來管理資料庫。 -
SYSAUX 表格空間
SYSAUX表格空間是SYSTEM表格空間的輔助表格空間。 -
還原表格空間:還原表格空間是保留給系統管理之還原資料的本機管理表格空間。
-
陰影表格空間:陰影表格空間是陰影遺失寫入保護的大型檔案表格空間。
另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解如何傳輸表格空間
-
Oracle AI Database Utilities 將瞭解 Oracle Data Pump
SYSTEM 表格空間
SYSTEM 表格空間是建立資料庫時所含的必要管理表格空間。Oracle AI Database 使用 SYSTEM 來管理資料庫。
SYSTEM 表格空間包括下列所有由 SYS 使用者擁有的資訊:
-
資料說明
-
包含資料庫管理資訊的表格和視觀表
-
編譯的預存物件,例如觸發程式、程序以及套裝程式
SYSTEM 表格空間管理為任何其他表格空間,但需要更高層次的權限,而且在某些方面受到限制。例如,您無法重新命名或刪除 SYSTEM 表格空間。
依照預設,Oracle AI Database 會將所有新建立的使用者表格空間設為本機管理。在具有本機管理之 SYSTEM 表格空間的資料庫中,您無法建立說明管理的表格空間 (已不再使用)。不過,如果您手動執行 CREATE DATABASE 敘述句並接受預設值,則會管理 SYSTEM 表格空間。您可以將現有的說明管理的 SYSTEM 表格空間移轉至本機管理的格式。注意:Oracle 強烈建議您使用「資料庫組態輔助程式 (DBCA)」來建立新資料庫,讓所有表格空間 (包括 SYSTEM) 預設為本機管理。
另請參閱:
-
線上和離線表格空間,瞭解
SYSTEM表格空間之永久線上條件的相關資訊 -
Oracle AI Database Administrator's Guide,瞭解如何建立或移轉至本機管理的
SYSTEM表格空間 -
Oracle AI Database SQL Language Reference,瞭解
CREATE DATABASE的語法和語意
SYSAUX 表格空間
SYSAUX 表格空間是 SYSTEM 表格空間的附屬表格空間。
因為 SYSAUX 是許多 Oracle AI Database 功能和先前需要自己的表格區之產品的預設表格區,所以會減少資料庫所需的表格區數目。它也會減少 SYSTEM 表格空間的負載。
建立或升級資料庫會自動建立 SYSAUX 表格空間。在正常資料庫作業期間,資料庫不允許刪除或重新命名 SYSAUX 表格空間。如果 SYSAUX 表格空間無法使用,核心資料庫功能會維持運作。使用 SYSAUX 表格空間的資料庫功能可能會失敗或功能有限。
另請參閱:Oracle AI Database Administrator's Guide,瞭解 SYSAUX 表格空間
還原表格空間
還原表格空間是保留給系統管理還原資料的本機管理表格空間。
就像其他的永久表格空間一樣,還原表格空間也包含資料檔。這些檔案中的還原區塊都會群組在擴充區塊中。
自動復原管理模式
還原表格空間需要讓資料庫處於預設自動還原模式狀態。
自動模式則可免除手動管理還原區段的複雜性。資料庫會自動自行調整,以提供最佳的還原資料保留,以滿足可能需要此資料的長時間執行查詢。
Oracle AI Database 的新安裝會自動建立一個還原表格空間。舊版的 Oracle AI Database 可能不包含還原表格空間,而是改用傳統倒回區段,稱為手動還原管理模式。Oracle AI Database 包含一個「還原建議程式」,提供有關還原環境的建議並協助自動化還原環境。
資料庫可以包含多個還原表格空間,但一次只能使用一個。當執行處理嘗試開啟資料庫時,Oracle AI Database 會自動選取第一個可用的還原表格空間。如果沒有可用的還原表格空間,執行處理就會在沒有還原表格空間的情況下啟動,並將還原資料儲存在 SYSTEM 表格空間中。不建議在 SYSTEM 中儲存還原資料。
另請參閱:
-
Oracle AI Database Upgrade Guide,瞭解如何移轉至自動還原管理模式
自動還原保留
還原保留期間是 Oracle AI Database 在覆寫舊還原資料之前,嘗試保留舊還原資料的最短時間。
還原保留很重要,因為長時間執行的查詢可能需要較舊的區塊影像來提供讀取一致性。此外,有些 Oracle Flashback 功能會取決於還原可用性。
一般而言,想要儘可能保留舊的還原資料。在交易確認之後,就不再需要還原資料來進行倒回或交易復原。如果還原表格空間有新交易的空間,資料庫就可以保留舊的還原資料。當可用空間不足時,資料庫會開始覆寫已確認交易的舊還原資料。
Oracle AI Database 會自動為目前的還原表格空間提供最佳的還原保留。資料庫會收集使用狀況統計資料,並根據這些統計資料和還原表格空間大小調整保留期間。如果使用 AUTOEXTEND 選項設定還原表格空間,且未指定大小上限,則還原保留調整會有所不同。在此情況下,如果空間允許的話,資料庫會將還原保留期間調整為比最長執行查詢稍長的時間。
另請參閱:Oracle AI Database Administrator's Guide,瞭解自動調整還原保留的詳細資訊
陰影表格空間
陰影表格空間是用來陰影遺失寫入保護的大型檔案表格空間。
注意:使用 DB_LOST_WRITE_PROTECT 初始化參數和待命資料庫設定的遺失寫入保護,陰影遺失寫入保護與遺失寫入保護無關。
-
陰影表格空間的用途陰影遺失寫入保護可快速偵測並立即回應遺失寫入。
-
陰影表格空間的運作方式遺失寫入保護需要兩個表格空間:陰影表格空間,以及陰影表格空間所追蹤區塊的非陰影表格空間。
-
陰影表格空間的使用者介面:您可以使用
ALTER PLUGGABLE DATABASE命令來啟用和停用陰影遺失寫入保護。 -
範例:設定遺失的寫入保護此範例會啟用一組表格空間的陰影遺失寫入追蹤。
陰影表格空間的用途
陰影遺失寫入保護可快速偵測並立即回應遺失寫入。
當 I/O 子系統認可未進行寫入,或當區塊的前一個影像覆寫目前的影像時,就會完成區塊寫入的作業,就會發生資料區塊遺失寫入。
未偵測到的遺失寫入可能會導致資料損毀,因為不正確的資料可用於其他 DML 交易。例如,異動可以從一個表格中讀取舊與不正確的資料,然後根據此資料更新數百個其他表格。如此一來,資料損毀可能會分散到整個資料庫中。
陰影遺失寫入保護的優點如下:
-
它會先偵測遺失的寫入,再用於標準 DML、SQL*Loader 傳統路徑載入、直接路徑載入以及 RMAN 備份。
-
您可以為特定表格空間與資料檔啟用陰影遺失寫入保護。您不需要追蹤所有資料。
-
您可以將一個隱式表格空間取代為另一個隱式表格空間,以變更其組態或位置。
-
您可以暫停和繼續表格空間或資料檔的陰影遺失寫入保護。
-
您可以使用單一
ALTER DATABASE ... LOST WRITE PROTECTION敘述句來啟用或停用 PDB 的 PDB。PROP$表格指示是否為 PDB 啟用追蹤。
另請參閱:Oracle AI Database SQL Language Reference,瞭解 LOST WRITE PROTECTION 子句的詳細資訊
陰影表格空間運作方式
遺失寫入保護需要兩個表格空間:陰影表格空間,以及由陰影表格空間追蹤其區塊的非陰影表格空間。
下圖提供範例案例。表格空間 TBS1 與 TBS2 中的資料檔均由影子表格空間追蹤。陰影表格空間只追蹤表格空間 TBS3 中的資料檔 DBF6。

一個追蹤的資料檔會對應至陰影表格空間中的一個陰影擴充區塊。追蹤資料檔中的每個資料區塊在陰影區塊中都會有一個對應的項目。此項目包含追蹤資料區塊的 SCN。從磁碟讀取追蹤的資料區塊時,陰影遺失寫入保護會比較陰影表格空間中區塊的 SCN 與追蹤資料區塊中最近寫入的 SCN。如果陰影項目的 SCN 大於要讀取的資料區塊,則發生遺失的寫入,並提示錯誤。
陰影擴充區塊的大小具有非常大的額外空間,可防止資料檔自動調整大小,導致陰影擴充區塊成長過大。如果追蹤的資料檔是以手動或自動方式調整大小,而且如果陰影擴充區塊需要成長,則資料庫會嘗試調整追蹤資料的大小。如果沒有足夠的陰影表格空間,則資料庫會將警告寫入警示日誌,並儘可能追蹤多個資料區塊。
另請參閱:Oracle AI Database Administrator's Guide,瞭解如何管理陰影遺失寫入保護
影子表格空間的使用者介面
您可以使用 ALTER PLUGGABLE DATABASE 命令來啟用及停用陰影遺失寫入保護。
如果要保護特定表格空間或資料檔的陰影遺失寫入保護,必須符合下列條件:
-
您必須使用
ALTER PLUGGABLE DATABASE ENABLE LOST WRITE PROTECTION敘述句,為整個 PDB 啟用陰影遺失寫入保護。注意:在 CDB 中,如果您在 root 中啟用陰影遺失寫入保護,則 PDB 不會繼承它。您必須對要保護的每個 PDB 啟用陰影遺失寫入保護。
-
您必須啟用陰影遺失寫入保護,才能使用
ENABLE LOST WRITE PROTECTION子句保護表格空間或資料檔。當您針對表格空間啟用陰影遺失寫入保護時,表格空間的所有資料檔都會受到保護,而新增至表格空間的任何資料檔也會受到保護。請注意,您無法在暫時表格空間或其他遺失的寫入表格空間啟用遺失的寫入保護。
-
您必須使用
CREATE BIGFILE TABLESPACE敘述句搭配LOST WRITE PROTECTION子句建立一或多個影子表格空間。
Oracle AI Database 會自動將追蹤的資料檔指派給特定的陰影表格空間。您無法指定要使用哪一個陰影表格空間來作為特定資料檔。
下列資料說明視觀表會監督陰影表格空間:
-
DBA_TABLESPACES依查詢顯示哪些表格空間是影子表格空間。
-
DBA_DATA_FILES.LOST_WRITE_PROTECT顯示資料檔是否啟用遺失寫入保護
-
USER_TABLESPACES.LOST_WRITE_PROTECT顯示是否針對特定表格空間開啟遺失的寫入保護。
DBA_DATA_FILES不表示表格空間是否開啟遺失寫入:您必須改為查看USER_TABLESPACES。
另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解如何使用陰影表格空間來管理遺失的寫入保護
-
Oracle AI Database SQL Language Reference,瞭解
CREATE TABLESPACE陳述式 -
Oracle AI Database Reference,瞭解
DBA_TABLESPACES
範例:設定遺失的寫入保護
此範例會針對一組表格空間啟用隱式遺失寫入追蹤。
在此範例中,您的目標是保護 PDB 內的 salestbs 與 hrtbs 表格空間。您也想要保護 oetbs01.dbf 資料檔,以及只保護 oetbs 表格空間中的這個資料檔。您執行下列作業:
-
以管理員身分登入 PDB。
-
如下所示,建立單一陰影表格空間:
CREATE BIGFILE TABLESPACE shadow_lwp1 DATAFILE 'shadow_lwp1_df' SIZE 10M LOST WRITE PROTECTION; -
啟用 PDB 的遺失寫入保護,如下所示:
ALTER DATABASE ENABLE LOST WRITE PROTECTION; -
啟用
salestbs和hrtbs表格空間的陰影遺失寫入保護,如下所示:ALTER TABLESPACE salestbs ENABLE LOST WRITE PROTECTION; ALTER TABLESPACE hrtbs ENABLE LOST WRITE PROTECTION; -
依下列方式啟用
oetbs01.dbf資料檔的隱式遺失寫入保護:ALTER DATABASE DATAFILE 'oetbs01.dbf' ENABLE LOST WRITE PROTECTION;
另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解如何管理陰影表格空間
-
Oracle AI Database SQL Language Reference,瞭解
CREATE TABLESPACE陳述式
暫時表格空間
暫時表格空間包含暫時資料,只會在階段作業的持續時間內保存。沒有永久綱要物件可以位於暫時表格空間中。暫存檔會儲存暫時表格空間資料。
暫時表格空間可以改善不適合在記憶體中的多個排序作業並行。這些表格空間也能提升排序期間空間管理作業的效率。
-
共用表格空間與本機暫時表格空間:暫時表格空間為共用表格空間或本機表格空間。
-
預設暫時表格空間:每個資料庫使用者帳戶都會被指派預設的共用暫時表格空間。如果資料庫包含本機暫時表格空間,則每個使用者帳戶也會被指派預設本機暫時儲存體。
共用表格空間與本機暫時表格空間
暫時表格空間是共用的或本機表格空間。
共用暫時表格空間會將暫存檔儲存在共用磁碟上,讓所有資料庫執行處理都能存取暫時空間。相反地,本機暫時表格空間會為每個資料庫執行處理儲存個別的非共用暫存檔。本機暫時表格空間適用於 Oracle Real Application Clusters 或 Oracle Flex Clusters。
您可以為唯讀與讀 / 寫資料庫執行處理建立本機暫時表格空間。當許多唯讀執行處理存取單一資料庫時,本機暫時表格空間可改善涉及排序、雜湊聚總以及結合的查詢效能。優點包括:
-
使用本機而非共用磁碟儲存體來改善 I/O 效能
-
避免昂貴的跨執行處理暫時空間管理
-
消除磁碟空間描述資料管理以提升執行處理啟動效能
下表比較共用表格空間與本機暫時表格空間的特性。
表 2 共用的與當地暫時表格空間
| 共用暫時表格空間 | 本機暫時表格空間 |
|---|---|
使用 CREATE TEMPORARY TABLESPACE 敘述句建立。 |
使用 注意:本機暫時表格空間一律是大型檔案表格空間,但是 create 敘述句中不需要 |
| 為資料庫建立單一暫時表格空間。 | 為每個資料庫執行處理建立個別的暫時表格空間。FOR LEAF 選項只會為唯讀執行處理建立表格空間。FOR ALL 選項會為所有執行處理建立表格空間,包括唯讀和讀寫。 |
| 支援表格空間群組。 | 不支援表格空間群組。 |
| 將暫存檔描述資料儲存在控制檔中。 | 儲存控制檔中所有執行處理通用的暫存檔描述資料,以及 SGA 中的執行處理特定描述資料 (例如,配置的位元映射、目前的暫存檔大小,以及檔案狀態)。 |
另請參閱:「Oracle AI Database 執行個體簡介」
預設暫存表格空間
每個資料庫使用者帳戶都會被指派預設的共用暫時表格空間。如果資料庫包含本機暫時表格空間,則每個使用者帳戶也會被指派預設本機暫時儲存體。
您可以使用 CREATE USER 或 ALTER USER 敘述句,為使用者帳戶指定不同的暫時表格空間。Oracle AI Database 會針對未指定其他暫時表格空間的使用者,使用系統層次的預設暫時表格空間。
-
建立預設暫時表格空間:建立資料庫時,預設暫時儲存體會視
SYSTEM表格空間是否由本機管理而定。 -
存取暫時儲存體:如果使用者有指派的暫時表格空間,則資料庫會先存取該暫時表格空間,否則資料庫會存取預設的暫時表格空間。當資料庫存取某個查詢的暫時表格空間之後,該表格空間並不會切換到其他表格空間。另請參閱:Oracle AI Database SQL Language Reference,瞭解
CREATE USER陳述式的詳細資訊
建立預設暫時表格空間
建立資料庫時,預設暫時儲存體會視 SYSTEM 表格空間是否由本機管理而定。
下表顯示 Oracle AI Database 如何在建立資料庫時選擇預設暫時表格空間。
表格 3 建立預設暫時表格空間
| SYSTEM 表格空間是否由本機管理? | CREATE DATABASE 敘述句是否指定預設暫時表格空間? | 接著是資料庫 … |
|---|---|---|
| 是 | 是 | 使用指定的表格空間作為預設值。 |
| 是 | 否 | 建立暫時表格空間。 |
| 否 | 是 | 使用指定的表格空間作為預設值。 |
| 否 | 否 | 使用 SYSTEM 作為預設暫時儲存體。資料庫會在警示日誌中寫入警告,並表示建議使用預設暫時表格空間。 |
建立資料庫之後,您可以使用 ALTER DATABASE DEFAULT TEMPORARY TABLESPACE 敘述句來變更資料庫的預設暫時表格空間。注意:您無法將預設暫時表格空間設為永久。
另請參閱:
-
「永久和暫時資料檔」
-
Oracle AI Database Administrator's Guide,瞭解如何建立預設暫時表格空間
-
Oracle AI Database SQL Language Reference,瞭解
CREATE DATABASE和ALTER DATABASE之DEFAULT TEMPORARY TABLESPACE子句的語法
存取暫時儲存體
如果某個使用者被指派暫時表格空間,則資料庫會先存取該表格空間,否則資料庫會存取預設暫時表格空間。當資料庫存取某個查詢的暫時表格空間之後,該表格空間並不會切換到其他表格空間。
使用者查詢可以存取共用或本機暫時儲存體。此外,使用者可以有一個被指派唯讀執行處理的預設本機暫時表格空間,以及一個指派給讀取 / 寫入執行處理的其他預設本機暫時表格空間。
對於讀取 / 寫入執行處理,資料庫會賦予較高共用暫時表格空間的優先順序。對於唯讀執行處理,資料庫會讓本機暫時表格空間有較高的優先順序。如果資料庫執行處理是讀取 / 寫入的,則資料庫會依下列順序搜尋空間:
-
共用的暫時表格空間是否指派給使用者?
-
是否已將本機暫時表格空間指派給使用者?
-
資料庫預設暫時表格空間是否有空間?
如果先前問題的答案為是,則資料庫會停止搜尋,並從指定的表格空間配置空間;否則,會從資料庫預設的本機暫時表格空間配置空間。
如果資料庫執行處理是唯讀的,則資料庫會依下列順序搜尋空間:
-
是否已將本機暫時表格空間指派給使用者?
-
指派的資料庫預設本機暫時表格空間是否有空間?
-
共用的暫時表格空間是否指派給使用者?
如果先前問題的答案為是,則資料庫會停止搜尋,並從指定的表格空間配置空間;否則,系統會從資料庫預設的共用暫時表格空間配置空間。
表格空間模式
表格空間模式決定表格空間的存取性。
-
讀取 / 寫入與唯讀表格空間:每個表格空間都處於寫入模式,指定是否可以寫入。
-
線上與離線表格空間:每當資料庫開啟時,表格空間都可以是線上 (可存取) 或離線 (不可存取)。
讀取 / 寫入以及唯讀表格空間
每個表格空間都會處於一個寫入模式,指定是否可以寫入。
互斥模式如下:
-
讀取 / 寫入模式
使用者可以讀取及寫入表格空間。所有表格空間一開始都會以讀取 / 寫入方式建立。
SYSTEM和SYSAUX表格空間和暫時表格空間都是永久的讀取 / 寫入,這表示無法將它們設為唯讀。 -
唯讀模態
無法對表格空間中的資料檔進行寫入作業。唯讀表格空間可以位於唯讀媒體 (例如 DVD 或 WORM 光碟機)。
唯讀表格空間則不需要執行資料庫大型、靜態部分的備份與復原作業。唯讀表格空間不會變更,因此不需要重複備份。如果您在媒體失敗後復原資料庫,就不需要復原唯讀表格空間。
另請參閱:
-
Oracle AI Database Administrator's Guide,瞭解如何將表格空間變更為唯讀或讀 / 寫模式
-
Oracle AI Database SQL Language Reference,瞭解
ALTER TABLESPACE的語法和語意 -
Oracle AI Database Backup and Recovery User's Guide,瞭解有關復原的詳細資訊
線上與離線表格空間
當資料庫開啟時,表格空間可以是線上 (可存取) 或離線 (不可存取)。
表格空間通常是在線上,讓使用者可以使用其資料。SYSTEM 表格空間與暫時表格空間無法離線。
表格空間可以自動或手動離線。例如,您可以讓表格空間離線以進行維護、備份與復原。當發生特定錯誤時,資料庫會自動讓表格空間離線,就像資料庫寫入器 (DBW) 處理作業在數次嘗試寫入資料檔時失敗一樣。嘗試存取離線表格空間中表格的使用者會收到錯誤。
當表格空間離線時,資料庫會執行下列作業:
-
資料庫不允許後續的 DML 敘述句參照離線表格空間中的物件。離線表格空間無法由 Oracle AI Database 以外的任何公用程式讀取或編輯。
-
具有已完成敘述句 (參照該表格空間中的資料) 的作用中交易不會在交易層次受到影響。
-
資料庫會在
SYSTEM表格空間的延緩還原區段中,儲存與已完成敘述句對應的還原資料。當表格空間上線時,資料庫會視需要將還原資料套用到表格空間。
另請參閱:
-
「線上和離線資料檔」
-
Oracle AI Database Administrator's Guide,瞭解如何更改表格空間可用性
表格空間檔案大小
表格空間為大型檔案表格空間或小型檔案表格空間。在未明確參照資料檔或暫存檔的 SQL 敘述句執行時,這些表格空間就可區分。
差異如下:
-
一個小型檔案表格空間可以包含多個資料檔或暫存檔,但是檔案不能與大型檔案表格空間一樣大。這是預設表格空間類型。
-
大型檔案表格空間包含一個非常大型的資料檔或暫存檔。這種類型的表格空間可以執行下列作業:
-
增加資料庫的儲存容量
資料庫中的資料檔數目上限是限制的,因此增加每個資料檔的大小會增加整體儲存體。
-
減少管理許多資料檔和暫存檔的負擔
大型檔案表格空間不需新增檔案及處理多個檔案,因此使用 Oracle Managed Files 和 Automatic Storage Management (Oracle ASM) 來簡化檔案管理。
-
在表格空間 (而非個別檔案) 上執行作業
大型檔案表格空間會讓表格空間成為磁碟空間管理、備份與復原等的主要單位。
只有使用 ASSM 的本機管理表格空間才支援大型檔案表格空間。不過,本機管理的還原與暫時表格空間也可以是大型檔案表格空間,即使是手動管理區段也是如此。
從 Oracle AI Database 26ai 開始,系統、SYSAUX 和 USER 表格空間預設會建立為大型檔案表格空間。從舊版升級的資料庫會保留其表格空間類型。
-
另請參閱:
-
Oracle AI Database Backup and Recovery User's Guide,瞭解有關備份和復原的詳細資訊
-
Oracle AI Database Administrator's Guide,瞭解如何管理大型檔案表格空間