O erro ORA-22297: warning: Open LOBs exist at transaction commit time ocorre quando o usuário faz alguma manipulações colunas do tipo CLOB ou BLOB e por algum motivo não fechou o LOB conforme deveria antes de fazer o commit.
Abaixo segue um exemplo simples que poderia ter evitado o problema:
[code lang="sql"] DBMS_LOB.CLOSE(myFile); DBMS_LOB.CLOSE(myBlob); COMMIT;
Para solucionar o problema precisei fazer um rebuild no CLOB e na PK da tabela em questão. O primeiro passo foi listar os índices da tabela:
[code lang="SQL"] desc DBUSER.TB_CLOB select * from dba_indexes where table_name = 'TB_CLOB' and owner='DBCLOB';
Após verificar os índices, fiz o move no CLOB e o rebuild na PK:
[code lang="sql"] ALTER TABLE DBUSER.TB_CLOB MOVE LOB (CLOB_ARQUIVO) STORE AS (TABLESPACE TD_USER); alter index DBUSER.PK_CLOB rebuild;
Após realizar esse procedimento conseguimos executar o processo sem retornar o erro:
ORA-22297: warning: Open LOBs exist at transaction commit time
Em alguns blogs e sites de referência, a maioria das pessoas disseram que essa mensagem é apenas informativa, porém só consegui rodar o processo após o reubild no CLOB e na PK da tabela.
Fica a dica.