我从模式中删除了一堆旧数据,包括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注意:这是一个测试DB,在prod中,这是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$';有关详情:
表空间详细信息:
SELECT
*
FROM
dba_tablespaces
WHERE
tablespace_name = 'MY_DATA';有关详情:
精确的Oracle版本:
Oracle数据库19c企业版版19.0.0.0.0 -生产
据我所知,一切都是应该的,所以我不知道缺少了什么。
发布于 2021-06-02 08:19:21
Securefile不支持SHRINK SPACE选项。
您可以使用DBMS_REDEFINITION (大部分是联机的)或ALTER TABLE ... MOVE LOB (...) (脱机,表在移动期间被锁定)。
https://dba.stackexchange.com/questions/292643
复制相似问题