Oracle 11g Release 1 (11.1) 表空間——建立和擴充套件永久表空間
轉至:https://www.cnblogs.com/liuning8023/archive/2012/07/15/2592430.html
本文內容
- 建立永久表空間
- 查看錶空間
- 擴充套件表空間
- 參考資料
一、建立永久表空間
Oracle 按照區和段空間進行管理表空間。
區管理方式 - 針對區的分配方式的不同,有兩種方式:字典管理方式(dictionary-managed tablespace,DMT)和本地管理方式(local-managed tablespace,LMT)。Oracle 10g 開始強烈建議使用 LMT 方式。從 Oracle 9i 開始,建立表空間時預設使用 LMT。
其中,LMT 區的分配方式:
- 統一(UNIFORM)- 統一分配。指定表空間中所有區的大小都相同。預設值是 1MB。
- 自動(AUTOALLOCATE 或 SYSTEM)- 自動分配。指定有 Oracle 系統來自動管理區的大小。這是預設設定。
段管理方式 – LMT 方式,除了可以指定區的分配方式外,還可以指定段的管理方式。段空間管理方式主要是指 Oracle 用來管理段中已用資料塊和空閒資料塊的機制。分為兩種:
- 手動(MANUAL)- Oracle 將使用空閒列表(free list)管理段的已用資料塊和空閒資料塊。這是傳統的段空間管理方式,為了與以前的版本相容。
- 自動(AUTO)- Oracle 將使用點陣圖(bitmap)來管理段的已用資料塊和空閒資料塊。通過點陣圖中單元的取值判斷段中的資料塊是否可用。
字典管理方式沒有段管理。
下面示例演示用本地管理方式建立表空間。這是 Oracle 推薦的方式。
示例 1:使用 AUTOALLOCATE 區分配方式。建立表空間 mytbs01,資料檔案是 D:\oracledata\mytbs01_1.dbf,大小為 2M,並指定區分配方式為 AUTOALLOCATE。
create tablespace mytbs01
datafile 'D:\oracledata\mytbs01_1.dbf' size 2M
autoallocate;
示例 2:使用 UNIFORM 區分配方式。建立表空間 mytbs02,資料檔案是 D:\oracledata\mytbs02_1.dbf 和 D:\oracledata\mytbs02_2.dbf,有兩個檔案,大小分別為 1M 和 2M,並指定區分配方式為 UNIFORM
create tablespace mytbs02
datafile 'D:\oracledata\mytbs02_1.dbf' size 1M,
'D:\oracledata\mytbs02_2.dbf' size 2M
uniform size 128k;
示例 3:使用資料檔案擴充套件方式。建立表空間 mytbs03,並指定資料檔案擴充套件方式為自動增長,每次 1M,最大擴充套件到 11M。
create tablespace mytbs03
datafile 'D:\oracledata\mytbs03_1.dbf' size 1M
autoextend on next 2M maxsize 11M;
此時,就不能再指定 UNIFORM。
示例 4:使用 AUTO 段管理方式。建立表空間 mytbs04,區分配管理方式為 UNIFORM ,大小為預設值;用 segment space management 指定段管理方式。
create tablespace mytbs04
datafile 'D:\oracledata\mytbs04_1.dbf' size 3M reuse
uniform
segment space management auto;
二、查看錶空間
可以通過下面 Oracle 系統表檢視上面建立的表空間的相關資訊。
- dba_tablespaces - 資料庫表空間管理資訊。
- dba_data_files - 資料庫表空間檔案管理資訊。
- dba_free_space - 資料庫表空間檔案使用資訊。
示例 5:表空間使用情況,包括表空間名稱、DBF 檔案個數、總大小、剩餘/佔用大小等等。
select a.tablespace_name as "表空間名稱",
c.pieces as "DBF檔案個數",
a.totalspace || 'M' as "總大小",
b.freespace || 'M' as "剩餘大小",
a.totalspace - nvl(b.freespace, 0) || 'M' as "佔用大小",
c.max_blocks as "最大塊",
c.min_blocks as "最小塊",
c.avg_blocks as "平均塊",
c.sum_blocks as "塊總數"
from (select t1.tablespace_name, sum(t1.bytes) / 1024 / 1024 as totalspace
from dba_data_files t1
group by t1.tablespace_name) a,
(select t2.tablespace_name, sum(t2.bytes) / 1024 / 1024 as freespace
from dba_free_space t2
group by t2.tablespace_name) b,
(select t.tablespace_name,
count(*) as pieces,
max(t.blocks) as max_blocks,
min(t.blocks) as min_blocks,
avg(t.blocks) as avg_blocks,
sum(t.blocks) as sum_blocks
from dba_free_space t
group by t.tablespace_name) c
where a.tablespace_name = b.tablespace_name
and b.tablespace_name = c.tablespace_name;
示例 6:表空間資訊參看,包括表空間名稱、路徑、型別、管理方式、區管理方式、段管理方式和是否自動增長。
select t1.tablespace_name as "表空間名稱",
t2.file_name as "檔名",
t1.contents as "型別",
t1.extent_management as "管理方式",
t1.allocation_type as "區管理方式",
t1.segment_space_management as "段管理方式",
t2.autoextensible as "是否自動擴充套件",
t1.status as "是否聯機"
from dba_tablespaces t1, dba_data_files t2
where t1.tablespace_name = t2.tablespace_name;
三、擴充套件表空間
表空間在物理上是由儲存在磁碟上的資料檔案組成的,例如,示例 1 建立的表空間 mybtb01,最大為 2MB。假設裡面有個表,當資料佔滿了 2MB 空間之後,如果繼續向表插入資料,Oralce 就會因為在 mytbs01 表空間上已經沒有足夠的空閒空間,而顯示錯誤資訊。
建立資料檔案時會指定大小。為了提供更大的表空間,增加資料,必須擴充套件表空間。
通常擴充套件表空間有三種方式:
- 新增資料檔案
- 改變資料檔案大小
- 允許資料檔案自動擴充套件
示例 7:新增資料檔案。為示例 1 的表空間 mytbs01 新增新的資料檔案 D:\ORACLEDATA\MYTBS01_2.DBF。
SQL> column tablespace_name format a15
SQL> column file_name format a28
SQL> column total format a5
SQL> select t.tablespace_name,
2 t.file_name,
3 t.bytes / 1024 / 1024 || 'M' as total
4 from dba_data_files t
5 where t.tablespace_name = 'MYTBS01';
TABLESPACE_NAM FILE_NAME TOTAL
-------------- ---------------------------- -----
MYTBS01 D:\ORACLEDATA\MYTBS01_1.DBF 2M
SQL> alter tablespace mytbs01
2 add datafile 'd:\oracledata\mytbs01_2.dbf' size 3M;
資料庫已更改。
SQL> select t.tablespace_name,
2 t.file_name,
3 t.bytes / 1024 / 1024 || 'M' as total
4 from dba_data_files t
5 where t.tablespace_name = 'MYTBS01';
TABLESPACE_NAM FILE_NAME TOTAL
-------------- ---------------------------- -----
MYTBS01 D:\ORACLEDATA\MYTBS01_1.DBF 2M
MYTBS01 D:\ORACLEDATA\MYTBS01_2.DBF 3M
擴充套件前先查看錶空間 mytbs01 資料檔案情況。再為表空間 mytbs01 新增新的資料檔案。
示例 8:改變資料檔案大小。在示例 7 基礎上,擴充套件表空間 mytbs01 資料檔案 D:\ORACLEDATA\MYTBS01_2.DBF 的大小。
SQL> column tablespace_name format a15
SQL> column file_name format a28
SQL> column total format a5
SQL> select t.tablespace_name,
2 t.file_name,
3 t.bytes / 1024 / 1024 || 'M' as TOTAL
4 from dba_data_files t
5 where t.tablespace_name = 'MYTBS01';
TABLESPACE_NAM FILE_NAME TOTAL
-------------- ---------------------------- -----
MYTBS01 D:\ORACLEDATA\MYTBS01_1.DBF 2M
MYTBS01 D:\ORACLEDATA\MYTBS01_2.DBF 3M
SQL> alter database
2 datafile 'd:\oracledata\mytbs01_2.dbf'
3 resize 4M;
資料庫已更改。
SQL> select t.tablespace_name,
2 t.file_name,
3 t.bytes / 1024 / 1024 || 'M' as TOTAL
4 from dba_data_files t
5 where t.tablespace_name = 'MYTBS01';
TABLESPACE_NAM FILE_NAME TOTAL
-------------- ---------------------------- -----
MYTBS01 D:\ORACLEDATA\MYTBS01_1.DBF 2M
MYTBS01 D:\ORACLEDATA\MYTBS01_2.DBF 4M
示例 9:允許資料檔案自動擴充套件。在示例 8 基礎上,修改表空間 mytbs01 資料檔案 D:\ORACLEDATA\MYTBS01_2.DBF 為自動擴充套件。
SQL> column tablespace_name format a15
SQL> column file_name format a28
SQL> column autoextensible format a15
SQL> column total format a5
SQL> column maxsize format a7
SQL> select t.tablespace_name,
2 t.file_name,
3 t.bytes / 1024 / 1024 || 'M' as TOTAL,
4 t.autoextensible,
5 t.maxbytes / 1024 / 1024 || 'M' as MAXSIZE
6 from dba_data_files t
7 where t.tablespace_name = 'MYTBS01';
TABLESPACE_NAM FILE_NAME TOTAL AUTOEXTENSIBLE MAXSIZE
-------------- ---------------------------- ----- --------------- -------
MYTBS01 D:\ORACLEDATA\MYTBS01_1.DBF 2M NO 0M
MYTBS01 D:\ORACLEDATA\MYTBS01_2.DBF 4M NO 0M
SQL> alter database
2 datafile 'd:\oracledata\mytbs01_2.dbf'
3 autoextend on next 1M maxsize 20M;
資料庫已更改。
SQL> select t.tablespace_name,
2 t.file_name,
3 t.bytes / 1024 / 1024 || 'M' as TOTAL,
4 t.autoextensible,
5 t.maxbytes / 1024 / 1024 || 'M' as MAXSIZE
6 from dba_data_files t
7 where t.tablespace_name = 'MYTBS01';
TABLESPACE_NAM FILE_NAME TOTAL AUTOEXTENSIBLE MAXSIZE
-------------- ---------------------------- ----- --------------- -------
MYTBS01 D:\ORACLEDATA\MYTBS01_1.DBF 2M NO 0M
MYTBS01 D:\ORACLEDATA\MYTBS01_2.DBF 4M YES 20M
參考資料
- CREATE TABLESPACE http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_7003.htm#SQLRF01403
- ALTER TABLESPACE http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_3002.htm#SQLRF01002
- DROP TABLESPACE http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9004.htm#SQLRF01807
搜尋
複製