This post is also available in: English
Esses dias, quando tentei executar um "opatch auto" em um servidor Enterprise Linux 7 para atualizar automaticamente a minha GI Home e todas Database Homes, recebi o erro:
[root@localhost 20834621]# opatch auto ./20485808 -ocmrf /tmp/ocm.rsp Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /u01/app/11.2.4/grid/OPatch/crs/auto_patch.pl line 2730. BEGIN failed--compilation aborted at /u01/app/11.2.4/grid/OPatch/crs/auto_patch.pl line 2730.
O problema era que a lib "Switch.pm" não estava presente. Verificando no MOS, encontrei o Doc ID 1915430.1 (Opatch Auto fails with: Can't locate Switch.pm) dizendo que no Perl 5.10 ou maior, "the Switch module has been is deprecated" (esse módulo está deprecado) e dando como workaround para baixar e instalar o Switch.pm do www.cpan.org e depois tentar novamente executar o "opatch auto".
No entanto, eu fiz algo muito mais simples que funcionou.
Primeiro, procurei por este arquivo no meu servidor:
[root@localhost ~]# find / -name Switch.pm /u01/app/oracle/product/11.2.4/dbhome_1/perl/lib/5.10.0/CGI/Switch.pm /u01/app/oracle/product/11.2.4/dbhome_1/perl/lib/5.10.0/Switch.pm /u01/app/11.2.4/grid/perl/lib/5.10.0/CGI/Switch.pm /u01/app/11.2.4/grid/perl/lib/5.10.0/Switch.pm
Por fim, copiei copiei um deles para a minha pasta de lib do perl:
[root@localhost ~]# cp -p $ORACLE_HOME/perl/lib/5.10.0/Switch.pm /usr/lib64/perl5/vendor_perl/
Após reexecutar "opatch auto", tudo funcionou bem.
Gostou? Não deixe de comentar ou deixar um 👍!