프린트 하기

OS환경 : Oracle Linux 6.8 (64bit)


DB 환경 : Oracle Database 11.2.0.4


방법 : 오라클 OPATCH 기능 및 사용 방법

1. Opatch 소개

 

Oracle Server 9.2.0.2.0 부터는 interim patch(one-off patch, 즉 single patch)를 적용할 때 'opatch'

라는 tool을 사용한다.

One-off Patch 는 특정 버그에 대한 조치이며이것들의 모음을 PacthSet 이다

지원 PLATFORM : UNIX, WINDOWS PLATFORM

Metalink에서는 항상 최신 Opatch tool  download받을 수 있도록 갱신된다.

 

2. Opatch 기능

 

-      INTERIM PATCH를 적용(APPLY)

-      설치된 INTERIM PATCH를 제거 (ROLLBACK)

-      기 설치된 INTERIM PATCH CONFLICT여부 점검

-      설치된 PRODUCT  INTERIM PATCH REPORT

 

3. Opatch 사용 환경

 

1) Opatch를 사용하기 위한 준비사항

 

Perl version은 최소한 5.005_03 이상을 요구하며 가급적 5.6 이상을 권장한다.

JRE $ORACLE_HOME에 설치된 JRE를 사용한다.

 

2) inventory

 

Inventory Oracle RDBMS 설치 시 두 개의 inventory가 생성된다.

하나는 oraInst.loc에서 지정된 inventory directory이고이것을 central inventory라고 한다.

다른 하나는 $ORACLE_HOME 아래에 생성되는 inventory directory이며 이것을 Local inventory라고

한다. Opatch 적용 시 반드시 이 두 개의 inventory가 정상적으로 유지되어야 한다.

oracleInst.loc 는 보통 다음 위치에 있다

-      AIX Linux /etc directory에 위치

-      다른 Unix에서는 /var/opt/oracle

-      Windows registry에서 HKEY_LOCAL_MACHINE\Software\Oracle\inst_loc

 

3) RAC 환경인 경우 Oracle Cluster와의 인터페이스를 위하여 oracle library를 사용하는데 다음 경

로가 library path에 포함되어 있어야 한다.

Sun solaris의 경우 LD_LIBRARY_PATH 이고, HP-UX의 경우 SHLIB_PATH이다.

 

 

4. Opatch Download

 

 http://metalink.oracle.com 에 접속 -> patches button 클릭 -> simple search 선택 ->

Patch number 입력 -> platform 선택 -> 최신 날짜의 항목 Download

 

5. Opatch 설치

 

1) Metalink에서 최신 버젼 Opatch download받으면 p2617419_10102_GENERIC.zip 이런 형태로

 파일이 존재한다.

2) 이 파일을 원하는 위치에 COPY 압축을 푼다.

3) 사용자가 임의로 원하는 디렉토리를 만들어서 그 디렉토리에 화일을 푼다.

 

$ unzip p2617419_10102_GENERIC.zip

 

2) OS의 어느 디렉토리에서 사용하든지 상관없도록 하기 위해 환경변수 PATH Opatch가 설치되어

있는 디렉토리를 기술한다.

 

) export PATH=$PATH:/oracle/opatch/Opatch

setenv PATH $PATH:/oracle/opatch/Opatch

 

 

6. 주의 사항

 

Opatch 적용 시에는 반드시 기존의 inventory , $ORACLE_HOME/inventory

oraInst.loc에서 지시하는 central inventory backup받아 두어야 한다.

Windows의 경우 winzip, unix에서는 tar를 사용하면 된다.

 

 

 

 

 

 

Opatch Directory 구조

/docs                  관련문서

/jlib                     Opatch에서 사용되는 CLASS FILE

/perl_modules      PERL MODULES

 

 

INTERIM PATCH DIRECTORY 구조

/actions               PATCH시 적용할 대상 아카이브파일디렉토리, make 파일 등이 기록

/inventory                          PATCH 적용 후 oracle inventory에 업데이트 헤야 하는 내용과 대상 플랫폼오라클 버전이 기록

/GenericActions.xml                        각 운영체제별로 사용할 명령어가 정리

/ShipHomeDirectoryStructure.xml      Patch 디렉토리의 구조가 정의

 

 

옵션 정리

 

1. opatch apply  : PATCH 적용

 

apply <ShipHome> -force -oh <OracleHome>

opatch apply -invPrtLoc $ORACLE_HOME/oraInst.loc

 

