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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Oracle区概念总结

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

數(shù)據(jù)區(qū)概述

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

數(shù)據(jù)區(qū)何時被分配

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

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

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

如何決定分配數(shù)據(jù)擴展的容量與數(shù)量

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

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

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

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

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

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

區(qū)如何被分配

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

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

數(shù)據(jù)區(qū)合適被回收

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

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

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

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

ALTER TABLE table_name DEALLOCATE UNUSED;

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

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

非簇表中的數(shù)據(jù)擴展

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

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

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

簇表中的數(shù)據(jù)擴展

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)的數(shù)據(jù)存儲在為整個簇(cluster)分配的數(shù)據(jù)段(data segment)中。因此當用戶移除(drop)簇中的一個表時,數(shù)據(jù)段還要為簇中的其他表保留,因此沒有數(shù)據(jù)擴展(extent)被回收。用戶可以通過清空(truncate)整個簇來回收屬于簇的數(shù)據(jù)擴展(哈希簇(hash cluster)除外)。

物化視圖的數(shù)據(jù)擴展

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

索引的數(shù)據(jù)擴展

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

臨時段中的數(shù)據(jù)擴展

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

1、當用戶執(zhí)行單一排序語句時,Oracle將在此用戶的臨時表空間中創(chuàng)建為這個排序服務(wù)的臨時段,并在執(zhí)行后將此臨時段使用的數(shù)據(jù)擴展回收。

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

回滾段的數(shù)據(jù)擴展

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。