二进制补丁后使用 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 二进制补丁或回滚之后;对于迁移到或 unplug/plug 到新打补丁 home 的 PDB;以及当 DBA_REGISTRY_SQLPATCH 显示 WITH ERRORS 时重新运行。
注意
已关闭或 MOUNTED 的 PDB 不会被打补丁,并可能以 RESTRICTED 模式打开;请先打开所有 PDB。不要在高负载下运行(数据字典锁、程序包失效)。在 RAC 上只需从一个节点运行一次。使用 Data Guard 时只在主库上运行 datapatch;变更通过 redo 传到备库(先为备库二进制文件打补丁)。