|
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로 패치 잘 됬는지 확인