@echo off REM ###################################################################### REM # Copyright (c) 2004 Oracle Corporation. All rights reserved. REM # REM # shgangul 5/21/04 Create and support REM # -jdk, -jre, -oh REM # shgangul 6/21/04 Added support for OPATCH_DEBUG REM # shgangul 7/15/04 use jdk to invoke opatch, otherwise use jre REM # shgangul 7/16/04 Display the Java call for debug REM # phnguyen 7/19/04 Add ".\" to class path REM # shgangul 8/05/04 change opatch to oracle.opatch package REM # phnguyen 8/23/04 Support OPATCH_PLATFORM_ID REM # shgangul 8/27/04 add fallback schemes for jre/jdk REM # phnguyen 8/30/04 Print "OPatch Succeeded" if OK REM # shgangul 9/01/04 Further changes for jre/jdk priorities REM # shgangul 9/07/04 java not present in jdk/jre option, error out REM # shgangul 12/15/04 Supply PATH variable to java REM # vsriram 03/02/05 Introduce OPATCH_NO_FUSER to bypass fuser check REM # shgangul 02/02/05 Minor bug in parsing -jdk option REM # vsriram 03/08/05 Change the Opatch exit messages. REM # shgangul 03/15/05 Pass in properties to OPatch REM # shgangul 05/14/05 Add opatchprereq.jar and opatchutil.jar to CP REM # shgangul 07/18/05 Do not pass PATH env var to OPatch JVM REM # vsriram 05/10/06 Return 0 as exit code, even for warnings. REM # vsriram 06/15/06 Put OPatch/jlib/xmlparserv2.jar in classPath. REM # vsriram 06/21/06 Look for jre 1.5 and then fall back to JDK. REM # vsriram 08/01/06 Remove dependency on xmlparserv2. REM # vsriram 08/17/06 Include opatchactions.jar in classpath REM # vsriram 11/12/06 Check for JRE first, then JDK and then oraparam REM # vganesan 01/04/08 Fix Bug sbmbhcb REM # vganesan 02/27/08 Pass %BASE% (running directory of 'opatch') as a property REM # to java invocation. This is needed to locate ocm.zip in REM # OPatch. REM # vganesan 03/04/08 Add OCM's emocmutl.jar to the classpath REM # phnguyen 05/14/08 CCR_INSTALL_DEFER_COLLECT=1 REM # phnguyen 09/09/09 No support for 'opatch auto' REM # vganesan 06/23/09 Add opatchext.jar to OPatch classpath REM # vganesan 09/15/09 Return exit code with /b switch REM # akmaurya 08/19/09 FMW Checks REM # supal 09/09/09 Better messages for MW/OH consistency check REM # supal 10/31/09 No mandatory MWH/OH REM # supal 11/11/09 Pass Common Home Location to OPatch REM # vganesan 12/24/09 Remove quotes from the Oracle Home REM # vganesan 02/22/11 Remove emocmutl.jar from the final execution path REM # supal 04/06/10 Fix issue with non-FMW OH installs in MWH REM ###################################################################### setlocal REM # Set the base path set BASE=%~DP0% REM # No support for 'opatch auto' if "%1" == "auto" goto AUTOERROR REM # Get ORACLE_HOME from environment variable "ORACLE_HOME" set OH=%ORACLE_HOME% REM # Get Middleware Home from environment variable "MW_HOME" set MWH=%MW_HOME% REM # Check for OPATCH_DEBUG env variable set DEBUG=%OPATCH_DEBUG% set DEBUGVAL=false if "%DEBUG%" == "TRUE" (set DEBUGVAL=true) else if "%DEBUG%" == "true" (set DEBUGVAL=true) REM # Set CCR_INSTALL_DEFER_COLLECT=1 set CCR_INSTALL_DEFER_COLLECT=1 REM # Look for OPATCH_PLATFORM_ID set PLATFORM=%OPATCH_PLATFORM_ID% REM # Look for ORACLE_OCM_SERVICE set OCM_SERVICE= if NOT "%ORACLE_OCM_SERVICE%" == "" set OCM_SERVICE=-Docm.endpoint=%ORACLE_OCM_SERVICE% REM # Preserve the PATH environment variable set PATHENV=%PATH% REM # If -oh is specified, use it to over-ride env. var. ORACLE_HOME set getOH=0 REM # Look for OPATCH_NO_FUSER env. variable set NO_FUSER=%OPATCH_NO_FUSER% REM # All the OPatch properties to be passed in to Java REM # Format for properties is abc=xyz set PROPERTIES= REM # If -jre or -jdk are specified, use it to launch opatch, REM # with -jdk > -jre. And we expect there is a "bin/java" underneath REM # the value supplied set getJRE=0 set getJDK=0 set JDK= set JRE= REM # If -mw_home is specified, use it for the next of the session REM # after verification of its integrity set getMWHOME=0 set PARAMS=%* :FORLOOP if "%1" == "" goto DONELOOP if NOT "%getMWHOME%" == "1" goto CHECK1 set MWH=%1 set getMWHOME=0 :CHECK1 if NOT "%getOH%" == "1" goto CHECK2 set OH=%1 set getOH=0 :CHECK2 if NOT "%getJRE%" == "1" goto CHECK3 set JRE=%1 set getJRE=0 :CHECK3 if NOT "%getJDK%" == "1" goto CHECKFMW2 set JDK=%1 set getJDK=0 :CHECKFMW2 if NOT "%1" == "-mw_home" goto CHECK4 set getMWHOME=1 :CHECK4 if NOT "%1" == "-oh" goto CHECK5 set getOH=1 :CHECK5 if NOT "%1" == "-jre" goto CHECK6 set getJRE=1 :CHECK6 if NOT "%1" == "-jdk" goto FORCHECK set getJDK=1 :FORCHECK shift goto FORLOOP :DONELOOP if "%OH%" == "" goto CHECKFMW3 @REM Remove quotes set OH=%OH:"=% if NOT EXIST %OH%\NUL ( echo The Oracle Home %OH% could not be located. Please give proper Oracle Home. echo OPatch returns with error code = 1 set %ERRORLEVEL% = 1 goto OPATCHDONE ) else ( set C_ORACLE_HOME=%OH% if "%DEBUGVAL%" == "true" echo ORACLE_HOME is set at OPatch invocation ) @REM Calculate Middleware Home simply by moving up IFF User set Oracle Home for %%? in ("%C_ORACLE_HOME%\..") do set C_MW_HOME=%%~f? goto CHECKFMW4 :CHECKFMW3 @REM Determine the location of this script... SET SCRIPTPATH=%~DP0 FOR %%i IN ("%SCRIPTPATH%") DO SET SCRIPTPATH=%%~fsi @REM Calculate the ORACLE_HOME relative to this script... FOR %%i IN ("%SCRIPTPATH%\..\..") DO SET C_ORACLE_HOME=%%~fsi @REM Set the MW_HOME relative to the ORACLE_HOME... FOR %%i IN ("%C_ORACLE_HOME%\..") DO SET C_MW_HOME=%%~fsi if "%DEBUGVAL%" == "true" echo ORACLE_HOME is NOT set at OPatch invocation :CHECKFMW4 if "%MWH%" == "" goto CHECKFMW5 for %%a in (%MWH%.) do set MWH=%%~dpfa :CHECKFMW5 @REM Check if this is really a FMW home - WebTier and some others create fake @REM Middleware homes. If TRUE Middleware Home, we are guaranteed of the @REM presence of registry.dat @REM Note: A TRUE Middleware Home can be established ONLY by the WebLogic installer set FMW_ERROR=0 if NOT EXIST %C_MW_HOME%\registry.dat goto CHECKFMW9 @REM Invoking the setHomeDirs.sh script to set the WebLogic environment @REM Set the MW_HOME env variable temporarily for the following scripts set SET_MW_HOME=%MW_HOME% set MW_HOME=%C_MW_HOME% if NOT EXIST %C_ORACLE_HOME%\common\bin\setHomeDirs.cmd goto CHECKFMW6 call "%C_ORACLE_HOME%\common\bin\setHomeDirs.cmd" :CHECKFMW6 if "%DEBUGVAL%" == "true" echo WL_HOME is set by setHomeDirs.cmd script to %WL_HOME% if "%WL_HOME%" == "" goto CHECKFMW6A if NOT EXIST %WL_HOME%\NUL goto CHECKFMW6A if NOT EXIST %WL_HOME%\common\bin\commEnv.cmd goto CHECKFMW6B call %WL_HOME%\common\bin\commEnv.cmd :CHECKFMW6A set FMW_ERROR=-1 if "%DEBUGVAL%" == "true" ( echo "Fusion Middleware Home maybe corrupted (WebLogic Home is not found)!" echo OPatch will proceed only if JVM launcher found ) goto CHECKFMW7 :CHECKFMW6B set FMW_ERROR=-2 if "%DEBUGVAL%" == "true" ( echo "Fusion Middleware Home maybe corrupted (Common Env Script missing or Not executable)!" echo OPatch will proceed only if JVM launcher found ) goto CHECKFMW7 :CHECKFMW7 set MW_HOME=%SET_MW_HOME% if "%MWH%" == "" set MWH=%C_MW_HOME% if "%OH%" == "" set OH=%C_ORACLE_HOME% @REM We will use the JDK used by WebLogic unless user knows better and wants to override if NOT "%JDK%" == "" goto CHECKFMW8 if NOT "%JRE%" == "" goto CHECKFMW8 set JDK=%JAVA_HOME% :CHECKFMW8 set JRE_MEMORY_OPTIONS=%MEM_ARGS% %JVM_D64% set JAVA_VM_OPTION= if "%JAVA_VENDOR%" == "Oracle" goto CHECKFMW9 if "%JAVA_VENDOR%" == "HP" goto CHECKFMW9 if "%JAVA_VENDOR%" == "Sun" goto CHECKFMW9 set JAVA_VM_OPTION=-client goto INVOKEJAVA :CHECKFMW9 REM # If Oracle Home not set, error out if NOT "%OH%" == "" goto INVOKEJAVA if NOT EXIST %C_ORACLE_HOME%\oui ( echo The Oracle Home %C_ORACLE_HOME% is not OUI based home. Please give proper Oracle Home. echo OPatch returns with error code = 1 set %ERRORLEVEL% = 1 goto OPATCHDONE ) set OH=%C_ORACLE_HOME% :INVOKEJAVA set CP=%OH%\oui\jlib REM # Use ORACLE_HOME to set Java CLASS_PATH REM # default location set JAVA= REM # Use JDK if supplied if NOT "%JAVA%" == "" goto CHECKJRE if "%JDK%" == "" goto CHECKJRE REM if NOT EXIST %JDK%\bin\java.exe goto CHECKJRE set JAVA=%JDK%\bin\java.exe REM if EXIST %JAVA% goto JAVATEST goto JAVATEST REM set JAVA= :CHECKJRE REM # Use JRE if supplied if NOT "%JAVA%" == "" goto CHECKOHJRE if "%JRE%" == "" goto CHECKOHJRE REM if NOT EXIST %JRE%\bin\java.exe goto CHECKOHJRE set JAVA=%JRE%\bin\java.exe REM if EXIST %JAVA% goto JAVATEST goto JAVATEST REM set JAVA= :CHECKOHJRE REM # Use OH\jre\*, it should be 1.5 or above if NOT "%JAVA%" == "" goto CHECKOHJDK set JRE_HIGH= if NOT EXIST %OH%\jre goto CHECKOHJDK for /F "usebackq tokens=1" %%A in (`dir /ON /B %OH%\jre`) do set JRE_HIGH=%%A if "%JRE_HIGH%" == "" goto CHECKOHJDK set JRE_HIGH_FIRST= set JRE_HIGH_SECOND= for /F "tokens=1,2 delims=." %%A in ("%JRE_HIGH%") do set JRE_HIGH_FIRST=%%A for /F "tokens=1,2 delims=." %%A in ("%JRE_HIGH%") do set JRE_HIGH_SECOND=%%B if "%JRE_HIGH_FIRST%" LSS "1" goto CHECKOHJDK if "%JRE_HIGH_SECOND%" LSS "5" goto CHECKOHJDK set JAVA=%OH%\jre\%JRE_HIGH%\bin\java.exe if EXIST %JAVA% goto JAVATEST set JAVA= :CHECKOHJDK REM # Check for jdk location inside OH if NOT "%JAVA%" == "" goto CHECKORAPARAM if NOT EXIST %OH%\jdk\bin\java.exe goto CHECKORAPARAM set JAVA=%OH%\jdk\bin\java.exe if EXIST %JAVA% goto JAVATEST set JAVA= :CHECKORAPARAM REM # Last option is to look inside oraparam.ini for JRE_LOCATION if NOT "%JAVA%" == "" goto JAVATEST if NOT EXIST %OH%\oui\oraparam.ini goto JAVATEST set JRE_LOCATION= for /F "usebackq tokens=2 delims==" %%A in (`findstr "JRE_LOCATION=" %OH%\oui\oraparam.ini`) do set JRE_LOCATION=%%A if "%JRE_LOCATION%" == "" goto JAVATEST set ABS_PATH= for /F "eol=\ tokens=1" %%A in ("%JRE_LOCATION%") do set ABS_PATH=%%A if "%ABS_PATH%" == "" goto JAVAABSPATH for /F "tokens=1,2 delims=:" %%A in ("%JRE_LOCATION%") do set ABS_PATH=%%B if NOT "%ABS_PATH%" == "" goto JAVAABSPATH set JAVA=%OH%\oui\bin\%JRE_LOCATION%\bin\java.exe goto JAVATEST :JAVAABSPATH set JAVA=%JRE_LOCATION%\bin\java.exe goto JAVATEST REM # Java executable exists and has execute permission, exit otherwise :JAVATEST if NOT "%JAVA%" == "" goto JAVATEST1 echo Java could not be located. OPatch cannot proceed! set %ERRORLEVEL% = 1 goto OPATCHDONE :JAVATEST1 if EXIST %JAVA% goto CALLOPATCH if %FMW_ERROR% == -1 echo Fusion Middleware Home is corrupted (WebLogic Home is not found)! if %FMW_ERROR% == -2 echo Fusion Middleware Home is corrupted (Common Env Script missing or Not executable)! echo %JAVA% could not be located. OPatch cannot proceed! set %ERRORLEVEL% = 1 goto OPATCHDONE REM echo. REM echo. REM echo Path to Java binary %JAVA% REM echo Classpath for java %CP% REM echo Oracle Home to be used %OH% REM echo. REM echo. :CALLOPATCH echo ======================================================== echo GENERIC OPATCH VERSION - FOR USE IN SAP ENVIRONMENT ONLY echo ======================================================== if NOT "%DEBUGVAL%" == "true" goto CALLOPATCHNODEBUG echo %JAVA% %JAVA_VM_OPTION% %JRE_MEMORY_OPTIONS% -cp %BASE%\ocm\lib\emocmclnt.jar;%CP%\OraInstaller.jar;%CP%\OraPrereq.jar;%CP%\share.jar;%CP%\srvm.jar;%CP%\orai18n-mapping.jar;%CP%\xmlparserv2.jar;%BASE%jlib\opatch.jar;%BASE%jlib\opatchutil.jar;%BASE%jlib\opatchprereq.jar;%BASE%jlib\opatchext.jar;%BASE%jlib\opatchfmw.jar;%BASE%jlib\opatchactions.jar;%WEBLOGIC_CLASSPATH%;.\;. -DOPatch.ORACLE_HOME=%OH% -DOPatch.DEBUG=%DEBUGVAL% -DOPatch.RUNNING_DIR=%BASE% -DOPatch.MW_HOME=%MWH% -DOPatch.WL_HOME=%WL_HOME% -DOPatch.COMMON_COMPONENTS_HOME=%COMMON_COMPONENTS_HOME% %OCM_SERVICE% oracle/opatch/OPatch %PARAMS% :CALLOPATCHNODEBUG %JAVA% %JAVA_VM_OPTION% %JRE_MEMORY_OPTIONS% -cp "%BASE%\ocm\lib\emocmclnt.jar;%CP%\OraInstaller.jar;%CP%\OraPrereq.jar;%CP%\share.jar;%CP%\srvm.jar;%CP%\orai18n-mapping.jar;%CP%\xmlparserv2.jar;%BASE%jlib\opatch.jar;%BASE%jlib\opatchutil.jar;%BASE%jlib\opatchprereq.jar;%BASE%jlib\opatchext.jar;%BASE%jlib\opatchfmw.jar;%BASE%jlib\opatchactions.jar;%WEBLOGIC_CLASSPATH%;.\;." -DOPatch.ORACLE_HOME=%OH% -DOPatch.DEBUG=%DEBUGVAL% -DOPatch.RUNNING_DIR=%BASE% -DOPatch.MW_HOME=%MWH% -DOPatch.WL_HOME=%WL_HOME% -DOPatch.COMMON_COMPONENTS_HOME=%COMMON_COMPONENTS_HOME% %OCM_SERVICE% oracle/opatch/OPatch %PARAMS% :OPATCHDONE set RESULT=%ERRORLEVEL% if "%ERRORLEVEL%" == "0" goto SUCCEXIT if "%ERRORLEVEL%" LSS "201" goto FAILEXIT if "%ERRORLEVEL%" GTR "203" goto WARNEXIT echo. echo OPatch stopped on request. set RESULT=0 goto EXIT :WARNEXIT if "%ERRORLEVEL%" GTR "210" goto FAILEXIT echo. echo OPatch completed with warnings. set RESULT=0 goto EXIT :FAILEXIT echo. echo OPatch failed with error code = %RESULT% goto EXIT :SUCCEXIT echo. echo OPatch succeeded. goto EXIT :AUTOERROR echo. echo 'opatch auto' is not available on Windows. goto EXIT :EXIT exit /b %RESULT%