表空间(Tablespace)是Oracle数据库中最大的逻辑存储单位,用于存储数据库对象(如表、索引等)。一个数据库通常包含多个表空间,每个表空间由一个或多个数据文件组成。
存储永久性数据库对象,如表、索引等。
用于存储临时数据,如排序操作产生的中间结果。
存储撤销信息,用于事务回滚和读一致性。
单个大数据文件(最大可达32TB或128TB)的表空间。
传统表空间,可包含多个数据文件(每个最大32GB)。
-- 创建永久表空间
CREATE TABLESPACE users01
DATAFILE '/u01/oracle/data/users01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
-- 创建临时表空间
CREATE TEMPORARY TABLESPACE temp01
TEMPFILE '/u01/oracle/data/temp01.dbf' SIZE 50M
AUTOEXTEND ON;
-- 添加数据文件
ALTER TABLESPACE users01
ADD DATAFILE '/u01/oracle/data/users02.dbf' SIZE 200M;
-- 重设大小
ALTER DATABASE DATAFILE '/u01/oracle/data/users01.dbf' RESIZE 500M;
-- 设置为只读
ALTER TABLESPACE users01 READ ONLY;
DROP TABLESPACE users01 INCLUDING CONTENTS AND DATAFILES;
-- 查看所有表空间
SELECT tablespace_name, status, contents FROM dba_tablespaces;
-- 查看表空间使用情况
SELECT a.tablespace_name,
a.bytes/1024/1024 "Total MB",
(a.bytes-b.bytes)/1024/1024 "Used MB",
b.bytes/1024/1024 "Free MB",
round(((a.bytes-b.bytes)/a.bytes)*100,2) "Percent Used"
FROM (SELECT tablespace_name, sum(bytes) bytes
FROM dba_data_files GROUP BY tablespace_name) a,
(SELECT tablespace_name, sum(bytes) bytes
FROM dba_free_space GROUP BY tablespace_name) b
WHERE a.tablespace_name=b.tablespace_name;
每个用户都有一个默认表空间和临时表空间:
-- 创建用户时指定表空间
CREATE USER scott IDENTIFIED BY tiger
DEFAULT TABLESPACE users01
TEMPORARY TABLESPACE temp01
QUOTA UNLIMITED ON users01;
-- 修改用户默认表空间
ALTER USER scott DEFAULT TABLESPACE users02;