1. 程式人生 > 其它 >Oracle 11g Release 1 (11.1) 表空間——簡單管理永久表空間

Oracle 11g Release 1 (11.1) 表空間——簡單管理永久表空間

轉至:https://www.cnblogs.com/liuning8023/archive/2012/07/14/2591644.html

本文內容

  • 建立表空間
  • 查看錶空間
  • 修改表空間可用性/可讀寫性
  • 刪除表空間
  • Toad 建立表空間
  • 參考資料
  • 修改記錄

假設資料庫為 Oracle 11g,在 SQL *PLUS 下,用 SYS 使用者登入。本文演示建立(永久)表空間,之後,查看錶空間資訊,再修改表空間的配置,最後,刪除表空間。

建立表空間

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)來管理段的已用資料塊和空閒資料塊。通過點陣圖中單元的取值判斷段中的資料塊是否可用。

字典管理方式不存在段管理。

下面示例演示用本地管理方式建立表空間。

示例 1:使用 AUTOALLOCATE 區分配方式建立表空間 mytbs01,資料檔案是 D:\oracledata\mytbs01_1.dbf,大小為 2M。

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。

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;


一個較完整的建立表空間的語句如下所示:

CREATE TABLESPACE mytbs DATAFILE 
  'mytbs01' SIZE 10M AUTOEXTEND ON NEXT 5120M MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

查看錶空間

可以通過下面 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

 

 

修改表空間可用性/可讀寫性


示例 7:修改表空間可用性——聯機/離線。

SQL> alter tablespace mytbs01 offline;
表空間已更改。
SQL> alter tablespace mytbs01 online;
表空間已更改。
SQL>

表空間是否聯機,表明了表空間是否可用。

讓表空間離線,是為了提高資料檔案的 I/O 效能,可能需要移動特定表空間的資料檔案。為了確保表空間中資料檔案的一致性,在移動資料檔案之前,需要將該表空間修改為離線狀態,以防止其中的資料檔案被修改。

完成對錶空間的維護操作後,應該立即將表空間轉變為 ONLINE 狀態,以便該表空間可以被訪問。

 

示例 8:修改表空間可讀寫性——只讀/讀寫。

SQL> alter tablespace mytbs01 read only;
表空間已更改。
SQL> alter tablespace mytbs01 read write;
表空間已更改。
SQL>
如果表空間只用於存放靜態資料,或是要將表空間移動到其他資料庫,就應該先將表空間修改為只讀狀態。


刪除表空間


示例 9:刪除表空間,並刪除所有相關的作業系統的資料檔案。

SQL> CREATE TABLESPACE mytbs05
  2  DATAFILE 'd:\oracledata\mytbs05_1.dbf' size 1M REUSE
  3  AUTOALLOCATE;
表空間已建立。
SQL> ALTER TABLESPACE mytbs05 offline;
表空間已更改。
SQL> DROP TABLESPACE mytbs05 INCLUDING CONTENTS AND DATAFILES;
表空間已刪除。
SQL>

若表空間非空,則必須加 INCLUDING 子句。INCLUDING CONTENTS AND DATAFILES 表明刪除表空間的內容和資料檔案。也可以是 INCLUDING CONTENTS AND DATAFILES cascade constraints 表明除了刪除表空間的內容和資料檔案外,還要刪除其約束。

 

Toad 建立表空間


以上是關於表空間最簡單的操作。當使用 Toad 建立表空間時,會直觀地看到表空間基本資訊和資料檔案的相關選項。如圖所示。

圖 1 Toad 表空間基本資訊相關選項

 

圖 2 Toad 表空間資料檔案相關選項

 

 

參考資料








 

搜尋

複製