Outra das novas funcionalidades disponibilizada no Oracle 23ai é a capacidade de renomear segmentos LOB diretamente. Até então, não era possível renomear os segmentos de LOBs (Large Objects) como BLOB, CLOB, NCLOB ou BFILE sem recriar a tabela ou mover os dados. Essa limitação dificultava a padronização e o gerenciamento de objetos LOB, especialmente em ambientes corporativos com normas rígidas de nomenclatura e versionamento.
O que são Lob Segments?
Os LOB Segments armazenam dados grandes, como documentos, imagens, ou grandes cadeias de texto. Em uma tabela, quando você define uma coluna do tipo BLOB ou CLOB, o Oracle cria automaticamente um segmento LOB separado para armazenar os dados — geralmente com um nome gerado internamente, como: SYS_LOB0000001529C00010$$.
Essa nomenclatura automática, dificulta para entender a origem de um segmento, principalmente em ambientes com muitos objetos e que utilizam algum tipo de padronização.
🆕 Novidade no Oracle 23ai
Com o Oracle 23ai, agora é possível renomear esses segmentos LOB diretamente com o comando SQL:
ALTER TABLE RENAME LOB (<column_name>) <oldsegment_name> to <newsegment_name>;
SQL> CREATE TABLE documentos ( id NUMBER, arquivo BLOB ) LOB (arquivo) STORE AS lob_segmento_antigo; 2 3 4 Table created. SQL> SELECT SEGMENT_NAME FROM DBA_LOBS WHERE TABLE_NAME='DOCUMENTOS'; SEGMENT_NAME -------------------------------------------------------------------------------- LOB_SEGMENTO_ANTIGO SQL> ALTER TABLE documentos RENAME LOB(arquivo) LOB_SEGMENTO_ANTIGO to RENAME_LOB_SEGMENTO_ANTIGO; Table altered. SQL> SELECT SEGMENT_NAME FROM DBA_LOBS WHERE TABLE_NAME='DOCUMENTOS'; SEGMENT_NAME -------------------------------------------------------------------------------- RENAME_LOB_SEGMENTO_ANTIGO SQL>
Erro ao tentar renomear em versões anteriores ao 23ai.
Connected to: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Version 19.21.0.0.0 SQL>
SQL>SQL> SQL> CREATE TABLE documentos ( id NUMBER, arquivo BLOB ) LOB (arquivo) STORE AS lob_segmento_antigo; 2 3 4 Table created. SQL> SELECT SEGMENT_NAME FROM DBA_LOBS WHERE TABLE_NAME='DOCUMENTOS'; SEGMENT_NAME -------------------------------------------------------------------------------- LOB_SEGMENTO_ANTIGO SQL> ALTER TABLE documentos RENAME LOB(arquivo) LOB_SEGMENTO_ANTIGO to RENAME_LOB_SEGMENTO_ANTIGO; ALTER TABLE documentos RENAME LOB(arquivo) LOB_SEGMENTO_ANTIGO to RENAME_LOB_SEGMENTO_ANTIGO * ERROR at line 1: ORA-14155: missing PARTITION, PARTITIONS, SUBPARTITION, or SUBPARTITIONS keyword SQL>
Comentários
Postar um comentário