이 명령어는 oraInst.loc 파일의 위치가 default directory가 아닌 경우 해당 위치를 지정하여 patch

적용하는 명령이다.

 

Subcommand

Details

-force

이전에 설치한 patch와 conflict가 있을 경우 이를 무시하도록 함

-invPtrLoc

oraInst.loc의 위치

-jdk

Default jdk($ORACLE_HOME/jdk) 대신 사용하려는 jdk 경로

-jre

Default jre($ORACLE_HOME/jre) 대신 사용하려는 jre 경로

-local

Local node patch local inventory update

-minimize_downtime

RAC 운영시 downtime을 최소화 하기 위해 사용

-no_bug_superset

설치하려는 patch가 이미 설치한 patch super-set인 경우 error발생

-no_inventory

Inventory read/update pass. –local과 같이 사용할 수 없으며 argument 사용후는 unsupport 상태가 됨

-oh

정의된 $ORACLE_HOME 대신에 사용할 oracle home

-silent

User-interaction을 모두 default 값으로 적용

-verbose

더 많은 정보를 화면과 log file에 출력

Patch_location

Interim patch의 위치(경로)

 

2. opatch rollback  : 적용된 PATCH ROLLBACK

 

rollback -id <patch id> -oh <OracleHome> -ph <patch dir>

opatch rollback -id 3113008 -ph /opt/oracle/3113008

 

이 명령어는 patch id 3113008 depatch하며이 때 기존 patch file이 있는 directory -ph

argument를 이용하여 지시한다기본적으로 사용하는 옵션은 -id 이다

-local 옵션은 RAC 환경에서 depatch를 다른 노드에 전파하지 않고 Local 노드에만 적용할 때 사용

한다이 경우 모든 노드에서 개별적으로 depatch가 진행되어야 한다.

 

Subcommand

Details

-id

Rollback 하려고 하는 patch id

-jdk

Default jdk($ORACLE_HOME/jdk) 대신 사용하려는 jdk 경로

-jre

Default jre($ORACLE_HOME/jre) 대신 사용하려는 jre 경로

-local

Rollback inventory update local node 에만 적용

-silent

User-interaction을 모두 default 값으로 적용

-verbose

더 많은 정보를 화면과 log file에 출력

-invPtrLoc

oraInst.loc file의 위치 지정

-ph

Patch directory의 위치

 

 

3. opatch lsinventory  : 적용된 PATCH 조회

 

lsinventory -all -oh <OracleHome>

opatch lsinventory -all -oh /opt/oracle

 

이 명령어는 현재 db 서버에 적용되어 있는 patch list를 보여준다.

Subcommand

Details

-all

모든 oracle home의 이름과 경로 표시

-detail

설치된 interim patch library표시. –all과 같이 사용할 수 없음

-jre

Default jre($ORACLE_HOME/jre) 대신 사용하려는 jre의 경로

 

 

 

 

 

 

) $ opatch lsinventory -all

 

PRODUCT NAME VERSION

============ =======

Advanced Queueing (AQ) API 9.2.0.1.0

Advanced Replication 9.2.0.1.0

Agent Required Support Files 9.2.0.1.0

.

..

XML Transx 9.2.0.1.0

XSQL Servlet 9.2.0.1.0

 

Installed Patch List:

 

1) Patch 3574853 applied on Sun Apr 25 03:27:43 JST 2004

Base Bug(s): 3111457

2) Patch 3400911 applied on Sun Apr 25 03:24:40 JST 2004

Base Bug(s): 3304290

3) Patch 3508417 applied on Sun Apr 04 22:53:59 JST 2004

Base Bug(s): 3046394

4) Patch 3213774 applied on Sun Apr 04 09:12:08 JST 2004

Base Bug(s): 3186503 3210293

5) Patch 3226815 applied on Sun Apr 04 09:09:22 JST 2004

Base Bug(s): 3157063

6) Patch 3118677 applied on Sun Apr 04 09:06:28 JST 2004

Base Bug(s): 3118677

7) Patch 3113003 applied on Sun Apr 04 09:04:45 JST 2004

Base Bug(s): 2968709

 

 

4. opatch query  : interim patch에 대한 정보를 조회한다.

 

Subcommand

Details

-get_base_bug

해당 patch에 의해 fix base bug표시

-get_component

패치시 요구되는 component

-get_date

Patch 생성 일자

-get_os

해당 patch가 지원하는 OS

