作為一名DBA,常見的一個情境之一:
建立資料表空間:
create tablespace Think
datafile '/u01/app/Oracle/oradata/orcl/think.dbf' size 100M
autoextend on next 10M maxsize 4096M
extent management local uniform size 256K
segment space management auto;
建立使用者:
create user bin
default tablespace Think
temporary tablespace temp;
授予許可權:
grant connect,resource to bin;
revoke unlimited tablespace from bin;
alter user bin quota unlimited on Think;
在這個情境中,有兩條語句:
① extent management local uniform size 256K
② segment space management auto
其中,前者是區管理;後者則是段空間管理
㈠ 區管理
區管理實際上就是資料表空間的管理
8i以前,是字典管理資料表空間,當建立或刪除對象時,Oracle的空間分配或回收是通過資料字典來記錄和管理
在高並發系統中,這會導致效能衰減、空間片段等難題
這已經是門過去的技術,這裡就不贅述了。
8i開始,Oracle引入本地資料表空間管理
在每個資料表空間的資料檔案的頭部加入了一個位元影像地區
一個段的第一個區的第一個塊是first level bitmap block
第二個塊是second level bitmap block
第三個塊才是段頭塊
這兩個塊是用來管理free block
文法:
extent management local { autoallocate | uniform size n K/M}
是自動分配還是統一尺寸
若為自動分配,則Oracle會按照遞增演算法來分配空間
如果選擇統一尺寸,還可以詳細指定每個區間的大小
dba_extents這個視圖可以看到哪些對象分配了多少區間