페이지 이력
패치 전 주의사항
패치 파일을 다운로드 받아 압축을 해제하면 파일 안에 README.html 파일이 존재합니다.
해당 파일에는 패치 방법이나 주의 사항과 관련된 자세한 안내가 기록되어 있습니다.
이를 반드시 읽고 테스트를 한 후에 적용해야 합니다.
패치 사전 준비
환경 변수 입력
root 유저로 1번과 2번 노드에 접속하여 양쪽에서 모두 실행합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/12.1.0/grid
export DB_HOME=$ORACLE_BASE/product/12.1.0/db_1
# mkdir -p /u01/app/oracle/cfgtoollogs/sqlpatch/26925263/21857460
# chown -R grid:oinstall /u01/app/oracle/cfgtoollogs/sqlpatch
# chmod -R 775 /u01/app/oracle/cfgtoollogs
$GRID_HOME/bin/crsctl stat res -t |
펼치기 | ||
---|---|---|
|
서비스 상태 조회
RAC가 정상적으로 기동중인지 확인합니다.
서비스를 수동으로 중단하지 않고, 패치를 진행할 수 있습니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
$GRID_HOME/bin/crsctl stat res -t |
펼치기 | ||
---|---|---|
|
GRID_HOME의 OPatch 업데이트
root 유저로 1번과 2번 노드에 접속하여 양쪽에서 모두 실행합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
cd $GRID_HOME OPatch/opatch version mv OPatch OPatch.old cp -r /media/sf_oracle/OPatch . chown -R grid:oinstall OPatch ll | grep OPatch OPatch/opatch version |
펼치기 | ||||
---|---|---|---|---|
|
ORACLE_HOME의 OPatch 업데이트
root 유저로 1번과 2번 노드에 접속하여 양쪽에서 모두 실행합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
cd $DB_HOME OPatch/opatch version mv OPatch OPatch.old cp -r /media/sf_oracle/OPatch . chown -R oracle:oinstall OPatch ll | grep OPatch OPatch/opatch version |
펼치기 | ||||
---|---|---|---|---|
|
패치 검증
GRID의 패치 내역 확인
grid 유저로 1번과 2번 노드에 접속하여 양쪽에서 모두 실행합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
$GRID_HOME/OPatch/opatch lsinventory |
펼치기 | ||||
---|---|---|---|---|
|
GRID 패치 충돌 여부 검증
grid 유저로 1번과 2번 노드에 접속하여 양쪽에서 모두 실행합니다.
pass되지 않은 항목이 있다면 oracle에 기술 지원을 요청해야 합니다. (기존 패치의 rollback 등의 작업이 필요할 수 있으므로 반드시 가이드를 받고 진행합니다.)
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
$GRID_HOME/ | ||||||
코드 블럭 | ||||||
| ||||||
$GRID_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /media/sf_oracle/27010930/26925263 $GRID_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /media/sf_oracle/27010930/26925218 $GRID_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /media/sf_oracle/27010930/26910974 $GRID_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /media/sf_oracle/27010930/26983807 vi /tmp/patch_list_gihome.txt # cat /tmp/patch_list_gihome.txt $GRID_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_gihome.txt |
펼치기 | ||||
---|---|---|---|---|
|
GRID 패치 디스크 용량 확인
GRID 패치를 위해 충분한 디스크 용량이 확보되어 있는지 검사합니다.
적용할 패치 파일의 디렉토리 경로를 텍스트 파일에 저장하고, opatch의 CheckSystemSpace 옵션을 이용하여 디스크 공간을 검사합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
$DBvi /tmp/patch_list_gihome.txt # cat /tmp/patch_list_gihome.txt $GRID_HOME/OPatch/opatch lsinventoryprereq CheckSystemSpace -phBaseFile /tmp/patch_list_gihome.txt |
펼치기 | ||
---|---|---|
|
Database의 패치 내역 확인
oracle 유저로 1번과 2번 노드에 접속하여 양쪽에서 모두 실행합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
$DB_HOME/OPatch/opatch lsinventory |
펼치기 | ||||||
---|---|---|---|---|---|---|
|
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
$DB_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /media/sf_oracle/27010930/26925263
$DB_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /media/sf_oracle/27010930/26925218
vi /tmp/patch_list_dbhome.txt
# cat /tmp/patch_list_dbhome.txt
$DB_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_dbhome.txt |
펼치기 | ||
---|---|---|
|
Database 패치 충돌 여부 검증
oracle 유저로 1번과 2번 노드에 접속하여 양쪽에서 모두 실행합니다.
pass되지 않은 항목이 있다면 oracle에 기술 지원을 요청해야 합니다. (경우에 따라 기존 패치의 rollback 등의 작업이 필요할 수 있으므로 반드시 가이드를 받고 진행합니다.)
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
$DB_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /media/sf_oracle/27010930/26925263
$DB_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /media/sf_oracle/27010930/26925218 |
펼치기 | ||||||
---|---|---|---|---|---|---|
|
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
opatchauto apply /media/sf_oracle/27010930 |
펼치기 | ||
---|---|---|
|
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
export ORACLE_SID=-MGMTDB
sqlplus / as sysdba |
펼치기 | ||
---|---|---|
|
코드 블럭 | ||||
---|---|---|---|---|
| ||||
SELECT instance_name FROM v$instance;
SELECT name, open_mode FROM v$pdbs; |
펼치기 | ||
---|---|---|
|
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
cd $ORACLE_HOME/OPatch
datapatch -verbose |
펼치기 | ||
---|---|---|
|
코드 블럭 | ||||
---|---|---|---|---|
| ||||
SELECT patch_id, version, action, status, action_time FROM dba_registry_sqlpatch; |
펼치기 | ||
---|---|---|
|
코드 블럭 | ||||
---|---|---|---|---|
| ||||
SELECT name, open_mode FROM v$pdbs;
ALTER PLUGGABLE DATABASE ALL OPEN;
SELECT name, open_mode FROM v$pdbs; |
펼치기 | ||
---|---|---|
|
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
cd $ORACLE_HOME/OPatch
datapatch -verbose |
펼치기 | ||
---|---|---|
|
코드 블럭 | ||||
---|---|---|---|---|
| ||||
SELECT patch_id, version, action, status, action_time FROM dba_registry_sqlpatch; |
|
Database 패치 디스크 용량 확인
Database 패치를 위해 충분한 디스크 용량이 확보되어 있는지 검사합니다.
적용할 패치 파일의 디렉토리 경로를 텍스트 파일에 저장하고, opatch의 CheckSystemSpace 옵션을 이용하여 디스크 공간을 검사합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
vi /tmp/patch_list_dbhome.txt
# cat /tmp/patch_list_dbhome.txt
$DB_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_dbhome.txt |
펼치기 | ||
---|---|---|
|
Grid 및 DBMS 패치 적용
opatchauto 수행하기
root 유저로 실행하며, 한 노드의 작업이 모두 완료된 후에 다른 노드에 작업을 수행합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
opatchauto apply /media/sf_oracle/27010930 |
펼치기 | ||||
---|---|---|---|---|
1번 노드에서 실패 메시지가 발생할 수 있으나, 무시하고 2번 노드에 패치를 적용합니다.
|
MGMTDB 패치 적용하기
sqlpatch 로그 디렉토리 권한 변경
추후 datapatch를 정상적으로 진행하기 위해서는 sqlpatch 로그 디렉토리의 권한을 수정해야 합니다.
datapatch를 실행할 노드의 디렉토리만 적용해도 됩니다.
만약 grid와 database가 같은 유저로 설치되어 있다면, 이 작업은 생략해도 됩니다.
코드 블럭 |
---|
chmod -R 775 /u01/app/oracle/cfgtoollogs/sqlpatch |
펼치기 | ||
---|---|---|
|
MGMTDB 상태 확인
grid 유저로 접속해서 MGMTDB에 연결합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
export ORACLE_SID=-MGMTDB
sqlplus / as sysdba |
펼치기 | ||
---|---|---|
|
정상적으로 연결이 되었으며, 기존에 패치 내역이 있는지 확인합니다.
코드 블럭 | ||||
---|---|---|---|---|
| ||||
SELECT instance_name FROM v$instance;
select PATCH_ID, VERSION, ACTION, STATUS, ACTION_TIME from DBA_REGISTRY_SQLPATCH; |
펼치기 | ||
---|---|---|
WITH ERRORS 상태인 것으로 보아 datapatch가 제대로 적용되지 않은 것을 확인할 수 있습니다.
|
MGMTDB에 datapatch 적용하기
grid 유저에서 MGMTDB에 대한 datapatch를 적용합니다.
반드시 ORACLE_SID가 -MGMTDB로 지정된 상태에서 수행해야 합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
cd $ORACLE_HOME/OPatch
./datapatch -verbose |
펼치기 | ||
---|---|---|
|
MGMTDB 패치 결과 확인
MGMTDB에 접속하여 제대로 datapatch가 적용되었는지 확인합니다.
코드 블럭 | ||||
---|---|---|---|---|
| ||||
SELECT patch_id, version, action, status, action_time FROM dba_registry_sqlpatch; |
펼치기 | ||
---|---|---|
|
Database 패치 적용하기
PDB 상태 확인 및 변경
패치를 적용할 PDB의 상태를 모두 READ WRITE 모드로 변경해 줍니다.
만약 Multitenent Database가 아닌 경우에는 Database를 Open 시켜 주면 됩니다.
코드 블럭 | ||||
---|---|---|---|---|
| ||||
SELECT name, open_mode FROM v$pdbs;
ALTER PLUGGABLE DATABASE ALL OPEN;
SELECT name, open_mode FROM v$pdbs; |
펼치기 | ||
---|---|---|
|
Database에 datapatch 적용하기
oracle 유저로 database에 대한 datapatch를 적용합니다.
코드 블럭 | ||||||
---|---|---|---|---|---|---|
| ||||||
cd $ORACLE_HOME/OPatch
./datapatch -verbose |
펼치기 | ||
---|---|---|
|
Database 패치 결과 확인
패치가 정상적으로 적용되었는지 확인합니다.
코드 블럭 | ||||
---|---|---|---|---|
| ||||
SELECT patch_id, version, action, status, action_time FROM dba_registry_sqlpatch; |
펼치기 | ||
---|---|---|
| ||
펼치기 | ||
|