#存储空间回收

在分布式部署中,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;

pdf-btn 下载文档
copy-btn 复制链接