-get_system_change

해당 patch 적용 후 변경되는 내용(현재 지원 안됨)

-is_rolling

Rolling patch 적용 가능 여부

-is_shutdown

Patch 적용 시 oracle instance down해야 하는지 여부(현재 지원 안됨)

-all

위의 모든 정보

 

 

5. opatch version

 

이 명령어는 사용하는 opatch 유틸리티의 version을 보여준다.

 

 

6. 모든 opatch 명령어는 각 명령어에 대한 상세한 usage를 보여주는 -help 옵션을 가진다.

 

opatch.pl [ -help { [ apply | lsinventory | rollback | version ] }

 

 

RAC에서의 Opatch 사용

기본적으로 임시 패치 적용시는 인스턴스를 다운한 후 적용해야 하므로패 치 적용시는

서비스를 할 수 없게 된다. RAC에서는 몇 가지 아규먼트를 사용 하여 다운타임을 최소화

할 수 있다.

 

대략적으로RAC에서 패치가 적용되는 방법을 적어보면 다음과 같다

If (
사용자가 패치 적용방법을minimize_downtime으로 설정

patching mechanism = Minimize Downtime 
else if (
패치가 롤링 패치를 지원

patching mechanism = Rolling 
else 
patching mechanism = All-Node 

여기서주의할 점은 CFS 등의 공유 파일 시스템에 오라클 제품을 설치 하여 여러 노드에

서 공유하는 경우에는 minimize_downtime과 롤링 패치 가 적용되지 않는다는 것이다

All-Node

이것은 일반적인 데이타베이스에 패치를 적용하는 것처럼모든 인스턴스를 다운한 후

노드씩 순차적으로 진행한다. ORACLE_HOME을 여러 노드 에서 공유하는 경우는 이 방식

으로 패치를 적용해야 한다

Minimize_downtime

Minimize_downtime RAC 운영시 다운타임을 최소화하기 위해 사용된 다. 2노드RAC의 경

우를 예로 패치 절차를 알아보자

1.먼저 로컬 노드의 인스턴스를 셧다운한다
‘opatch apply -minimize_downtime’
명령으로 패치를 시작한다


2. ‘Is this node ready for updating?’질문에‘Yes’로 답하면로컬 노드에 패치가 적용된다

3.패치 적용 후 다음에 적용할 노드명을 물어본다

4.해당 노드명을 입력하면이 노드의 인스턴스를 셧다운하도록 요청한다

5.요청받은 노드의 인스턴스는‘Shutdown immediate’로 셧다운한 후셧 다운이 완료되면

이미 패치가 적용된 노드의 인스턴스가 셧다운한다

6.두 번째 노드에 패치를 적용한다

7.인벤토리 정보가 업데이트된다

8.패치가 완료되면 두 번째 인스턴스도 셧다운한다

Minimize_downtime 아규먼트를 사용해도 모든 인스턴스가 다운되는 단계는 있지만, 5번 단

계에서만 해당되므로다운타임을 최소화할 수 있다

Rolling Patch

롤링 패치가 Minimize_downtime과 틀린 점은 다운타임이 전혀 없다는 것이다적용 절차는

다음과 같다

1.
먼저 인스턴스1을 셧다운한다이 단계에서 인스턴스2는 서비스 중이다

2.
노드1에서‘opatch apply’명령으로 패치를 적용한다

3.
노드1에 패치가 적용되었으면인스턴스1을 시동하라는 메시지를 받는다

그리고 다음에 적용할 노드를 입력하도록 메시지를 받는다

4.
인스턴스2를 셧다운한다

5.3
번 세션에서 계속 이어서 노드2에 패치를 적용한다

6.
패치 적용후 인스턴스2를 시동한다


롤링 패치는 모든 패치가 다 가능한 것은 아니고롤링 패치를 지원하도 록 설계된 패치만

가능하다롤링 패치가 가능한지 여부는‘opatch query - is_rolling’명령으로 확인할 수 있다.

 

 

  

 

OS별 진행 사항

 

DB Engine Backup  10.2.0.4 PatchSet 적용(HP-UNIX/Oracle 10g)

 

패치 적용 절차

Step1) source 압축 풀고, xmanager Display 설정

Step2) Application Service 중지

Step3) Listener Process 중지

oracle$> lsnrctl stop

 

Step4) Oracle Instance 종료

SQL> shutdown immediate

 

Step5) Oracle Engine Backup

root#> cd $ORACLE_HOME

