【RHEL9/OL9】OPatch適用時の「Can’t locate File/Copy.pm」エラーの原因と解決方法

  • URLをコピーしました!
Oracle Error Handling
僕の作業環境
  • OS:Red Hat Enterprise Linux 9
  • 導入製品:Oracle Database 19c Enterprise Edition Release 19.3.0.0

本記事では、「OPatch適用時に”Can’t locate File/Copy.pm”が発生し、javavm_refreshが失敗する」問題の解決方法を解説します。

この記事でわかること
  • “Can’t locate File/Copy.pm”エラーの原因
  • 警告付きで適用されてしまったパッチのロールバック手順
  • 正常にパッチを適用するための環境変数の設定方法
目次

問題点

opatch applyを実行すると、以下のようなエラーが出力されました。

[oracle@learnbytebybyte 39222882]$ opatch apply
Oracle Interim Patch Installerバージョン12.2.0.1.52
Copyright (c) 2026, Oracle Corporation.  All rights reserved。

~省略~

Backing up files...
個別パッチ'39222882'をOH '/u01/app/oracle/product/19.0.0/dbhome_1'に適用中

コンポーネントoracle.javavm.server, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.javavm.server.core, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.rdbms.dbscripts, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.rdbms, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.javavm.client, 19.0.0.0.0にパッチを適用中...
makeによる"/usr/bin/make -f ins_rdbms.mk javavm_refresh ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 OPATCH_SESSION=apply"の起動に失敗しました....'Can't locate File/Copy.pm in @INC (you may need to install the File::Copy module) (@INC contains: /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /u01/app/oracle/product/19.0.0/dbhome_1/javavm/install/update_javavm_binaries.pl line 64.
BEGIN failed--compilation aborted at /u01/app/oracle/product/19.0.0/dbhome_1/javavm/install/update_javavm_binaries.pl line 64.
make: *** [ins_rdbms.mk:573: javavm_refresh] エラー 2
'

The following make actions have failed :

Re-link fails on target "javavm_refresh".


続行しますか。[y|n]
y
User Responded with: Y
Patch 39222882 successfully applied.
OPatchセッションは警告付きで完了しました。
Log file location: /u01/app/oracle/product/19.0.0/dbhome_1/cfgtoollogs/opatch/opatch2026-07-22_10-53-48午前_1.log

OPatch completed with warnings.
[oracle@learnbytebybyte 39222882]$

パッチ適用は完了しましたが、javavm_refreshの失敗によりJVMバイナリの更新が正しく行われていない状況です。

原因

エラーの原因は、RHEL9のシステム Perl(バージョン 5.32)にFile::Copyモジュールが含まれていないことでした。

OPatchのmake処理は$PATHの先頭にあるperlを呼び出します。

$PATHを明示的に設定していない場合、ORACLE_HOME 同梱のPerlではなくOSのシステム Perlが使われてしまい、update_javavm_binaries.plが必要とするFile::Copyを見つけられずにエラーになります。

makeによる"/usr/bin/make -f ins_rdbms.mk javavm_refresh ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 OPATCH_SESSION=apply"の起動に失敗しました....'Can't locate File/Copy.pm in @INC (you may need to install the File::Copy module) (@INC contains: /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /u01/app/oracle/product/19.0.0/dbhome_1/javavm/install/update_javavm_binaries.pl line 64.

ORACLE_HOME同梱のPerl($ORACLE_HOME/perl/bin/perl)は、OPatchに必要なモジュールをすべて含んでいるため、これを優先して使うよう設定することで解決できます。

解決方法

STEP

パッチをロールバック

すでにパッチ適用は「警告付きで完了」の状態なため、ロールバックする必要があります。

[oracle@learnbytebybyte 39222882]$ opatch rollback -id 39222882
Oracle Interim Patch Installerバージョン12.2.0.1.52
Copyright (c) 2026, Oracle Corporation.  All rights reserved。

~省略~

Rolling back patch 39222882...

RollbackSessionは個別パッチ'39222882'をOH '/u01/app/oracle/product/19.0.0/dbhome_1'からロールバック中

コンポーネントoracle.javavm.server, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.javavm.server.core, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.rdbms.dbscripts, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.rdbms, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.javavm.client, 19.0.0.0.0にパッチを適用中...
RollbackSessionはインベントリから個別パッチ'39222882'を削除しています
Log file location: /u01/app/oracle/product/19.0.0/dbhome_1/cfgtoollogs/opatch/opatch2026-07-22_11-01-53午前_1.log

OPatch succeeded.
STEP

ORACLE_HOMEのPerlを設定

以下の設定により、makeから呼び出されるPerlをORACLE_HOMEに同梱されているPerlに切り替えます。

export PATH=$ORACLE_HOME/perl/bin:$PATH
export PERL5LIB=$ORACLE_HOME/perl/lib
STEP

パッチを再適用

これでパッチを再度適用することで、正常に警告なしで実行されます。

[oracle@learnbytebybyte 39222882]$ opatch apply
Oracle Interim Patch Installerバージョン12.2.0.1.52
Copyright (c) 2026, Oracle Corporation.  All rights reserved。

~省略~

Backing up files...
個別パッチ'39222882'をOH '/u01/app/oracle/product/19.0.0/dbhome_1'に適用中

コンポーネントoracle.javavm.server, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.javavm.server.core, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.rdbms.dbscripts, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.rdbms, 19.0.0.0.0にパッチを適用中...

コンポーネントoracle.javavm.client, 19.0.0.0.0にパッチを適用中...
Patch 39222882 successfully applied.
Log file location: /u01/app/oracle/product/19.0.0/dbhome_1/cfgtoollogs/opatch/opatch2026-07-22_11-07-05午前_1.log

OPatch succeeded.

oracleユーザの.bash_profileにPATHとPERL5LIB環境変数を追記しておくと便利ですが、システム全体のPerl動作に影響あるためパッチ適用時のみ手動で設定することを推奨します。

まとめ

「OPatch適用時に Can’t locate File/Copy.pm が発生し、javavm_refresh が失敗する」が発生する場合は、以下の手順で解決できます。

  • opatch rollback -id <パッチ番号>でパッチをロールバック
  • export PATH=$ORACLE_HOME/perl/bin:$PATHとexport PERL5LIB=$ORACLE_HOME/perl/libで ORACLE_HOMEのPerlを優先
  • opatch applyでパッチを再適用

RHEL9 / OL9はOS標準のPerlにモジュールが不足しているケースがあります。

OJVMパッチ適用前にこの環境変数を設定する習慣をつけておくと、同様のエラーを未然に防ぐことができます。

最後までご愛読ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次