1. 程式人生 > 其它 >Oracle 11g Release 1 (11.1) 表空間——建立和擴充套件永久表空間

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

 

參考資料

 


 








搜尋

複製