我从模式中删除了一堆旧数据,包括 BLOB 数据,然后我尝试缩小和压缩所有内容。我设法缩小了所有表(启用行移动,缩小空间紧凑,禁用行移动),除了一个 BLOB 列,它存储在一个单独的段上:
SELECT
segment_name,
SUM(bytes) / 1024 / 1024 / 1024 AS "GB_SIZE"
FROM
dba_segments
WHERE
owner = 'MY_OWNER'
GROUP BY
segment_name
ORDER BY
SUM(bytes) / 1024 / 1024 / 1024 DESC;
有问题的部分:
SEGMENT_NAME GB_SIZE
SYS_LOB0000072887C00005$$ 0,35955810546875
注意:这是一个测试数据库,在产品数据库中,大约是 660 GB。
当我尝试缩小它时,我收到此错误:
ALTER TABLE my_table MODIFY LOB ( my_blob ) ( SHRINK SPACE );
Error starting at line : 1 in command -
alter table my_table modify lob (my_blob) (shrink space)
Error report -
ORA-10635: Invalid segment or tablespace type
10635. 00000 - "Invalid segment or tablespace type"
*Cause: Cannot shrink the segment because it is not in auto segment space
managed tablespace or it is not a data, index or lob segment.
*Action: Check the tablespace and segment type and reissue the statement
细分详情:
SELECT
*
FROM
dba_segments
WHERE
segment_name = 'SYS_LOB0000072887C00005$$';
相关细节:
- 段类型:LOBSEGMENT
- 段子类型:SECUREFILE
- 表空间名称:MY_DATA
表空间详细信息:
SELECT
*
FROM
dba_tablespaces
WHERE
tablespace_name = 'MY_DATA';
相关细节:
- 范围管理:本地
- 分配类型:SYSTEM
- 段空间管理:AUTO
确切的 Oracle 版本:
Oracle Database 19c 企业版 19.0.0.0.0 版 - 生产
据我所知,一切都是应有的,所以我不确定缺少什么。
SHRINK SPACE
Securefile LOB 不支持该选项。您可以使用
DBMS_REDEFINITION
(主要是在线)或ALTER TABLE ... MOVE LOB (...)
(离线,表格在移动过程中被锁定)。ORA-10635:尝试收缩 SOA-INFRA LOB [释放表空间] 时出现无效的段或表空间类型错误(文档 ID 2382484.1)