表空间与数据文件

一:表空间的含义:

    一个数据库可以包含多个表空间,一个表空间只能属于一个数据库;
    一个表空间包含多个数据文件,一个数据文件只能属于一个表空间。

    从逻辑的角度来看,一个数据库(database)下面可以分多个表空间(tablespace);一个表空间下面又可以分多个段(segment);一个数据表要占一个段(segment),一个索引也要占一个段(segment )。 一个段(segment)由多个 区间(extent)组成,那么一个区间又由一组连续的数据块(data block)组成。这连续的数据块是在逻辑上是连续的,有可能在物理磁盘上是分散。

    从物理的角度上看,一个表空间由多个数据文件组成,数据文件是实实在在存在的磁盘上的文件。这些文件是由oracle数据库操作系统的block 组成的。

    如下图所示:

表空间与数据文件

二:表空间使用情况查询:

--查看当前用户表所对应的表空间

SELECT table_name, tablespace_name FROM user_tables;

--查看表空间文件:

SELECT * FROM dba_data_files;

--查看当前表空间数据文件类型

SELECT * FROM database_properties WHERE property_name = 'DEFAULT_TBS_TYPE'

如下图所示:为BIGFILE表空间

表空间与数据文件

--表空间使用情况查询:

SELECT a.tablespace_name "表空间名",
       total "表空间大小",
       free "表空间剩余大小",
       (total - free) "表空间使用大小",
       total / (1024 * 1024 * 1024) "表空间大小(G)",
       free / (1024 * 1024 * 1024) "表空间剩余大小(G)",
       (total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",
       round((total - free) / total, 4) * 100 "使用率 %"
  FROM (SELECT tablespace_name, SUM(bytes) free
          FROM dba_free_space
         GROUP BY tablespace_name) a,
       (SELECT tablespace_name, SUM(bytes) total
          FROM dba_data_files
         GROUP BY tablespace_name) b

 WHERE a.tablespace_name = b.tablespace_name;

表空间与数据文件

--临时表空间使用情况查询:

SELECT c.tablespace_name,
       to_char(c.bytes / 1024 / 1024, '99,999.999') total_bytes,
       to_char((c.bytes - d.bytes_used) / 1024 / 1024, '99,999.999') free_bytes,
       to_char(d.bytes_used / 1024 / 1024, '99,999.999') use_bytes,
       to_char(d.bytes_used / c.bytes, '99.99') * 100 || '%' USE
  FROM (SELECT tablespace_name, SUM(bytes) bytes
          FROM dba_temp_files
         GROUP BY tablespace_name) c,
       (SELECT tablespace_name, SUM(bytes_cached) bytes_used
          FROM v$temp_extent_pool
         GROUP BY tablespace_name) d

 WHERE c.tablespace_name = d.tablespace_name;

表空间与数据文件

三:表空间新建:

    (1).bigfile tablespace和smallfile tablespace的概念

        在Oracle 10g中,推出了Bigfile tablespace的概念。表空间Tablespace从Oracle 10g以后就分为两个类型,smallfile tablespace和bigfile tablespace。过去一个表空间对应多个数据文件我们成为Smallfile Tablespace。

        所谓Bigfile Tablespace最显著的差别就是一个表空间只能对应一个数据文件。Bigfile Tablespace虽只对应一个数据文件,但数据文件对应的最大体积大大增加。传统的small datafile每个文件中最多包括4M个数据块,按照一个数据块8K的大小核算,最大文件大小为32G。每个Small Tablespace理论上能够包括1024个数据文件,这样计算理论的最大值为32TB大小。而Bigfile Datafile具有更强大的数据块block容纳能力,最多能够包括4G个数据块。同样按照数据块8K计算,Bigfile Datafile大小为32KG=32TB。理论上small tablespace和big tablespace总容量相同。

    (2).新建表空间及临时表空间

CREATE SMALLFILE TABLESPACE tbs_name DATAFILE 'dbfile_name.dbf' SIZE 20M AUTOEXTEND ON NEXT 20M MAXSIZE 20480M;

CREATE BIGFILE TABLESPACE tbs_name DATAFILE 'dbfile_name.dbf' SIZE 10G AUTOEXTEND ON;

CREATE TEMPORARY TABLESPACE temp_tbs_name TEMPFILE 'temp_dbfile_name.dbf' SIZE 1G AUTOEXTEND ON;

四:表空间的扩展

     (1).增加数据文件数量:

    alter tablespace 表空间名称 add datafile 表空间存放路径  size 表空间大小 autoextend on next 增长的大小 maxsize 空间最大值(如果不限制空间最大值就用unlimited)

例如:

    alter tablespace tbs_name add datafile 'c:\oracle\product\10.2.0\oradata\vgsm\vgsm_01.dbf' size 1024m autoextend on next 50m maxsize unlimited;

    (2).增加单个数据文件的大小:

    alter database datafile 表空间文件路径 AUTOEXTEND(自动扩展)on next 表空间满后增加的大小

例如:

   alter database datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\VGSM\VGSM' autoextend on next 200m

五:表空间的删除

    drop tablespace 表空间名称 including contents and datafiles cascade constraint;