#存储空间回收
在分布式部署中,DBA可适时通过视图了解表空间集的空间使用情况,并根据实际场景参考以下方法按需回收空间。
示例(分布式部署)
SELECT name,SUM(DATAFILES_MAX_SIZE),SUM(DATAFILES_SIZE),SUM(DATAFILES_FREE_BLOCKS),SUM(DATABUCKETS_SIZE)
FROM GV$TABLESPACE_SET GROUP BY name;
# 场景1. 收缩数据文件
若某个表空间集的数据文件存在大量空闲的数据块,可以按需收缩该表空间集。
示例(分布式部署)
ALTER TABLESPACE SET users SHRINK space;
# 场景2. 收缩稳态数据文件
若某个表空间集中LSC表的稳态数据文件占用了较大空间,可以通过GV$LSC_SLICE_STAT视图获取每个LSC表存储在slice中的行数信息,并与表的实际行数进行比较。
当表的实际行数远小于稳态数据中存储行数时,可以按需对该表的稳态数据进行梳理,梳理方式包括:
指定compact关键字,合并稳态数据。
指定clean关键字,清理转换任务执行完成后达到延期清理条件的数据。
示例(分布式LSC表)
-- 查询每个LSC表存储在slice中的行数信息
SELECT OBJECT_NAME,SUM(ROW_COUNT) row_num
FROM DBA_OBJECTS, GV$LSC_SLICE_STAT
WHERE OBJECT_ID = BO
GROUP BY OBJECT_NAME
ORDER BY row_num DESC;
OBJECT_NAME ROW_NUM
---------------------------------------------------------------- -----------
BRANCHES
DEPARTMENT
EMPLOYEES
FINANCE_INFO
NUMBERS
NUMBERS_NOBIT
PRODUCT
AREA
BRANCHES1 20
AREA1 10
-- 查询AREA1表的实际行数
SELECT COUNT(*) FROM AREA1;
COUNT(*)
---------------------
5
-- 合并AREA1表的稳态数据
ALTER TABLE AREA1 ALTER SLICE ALL compact;
-- 查询BRANCHES1表的实际行数
SELECT COUNT(*) FROM BRANCHES1;
COUNT(*)
---------------------
12
-- 清理BRANCHES1表中符合条件的数据
ALTER TABLE AREA1 ALTER SLICE ALL clean;