Tive uma experiência na última madrugada, ao aplicar o OJVM Release Update 19.24.0.0.240716 (Patch 36414915). Durante o processo, algumas PDBs apresentaram as mensagens de erro “Installed in CDB but not in PDB” e “Not installed in CDB but installed in PDB”, indicando inconsistências na aplicação do patch.
Com uma janela de manutenção bem curta, precisei corrigir o problema rapidamente. Neste guia, mostro como contornei essas inconsistências de forma prática.
Agora, você pode estar se perguntando: “Mas por que isso aconteceu, Sobrinho?”
A resposta é: “não sei”. Não me aprofundei nas causas porque o foco era resolver o problema dentro do tempo disponível. Esse tipo de erro ocorre quando os patches SQL não são sincronizados entre o CDB e as PDBs
Verificar o estado das PDBs e mensagens de erro
a. Verificar estado das PDBs:
SQL> SHOW PDBS;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------- ----------- ----------
2 PDB$SEED READ ONLY NO
3 PDBLQUQS1 READ WRITE YES --<<AQUI ESTA O PROBELMA RESTRICTED = YES
SQL>
A coluna RESTRICTED indica que a PDB está limitada a sessões administrativas.
B. Identificar violações em PDB_PLUG_IN_VIOLATIONS:
SQL> SELECT name, cause, type, message, status, action
FROM PDB_PLUG_IN_VIOLATIONS
WHERE type LIKE 'ERROR%' AND status LIKE 'PENDING';
NAME CAUSE TYPE MESSAGE STATUS ACTION
------------ ------------- ------- -------------------------------------------------------------------------- --------- ------------------------------------
PDBLQUQS1 SQL Patch ERROR Interim patch 36414915/25700138: Installed in CDB but not in PDB PENDING Call datapatch to install in PDB or CDB
PDBLQUQS1 SQL Patch ERROR Interim patch 35648110/25365038: Not installed in CDB but installed in PDB PENDING Call datapatch to install in PDB or CDB
As mensagens “Installed in CDB but not in PDB” e “Not installed in CDB but installed in PDB” indicam que os patches foram aplicados de forma inconsistente, ou seja, estão presentes em apenas um dos ambientes: no CDB ou na PDB, mas não em ambos.
Como corrigir: Resolver “Installed in CDB but not in PDB” e “Not installed in CDB but installed in PDB”
-- Alterar para o container da PDB afetada
SQL> ALTER SESSION SET CONTAINER=PDBLQUQS1;
-- Fechar a PDB
SQL> ALTER PLUGGABLE DATABASE PDBLQUQS1 CLOSE IMMEDIATE;
-- Abrir a PDB no modo upgrade
SQL> ALTER PLUGGABLE DATABASE PDBLQUQS1 OPEN UPGRADE;
-- PDB foi aberta no modo upgrade para permitir aplicação dos patches SQL
Sair do SQL e executar o comando datapatch no sistema operacional:
No terminal, execute o comando datapatch
para sincronizar os patches SQL entre o CDB e a PDB:
[oracle@rpx0008jar01 OPatch]$ /u01/app/oracle/product/19.24.0/cdhcpsr1/OPatch/datapatch -verbose
SQL Patching tool version 19.24.0.0.0 Production on Sun Dec 8 12:38:21 2024
Copyright (c) 2012, 2024, Oracle. All rights reserved.
Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_27751_2024_12_08_12_38_21/sqlpatch_invocation.log
Connecting to database...OK
Gathering database info...done
Note: Datapatch will only apply or rollback SQL fixes for PDBs
that are in an open state, no patches will be applied to closed PDBs.
Bootstrapping registry and package to current versions...done
Determining current state...done
Current state of interim SQL patches:
Interim patch 36414915 (OJVM RELEASE UPDATE: 19.24.0.0.240716):
PDB PDBLQUQS1: Applied successfully on 08-DEC-24 12.25.13.209397 PM
Interim patch 35648110 (OJVM RELEASE UPDATE: 19.21.0.0.231017):
PDB PDBLQUQS1: Applied successfully on 08-DEC-24 12.25.13.102624 PM
SQL Patching tool complete on Sun Dec 8 12:38:45 2024
Reabrir a PDB no modo normal:
-- Fechar e reabrir a PDB no modo normal
SQL> ALTER PLUGGABLE DATABASE PDBLQUQS1 CLOSE IMMEDIATE;
SQL> ALTER PLUGGABLE DATABASE PDBLQUQS1 OPEN;
Verificar estado das PDBs
SQL> SHOW PDBS;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------- ----------- ----------
2 PDB$SEED READ ONLY NO
3 PDBLQUQS1 READ WRITE NO
Verificar se há violações
SQL> SELECT name, cause, type, message, status, action
FROM PDB_PLUG_IN_VIOLATIONS
WHERE type LIKE 'ERROR%' AND status LIKE 'PENDING';
no rows selected
1. O que é o erro “Installed in CDB but not in PDB”?
Esse erro ocorre quando o patch foi aplicado no container root (CDB) mas não foi propagado para as PDBs.
2. “Not installed in CDB but installed in PDB”?
Esse erro indica que o patch foi aplicado na PDB mas não no CDB. Para corrigir, é necessário sincronizar os patches executando o comando datapatch -verbose
com a PDB no modo upgrade.
3. Qual o impacto de deixar as PDBs em modo restrito?
Quando uma PDB está em modo restrito, apenas sessões administrativas podem acessá-la. Isso pode impedir o funcionamento normal de aplicações conectadas a ela.
Esse passo a passo resolve o probelma “Installed in CDB but not in PDB” e “Not installed in CDB but installed in PDB”, restaurando o funcionamento normal da PDB (RESTRICTED NO
e OPEN MODE READ WRITE
).
Lembre-se, analise este contexto como um todo e compreenda se esta solução é aplicável à sua situação.
😶🌫️🚒#20241208 #DBASobrinho #GuinaNãoTinhaDó #BóBó #CaceteDeAgulha #OracleACE #SueliChegou #BarbaraTomouConta #FestaDoPijama #SolNaCuca #FrangoTaBom 😶🌫️🚒