ORA-10635: Invalid segment or tablespace type

oracle12clogo

Durante a execução de uma tentativa de desfragmentação de dados de uma tabela que continha um BLOB (um tipo de LOB), obtive o seguinte erro “ORA-10635: Invalid segment or tablespace type”. Durante a análise para verificar o erro, peguei o DDL da tabela verifiquei que possuía SECUREFILE. Sendo assim, não sendo possível o uso de SHRINK SPACE, somente efetuando um shrink no securefile LOB usando Online Redefinition (DBMS_REDEFINITION) [Doc ID 1394613.1].

É importante mencionar que o erro “ORA-10635: Invalid segment or tablespace type” também é comum quando a tabela possui a compressão habilitada (campo Compression na DBA_TABLES) ou quando o metódo de armazenamento da tablespace não é automático, não sendo ASSM.

Sendo assim, estarei postando a tentativa de execução e alguns métodos de análises para este erro:

  • Tentativa de execução da desfragmentação da tabela:
SQL> ALTER TABLE BRUNORS.TBS ENABLE ROW MOVEMENT;

Table altered.

SQL> COMMIT;

Commit complete.


SQL>  ALTER TABLE BRUNORS.TBS MODIFY LOB (TESTE1) (SHRINK SPACE);
 ALTER TABLE BRUNORS.TBS MODIFY LOB (TESTE1) (SHRINK SPACE)
*
ERROR at line 1:
ORA-10635: Invalid segment or tablespace type
  • Verificação do nome da tablespace no qual o objeto reside:
SQL> select owner, table_name, tablespace_name from dba_tables where table_name='TBS';

OWNER
--------------------------------------------------------------------------------
TABLE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
--------------------------------------------------------------------------------
BRUNORS
TBS
TABLESPACE_TBS
  • Verificação do método de armazenamento da tablespace: Note que está automático.
SQL> select TABLESPACE_NAME, segment_space_management  from dba_tablespaces where TABLESPACE_NAME='TABLESPACE_TBS';

TABLESPACE_NAME
--------------------------------------------------------------------------------
SEGMENT_SPACE_MANA
------------------
TABLESPACE_TBS
AUTO
  • Verificando se a tabela possui compressão habilitada: Repare que não.
SQL> SELECT TABLE_NAME, COLUMN_NAME,COMPRESSION,SEGMENT_NAME FROM DBA_LOBS WHERE TABLE_NAME='TBS';

TABLE_NAME
--------------------------------------------------------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
COMPRESSION
------------------
SEGMENT_NAME
--------------------------------------------------------------------------------
TBS
TEST1
NO
SYS_LOB0000093429C00008$$

Neste ponto já tinha verificado dois fatores comuns para o erro  ORA-10635, quando decidir verificar o DDL da tabela e encontrei que a mesma possuía SECUREFILE , impossibilitando a execução via SHRINK SPACE.  Com isso, para se obter o DDL de uma tabela, pode-se usar a DBMS_METADATA como  no exemplo abaixo:

  • Obtendo o DDL de uma tabela:

SQL> select dbms_metadata.get_ddl('TABLE','TBS','BRUNORS') from dual;

DBMS_METADATA.GET_DDL('TABLE','TBS','BRUNORS')
--------------------------------------------------------------------------------

CREATE TABLE "BRUNORS"."TBS"
(    "TESTID" NVARCHAR2(60) NOT NULL ENABLE,
"TESTT" NUMBER(40,0) NOT NULL ENABLE,
"TEST1" BLOB,
CONSTRAINT "PK_DBBRUNO" PRIMARY KEY ("TESTID", "TESTT")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TABLESPACE_TBS"  ENABLE) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS
1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TABLESPACE_TBS"
LOB ("TEST1") STORE AS SECUREFILE (
TABLESPACE "TABLESPACE_TBS" ENABLE STORAGE IN ROW CHUNK 8192
NOCACHE LOGGING  NOCOMPRESS  KEEP_DUPLICATES
STORAGE(INITIAL 106496 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHEDEFAULT))  ENABLE ROW MOVEMENT

E foi assim que decidir seguir outro metódo de desfragmentação de um LOB…

kindregards

Related posts

One Thought to “ORA-10635: Invalid segment or tablespace type”

  1. Anderson nunes

    E qual seria esse metodo ?

Leave a Comment