首頁  >  文章  >  資料庫  >  什麼是oracle表空間

什麼是oracle表空間

青灯夜游
青灯夜游原創
2021-12-24 11:54:0612559瀏覽

oracle表空間是資料庫的邏輯劃分,是Oracle資料庫復原的最小單位,容納許多資料庫實體,如表、檢視、索引、叢集、回退段和臨時段等。一個Oracle資料庫能夠有一個或多個表空間,而一個表空間則對應一個或多個物理的資料庫檔案。

什麼是oracle表空間

本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。

一、概念

Oracle表空間(tablespaces)是一個邏輯的概念,真正存放資料的是資料檔案(data files)。一個Oracle資料庫能夠有一個或多個表空間,而一個表空間則對應一個或多個物理的資料庫檔案。

表格空間是Oracle資料庫復原的最小單位,容納許多資料庫實體,如表格、檢視、索引、叢集、回退段和臨時段等。

1、Oracle表空間的特性:

(1)控制資料庫資料磁碟分配;

(2)限制使用者在表空間中可以使用的磁碟空間大小;

(3)表空間具有online, offline, readonly, readwrite屬性。

2、表空間的分類:

  • #永久表空間:資料庫中要永久化儲存的一些對象,如:表、視圖、預存程序

  • 臨時表空間:資料庫操作當中中間執行的過程,執行結束後,存放的內容會被自動釋放

  • UNDO表空間:用於保存事務所修改資料的舊值,可以進行資料的回溯

#      Segment(段)是指佔用資料檔案空間的通稱,或資料庫物件使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和快取段等。

     Extent(區間/擴展),任何分配給物件(如表)的連續區塊叫區間;區間也叫擴展,因為當它用完已經分配的區間後,再有新的記錄插入就必須在分配新的區間(即擴展一些區塊);一旦區間分配給某個物件(表、索引及簇),則該區間就不能再分配給其它的物件。

什麼是oracle表空間
結構圖

什麼是oracle表空間
datafile、segment、extend關係圖

二、相關視圖

select * from dba_data_files;   --describes database files  数据文件信息
select * from dba_temp_files;   --describes all temporary files (tempfiles) in the database 临时数据文件信息
select * from dba_free_space;   --describes the free extents in all tablespaces in the database 数据库中所有表空间中的空闲扩展区
select * from dba_segments;     --describes the storage allocated for all segments in the database 数据库中的所有段分配的存储

什麼是oracle表空間

什麼是oracle表空間

什麼是oracle表空間

三、相關操作

1、建立表空間

#
--语法:
create [temporary] tablespace tablespace_name tempfile|datafile ‘xx.dbf’ size xx;
--创建临时表空间时,加上temporary关键字;

2、擴大表空間,當某個表空間被用完以後,就不能再對資料庫表進行insert操作,此時我們需要擴大表空間,即可透過增加datafile檔案來擴大表空間。

select f.* from dba_data_files f where f.tablespace_name='MLT';--查看表空间信息

alter tablespace MLT --表空间名
     add datafile '/home/oracle/oradata/crm/mlt04.dbf'  --datafile文件路径
     size 100M --表空间大小
     autoextend on --自动扩展

什麼是oracle表空間

3、修改表空間的狀態

alter tablespace tablespace_name online|offline;--表空间是脱机时不可用,默认是联机的

4、刪除表空間

drop tablespace tablespace_name[including contents];
--including contents 表示删除表空间包括datafile数据文件,不加则不删除相关数据文件;
--删除数据文件时,不能删除表空间当中第一个数据文件,如果要删除就需要删除整个表空间。

5、表格空間使用檢視

--查询表空间使用情况SELECT Upper(F.TABLESPACE_NAME)         "表空间名",
       D.TOT_GROOTTE_MB                 "表空间大小(M)",
       D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
       To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
       || '%'                           "使用比",
       F.TOTAL_BYTES                    "空闲空间(M)",
       F.MAX_BYTES                      "最大块(M)"FROM   (SELECT TABLESPACE_NAME,
               Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES,
               Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES
        FROM   SYS.DBA_FREE_SPACE
        GROUP  BY TABLESPACE_NAME) F,
       (SELECT DD.TABLESPACE_NAME,
               Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB
        FROM   SYS.DBA_DATA_FILES DD
        GROUP  BY DD.TABLESPACE_NAME) DWHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME--查询表空间的空闲扩展区select tablespace_name, count(*) AS extends,round(sum(bytes) / 1024 / 1024, 2) AS 大小/MB,sum(blocks) AS blocks from dba_free_space group BY tablespace_name;--查询表空间的总容量select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name;--查询表空间使用率SELECT total.tablespace_name,
       Round(total.MB, 2)           AS   总量/MB,
       Round(total.MB - free.MB, 2) AS  已使用/MB,
       Round(( 1 - free.MB / total.MB ) * 100, 2) || '%'                  AS  使用率FROM   (SELECT tablespace_name,
               Sum(bytes) / 1024 / 1024 AS MB
        FROM   dba_free_space
        GROUP  BY tablespace_name) free,
       (SELECT tablespace_name,
               Sum(bytes) / 1024 / 1024 AS MB
        FROM   dba_data_files
        GROUP  BY tablespace_name) totalWHERE  free.tablespace_name = total.tablespace_name;

推薦教學:《Oracle教程

以上是什麼是oracle表空間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn