DBAtlas · 데이터베이스 운영 아틀라스

바이너리 패치 후 datapatch -verbose로 SQL 계층 갱신

Oracle패치 및 수명 주기

명령어

# 1) After the binary patch (opatch apply), start the DB; all PDBs must be open:
sqlplus / as sysdba <<EOF
STARTUP;
ALTER PLUGGABLE DATABASE ALL OPEN;
EXIT;
EOF

# 2) Check only first, then apply:
cd $ORACLE_HOME/OPatch
./datapatch -prereq
./datapatch -verbose
# For specific PDBs: ./datapatch -verbose -pdbs PDB1,PDB2

# 3) Recompile invalid objects:
sqlplus / as sysdba @?/rdbms/admin/utlrp.sql

# Logs: $ORACLE_BASE/cfgtoollogs/sqlpatch/

하는 일

datapatch는 Oracle Home에 있는 바이너리 패치의 SQL/PL-SQL 구성 요소(딕셔너리, 패키지)를 CDB root, PDB$SEED, 열려 있는 모든 PDB에 적용하고 결과를 DBA_REGISTRY_SQLPATCH에 기록한다. 롤백된 패치의 SQL 부분도 되돌린다.

사용 시점

모든 RU/RUR/one-off 바이너리 패치나 롤백 후, 새로 패치된 home으로 이동하거나 unplug/plug된 PDB, DBA_REGISTRY_SQLPATCH에 WITH ERRORS가 표시될 때 재실행용.

주의

닫혀 있거나 MOUNTED인 PDB는 패치되지 않으며 RESTRICTED 모드로 열릴 수 있으므로 먼저 모두 연다. 높은 부하에서 실행하지 않는다(딕셔너리 락, 패키지 무효화). RAC에서는 한 노드에서 한 번만 실행한다. Data Guard에서는 primary에서만 datapatch를 실행한다. 변경은 redo를 통해 standby에 전달된다(standby 바이너리를 먼저 패치한다).

DBAtlas에서 열기 →

관련 항목