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 👍!