Criação de Oracle 12.1.0.2 CDB - catcdb.sql retornando ORA-22288 ou ORA-29548

This post is also available in: English

Estes dias estava tentando criar um CDB no Oracle Database 12.1.0.2 usando apenas o sqlplus em um Oracle Linux 6.5 64 bits.

Então após executar o comando CREATE DATABASE, foi a hora de criar todo o dicionário de dados:

$ sqlplus / as sysdba @?/rdbms/admin/catcdb.sql

No entanto, alguuma coisa errada estava acontecendo pois ambos o Oracle Java e o Oracle Multimedia estavam tendo os seus scripts de criação de catálogo abortados e seus status ficaram INVALID na cdb_registry após a execução do catcdb.sql:

catcon: ALL catcon-related output will be written to initjvm_catcon_11063.lst
catcon: See initjvm*.log files for output generated by scripts
catcon: See initjvm_*.lst files for spool files, if any
A process terminated prior to completion.
    Review the initjvm*.log files to identify the failure
Died at /u01/app/oracle/product/12.1.0/dbhome_1/rdbms/admin/catcon.pm line 6149.
catcon: ALL catcon-related output will be written to catim_catcon_11536.lst
catcon: See catim*.log files for output generated by scripts
catcon: See catim_*.lst files for spool files, if any
A process terminated prior to completion.
    Review the catim*.log files to identify the failure
Died at /u01/app/oracle/product/12.1.0/dbhome_1/rdbms/admin/catcon.pm line 6149.

Verificando o erro no arquivo catim0.log (Oracle Multimedia), ele estava falhando pois o Oracle Java não estava sendo instalado corretamente. Então verificando a causa do java erro no arquivo initvm0.log, o erro era "ORA-22288: file or LOB operation FILEOPEN failed":

create or replace java system
begin if initjvmaux.startstep('CREATE_JAVA_SYSTEM') then
*
ERROR at line 1:
ORA-22288: file or LOB operation FILEOPEN failed
No such file or directory
ORA-06512: at "SYS.INITJVMAUX", line 28
ORA-06512: at line 5

Após realizar algumas pesquisas, encontrei um post chinês referenciando o Doc ID 143773.1 com um problema similar e cuja a solução para o problema era criar um arquivo java classes.bin no $ORACLE_HOME/javavm/admin.

[oracle@localhost ~]$ cd $ORACLE_HOME/javavm/admin
[oracle@localhost admin]$ ls
jdk.versions libjtcjt.so
[oracle@localhost admin]$ ln -s ../jdk/jdk6/admin/classes.bin .
[oracle@localhost admin]$ ls -la
total 220
drwxr-xr-x. 2 oracle oinstall   4096 May 24 10:42 .
drwxr-xr-x. 8 oracle oinstall   4096 May 19 15:41 ..
lrwxrwxrwx. 1 oracle oinstall     29 May 23 14:42 classes.bin -> ../jdk/jdk6/admin/classes.bin
-rw-r--r--. 1 oracle oinstall    723 Jul 14  2011 jdk.versions
-rw-r--r--. 1 oracle oinstall 211789 Jun 30  2014 libjtcjt.so

Depois de criar o arquivo, executei o catcdb.sql em um novo container vazio e o problema ocorreu novamente, porém o problema mudou para "ORA-29548: Java system class reported: release of classes.bin in the database". Algo relacionado à versão do Java:

create or replace java system
begin if initjvmaux.startstep('CREATE_JAVA_SYSTEM') then
*
ERROR at line 1:
ORA-29548: Java system class reported: release of classes.bin in the database
does not match that of the oracle executable
ORA-06512: at "SYS.INITJVMAUX", line 28
ORA-06512: at line 5

O que de fato ocorreu é que infelizmente linkei o arquivo classes.bin do jdk6, porém a minha base de dados estava usando o jdk7 nas bibliotecas de seus binários. Tive então que linkar novamente o arquivo mas apontando ao arquivo classes.bin correto:

[oracle@localhost admin]$ rm classes.bin
[oracle@localhost admin]$ ln -s ../jdk/jdk7/admin/classes.bin .
[oracle@localhost admin]$ ls -la
total 220
drwxr-xr-x. 2 oracle oinstall   4096 May 24 10:42 .
drwxr-xr-x. 8 oracle oinstall   4096 May 19 15:41 ..
lrwxrwxrwx. 1 oracle oinstall     29 May 24 10:42 classes.bin -> ../jdk/jdk7/admin/classes.bin
-rw-r--r--. 1 oracle oinstall    723 Jul 14  2011 jdk.versions
-rw-r--r--. 1 oracle oinstall 211789 Jun 30  2014 libjtcjt.so

Voilà! Após chamar o catcdb.sql mais uma vez em um container recém-criado, finalmente rodou sem problemas e ao final recebi o status VALID para todos as entradas de registro na cdb_registry.

Gostou? Não deixe de comentar ou deixar um 👍!

Deixe um comentário

Seu e-mail não será publicado.