Oracle表空间和数据文件管理
表空间和数据文件
1.表空间介绍
1). 表空间与数据文件的关系
在Oracle数据库中,表空间与数据文件之间的关系非常密切,这二者相互依存,也就是说,创建表空间时必须创建数据文件,增加表空间时也必须指定表空间;
Oracle磁盘空间管理中的最高逻辑层是表空间(TABLESPACE),它的下一层是段(SEGMENT),一个段只能存在于一个表空间内。段的下一层是盘区,一个段可以有多个盘区,每个盘区只能存在于一个数据文件中。如果一个段跨越多个数据文件,在此段下每个数据文件的盘区互相独立。盘区的下一层是数据块,数据块是磁盘空间管理中逻辑划分的最底层。一组数据块组成一个盘区。
数据库、表空间、数据文件、段、盘区、数据块及操作系统质检的关系
2). 表空间
表空间信息存放于DBA_DATA_FILES数据字典中。
--查询表空间信息语句
select tablespace_name,file_name,bytes from DBA_DATA_FILES
Oracle 11g默认的表空间有六个:
表空间 | 说明 |
EXAMPLE | 如果安装时选择"实例方案",则此表空间存放各样例的数据 |
SYSTEM | 存放数据字典,包括表、视图、存储过程的定义等 |
SYSAUX | SYSTEM表空间的辅助空间。主要用于存储除数据字典外的其他的数据对象,这样可以减少SYSTEM表空间的负荷 |
TEMP | 存放SQL语句处理的表和索引的信息,比如数据排序就占用此空间 |
UNDOTBLS1 | 存放撤销数据的表空间 |
USERS | 通常用于存放应用系统所使用的数据对象 |
2.创建表空间
为了简化表空间的管理并提高系统性能,Oracle建议将不同类别的数据存放于不同的表空间中,因此创建数据库后管理员还需要根据具体情况创建不同类型的表空间;表空间创建后可以增加大小,Oracle表空间数据文件最大为32G,如需更大的表空间,为这个表空间创建其他的数据文件即可。
表空间创建及修改语句:
--创建TEST表空间,数据文件为TEST01.dbf,存放在C:\tablespace路径下,大小为2048M
create tableSpace TEST datafile 'C:\tablespace\TEST01.dbf' SIZE 2048M;
--为表空间增加数据文件TEST02.dbf,大小为2G:
alter tablespace HDAPP add datafile ' C:\tablespace\TEST02.dbf ' size 2048M;
--增加表空间原有数据文件尺寸,修改为4096M
alter database datafile 'C:\tablespace\TEST01.dbf ' resize 4096M;
--修改TEST01.dbf数据文件的大小为自动增长,每次增长1024M,最大可增长至20G;
ALTER DATABASE DATAFILE ' C:\tablespace\TEST01.dbf ' AUTOEXTEND ON NEXT 1024M MAXSIZE 20480M;
表空间自动扩展属性可以查询并关闭
--查询是否是自动扩展:
select file_name,autoextensible,increment_by from dba_data_files ;
--关闭扩展:
alter database datafile/TEMPFILE ' C:\tablespace\TEST02.dbf ' autoextend off;
删除表空间语句:
--删除表空间:
DROP TABLESPACE TEST INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
表空间查询相关语句
--表空间大小查询:
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 表空间名,c.file_name 物理文件地址,SUM(bytes)/1024/1024/1024 "表空间大小(G)"
from dba_data_files c
group by c.tablespace_name,c.file_name
order by c.tablespace_name,c.file_name ;