表空间与数据文件
一:表空间的含义:
一个数据库可以包含多个表空间,一个表空间只能属于一个数据库;
一个表空间包含多个数据文件,一个数据文件只能属于一个表空间。
从逻辑的角度来看,一个数据库(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表空间
--表空间使用情况查询:
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;