一、简单概述
在 DM 数据库中,表空间由一个或者多个数据文件组成。DM 数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。
在创建 DM 数据库时,会自动创建 5 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN 表空间、TEMP 表空间和 HMAIN 表空间。
SYSTEM 表空间存放了有关 DM 数据库的字典信息,用户不能在 SYSTEM 表空间创建表和索引。
ROLL 表空间完全由 DM 数据库自动维护,用户无需干预。该表空间用来存放事务运行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。
MAIN 表空间在初始化库的时候,就会自动创建一个大小为 128M 的数据文件MAIN.DBF。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。
TEMP 表空间完全由 DM 数据库自动维护。当用户的 SQL 语句需要磁盘空间来完成某个操作时,DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中完成的排序操作、SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP 表空间。
HMAIN 表空间属于 HTS 表空间,完全由 DM 数据库自动维护,用户无需干涉。当用户在创建 HUGE 表时,未指定 HTS 表空间的情况下,充当默认 HTS 表空间。
每一个用户都有一个默认的表空间。对于 SYS、SYSSSO、SYSAUDITOR 系统用户,默认的用户表空间是 SYSTEM,SYSDBA 的默认表空间为 MAIN,新创建的用户如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。如果用户在创建表的时候,指定了存储表空间 A,并且和当前用户的默认表空间 B 不一致时,表存储在用户指定的表空间 A 中,并且默认情况下,在这张表上面建立的索引也将存储在 A 中,但是用户的默认表空间是不变的,仍为 B。
一般情况下,建议用户自己创建一个表空间来存放业务数据,或者将数据存放在默认的用户表空间 MAIN 中。
二、相关SQL
(1)创建表空间
数据文件的最小值不能低于页大小的 4096 倍,最大值是页大小乘以 2 的 31 次方-1(如果页大小为 8K,最大值为 16T)
数据库页大小 | 每个字符类型字段实际最大长度(字节) | 每行记录最大字段外其他字段总长度(字节) | 表空间单个数据文件最小 (MB)/最大 (MB) |
4 KB | 1938 | 2047 | 16/8388608 |
8 KB | 3878 | 4095 | 32/16777216 |
16 KB | 8000 | 8195 | 64/33554432 |
32 KB | 8188 | 16176 | 128/67108864 |
CREATE TABLESPACE "TBS" DATAFILE '/dmdata/PROD/TBS01.DBF' SIZE 32 AUTOEXTEND ON NEXT 1 MAXSIZE 1024;
(2)修改表空间文件大小
ALTER TABLESPACE "TBS" RESIZE DATAFILE '/dmdata/PROD/TBS01.DBF' TO 64;
(3)添加数据文件
ALTER TABLESPACE "TBS" ADD DATAFILE '/dmdata/PROD/TBS02.DBF' SIZE 64 AUTOEXTEND ON NEXT 1 MAXSIZE 1024;
(4)修改数据文件扩展尺寸
ALTER TABLESPACE "TBS" DATAFILE '/dmdata/PROD/TBS01.DBF' AUTOEXTEND ON NEXT 3 MAXSIZE 1024;
--相关系统视图字段:DBA_DATA_FILES.INCREMENT_BY
(5)数据文件的迁移
ALTER TABLESPACE "TBS" OFFLINE;
ALTER TABLESPACE "TBS" RENAME DATAFILE '/dmdata/PROD/TBS01.DBF' TO '/dmdata/TBS01.DBF';
ALTER TABLESPACE "TBS" RENAME DATAFILE '/dmdata/PROD/TBS02.DBF' TO '/dmdata/TBS02.DBF';
(6)查询表空间使用率
--MB
SELECT
NAME,
(TOTAL_SIZE * PAGE) / 1024 / 1024 "表空间大小(MB)",
(USED_SIZE * PAGE) / 1024 / 1024 "表空间使用大小(MB)",
((TOTAL_SIZE - USED_SIZE) * PAGE) / 1024 / 1024 "表空间剩余大小(MB)",
ROUND(USED_SIZE / TOTAL_SIZE, 4) * 100 "使用率(%)"
FROM
V$TABLESPACE;
----------------------------------------------------------------------------
--GB
SELECT
NAME,
(TOTAL_SIZE * PAGE) / 1024 / 1024 / 1024 "表空间大小(GB)",
(USED_SIZE * PAGE) / 1024 / 1024 / 1024 "表空间使用大小(GB)",
((TOTAL_SIZE - USED_SIZE) * PAGE) / 1024 / 1024 / 1024 "表空间剩余大小(GB)",
ROUND(USED_SIZE / TOTAL_SIZE, 4) * 100 "使用率(%)"
FROM
V$TABLESPACE;
(7)批量关闭表空间文件自动扩展
结果集生成SQL
SELECT 'ALTER TABLESPACE ' ||TABLESPACE_NAME|| ' DATAFILE ''' ||FILE_NAME|| ''''||' AUTOEXTEND OFF;' AS SQL
FROM DBA_DATA_FILES ORDER BY TABLESPACE_NAME, FILE_NAME;
执行结果集SQL,例如:
ALTER TABLESPACE TBS1 DATAFILE '/dmdata/5236/DMDB/TBS101.DBF' AUTOEXTEND OFF;
ALTER TABLESPACE TBS2 DATAFILE '/dmdata/5236/DMDB/TBS201.DBF' AUTOEXTEND OFF;
ALTER TABLESPACE IDX_TBS1 DATAFILE '/dmdata/5236/DMDB/IDX_TBS101.DBF' AUTOEXTEND OFF;
ALTER TABLESPACE IDX_TBS2 DATAFILE '/dmdata/5236/DMDB/IDX_TBS201.DBF' AUTOEXTEND OFF;
另附
表空间相关视图
- DBA_DATA_FILES
- DBA_TABLESPACES
- DBA_FREE_SPACE