root#> tar –cvf  $ORACLE_HOME.tar $ORACLE_HOME

* engine backup location 확인

 

Step6) patchSet 적용

./runInstaller

Root.sh

cd $ORACLE_HOME/rdbms/admin

SQL> sqlplus “ /as sysdba”

SQL> startup upgrade

SQL> @catupgrd.sql

SQL> shutdown immediate

SQL> startup

SQL> @utlrp.sql

SQL> SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS = 'INVALID'; 확인

Step7) Listener process 시작

oracle$> lsnrctl start

 

 

원복 절차

1.     엔진 디렉토리 rm –rf 명령어로 지움

2.     Tar  -xvf  $ORACLE_HOME.tar  $ORACLE_HOME

DB Engine Backup  9.2.0.8 PatchSet 적용(Windows/Oracle 9i)

 

패치 적용 절차

 

Step1) Application Service 중지

 

Step2) Listener Process 중지

oracle$> lsnrctl stop

 

Step3) Oracle Instance 종료

SQL> shutdown immediate

 

Step4) 컴퓨터 관리 -> 서비스 및 응용 프로그램 -> 서비스 에서

프로세서 확인

 

Step5) Oracle Engine Backup, 데이터파일 backup

C:\> set ORACLE_HOME=C:\ORACLE\9.2.0.8           $ORACLE_HOME 폴더 확인

C:\>  압축(윈도우 자체 압축 프로그램 사용)

* engine backup location 확인

C:\> copy명령어 사용 복사

Ex) Copy /oradata /backup

 

Step6) patchSet 적용

Setup.exe

 

Step7) shared_pool_size, java_pool_size 설정

SQL> sqlplus “ /as sysdba”

SQL> startup

SQL> show parameter pfile;

SQL> show parameter shared_pool_size

SQL> show parameter java_pool_size

 

l  만약 shared_pool_size  java_pool_size가 적어도 150m가 안된다면

Spile  사용하여 설정한다.

 

create spfile from pfile;

alter system set shared_pool_size=’150m’ scope=spfile;

alter system set java_pool_size=’150m’ scope=spfile;

SQL> shutdown

 

Step8) 업그레이드

C:\> lsnrctl start

C:\> $ORACLE_HOME/rdbms/admin

C:\> sqlplus “/as sysdba”

SQL> startup migrate

SQL> spool patch.log

SQL> @catpatch.sql

SQL> spool off

 

Patch.log 확인 후 필요하다면 catpatch.sql을 재실행 한다

SQL> shutdown

SQL> startup

SQL> @utlrp.sql

SQL> SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS = 'INVALID'; 확인

 

 

원복 절차

1.     엔진 디렉토리 삭제

2.     엔진 압축 파일해제



기타 팁

OPatch silent 자동화 방법

ㄱ. 먼저 ocm.rsp 생성

1. 해당 경로로 이동

cd $ORACLE_HOME

2. Opatch 경로 bak로 변경’

mv OPatch OPatch_bak

3. media를 $ORACLE_HOME으로 이동(최신 OPatch 파일로)

cp p6880880_102000_HPUX-IA64.zip $ORACLE_HOME

4. $ORACLE_HOME 에서 unzip 실행

unzip p6880880_102000_HPUX-IA64.zip

5. 신규 OPatch/ocm/bin 경로로 이동

cd OPatch/ocm/bin

6. emocmrsp 실행 및 내용 넣기 (엔터 등)

./emocmrsp

ㄴ. OPatch silent 자동화

1. ocm.rsp 파일 media 있는 경로로 이동’

cp ocm.rsp /oracle/media

2. 경로 여기로 이동

cd /oracle/media

3. 나머지 패치파일 unzip

unzip p6367097_10204_HPUX-IA64.zip

unzip p7318276_10204_HPUX-IA64.zip

unzip p8576156_10204_HPUX-IA64.zip

4. OPatch silent 모드로 실행

opatch apply 6367097 -local -silent -ocmrf /oracle/media/ocm.rsp;

sleep 5;

opatch apply 7318276 -local -silent -ocmrf /oracle/media/ocm.rsp;

sleep 5;

opatch apply 8576156 -local -silent -ocmrf /oracle/media/ocm.rsp;


OPatch lsinventory로 패치 잘 됬는지 확인


출처https://blog.naver.com/jsmguy/90074707124


참고

https://positivemh.tistory.com/551

https://positivemh.tistory.com/581