Oracle

Oracle 19c 無法收縮 blob 列

  • June 2, 2021

我從模式中刪除了一堆舊數據,包括 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 SPACESecurefile LOB 不支持該選項。

您可以使用DBMS_REDEFINITION(主要是線上)或ALTER TABLE ... MOVE LOB (...) (離線,表格在移動過程中被鎖定)。

ORA-10635: 嘗試收縮 SOA-INFRA LOB 時出現無效的段或表空間類型錯誤$$ To Free Tablespace $$(文件 ID 2382484.1)

引用自:https://dba.stackexchange.com/questions/292643