[OCI] Proxy PDB
![[OCI] Proxy PDB](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1768329866558%2F7b4b48b7-68df-47e7-a7fa-714481e293be.jpeg&w=3840&q=75)
El artículo también se encuentra publicado en Ingles English version.
En el artículo de hoy, vamos a ver las Proxy PDB.
Pero, ¿Qué es un proxy PDB? Es hacer referencia a otra PDB pero de manera remota o en mismo CDB. Podríamos decir que es algo similar a los clásicos DB Links cuando hacemos referencia a una tabla, pero en este caso no se trata de una tabla, sino de una PDB.
Algunas notas que debemos tener en cuenta:
El usuario que utilicemos debe tener el permiso de CREATE PLUGGABLE DATABASE.
La PDB debe estar en local undo mode.
La PDB debe estar en modo ARCHIVELOG.
La PDB que hacemos referencia debe estar OPEN READ WRITE cuando el proxy PDB es creado. Una vez creada, puede ser cambiada.
Debemos crear un DB Link que hace referencia tanto a la CDB como a la PDB.
Para poder llevar a cabo este laboratorio, vamos a definir dos máquinas virtuales, ambas con la última versión de Oracle en OCI.
Las máquinas que hemos definido son las siguientes:
Source: 26ai VM DB System Oracle Cloud (test_ORI).
Target: 26ai VM DB System Oracle Cloud (test_TARGET).
¡Vamos a ello!
1º: Definir la PDB PDB_DAVID en TEST_ORI:
SQL>
CREATE PLUGGABLE DATABASE PDB_DAVID ADMIN USER ADMIN
IDENTIFIED BY ADMIN keystore identified by external store;
Pluggable database created.
SQL> ALTER PLUGGABLE DATABASE PDB_DAVID OPEN;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE PDB_DAVID SAVE STATE;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
4 PDB_DAVID READ WRITE NO
SQL> ! hostname
source
2º: Definir un usuario común. El rol DBA ya incluye tanto CREATE SESSION como CREATE PLUGGABLE DATABASE. Haremos lo mismo en target.
SQL> CREATE USER C##MANAGER IDENTIFIED BY "XXXXXXX";
User created.
SQL> GRANT RESOURCE, DBA, UNLIMITED TABLESPACE TO C##MANAGER CONTAINER=ALL;
Grant succeeded.
3º: Revisamos que la PDB en origen se encuentra local undo mode. En caso que no se encuentre, debemos configurarlo.
SQL> r
1* Select property_name, property_value
From database_properties
Where property_name='LOCAL_UNDO_ENABLED'
PROPERTY_NAME PROPERTY_VALUE
-------------------- ----------------------------------------
LOCAL_UNDO_ENABLED TRUE
4º: Definimos el DB Links en destino. Para hacerlo diferente, vamos a utilizar easy connect en vez de local naming:
SQL>
CREATE DATABASE LINK SOURCE_PROXY CONNECT TO C##MANAGER
IDENTIFIED BY "XXXXX"
USING 'source:1521/pdb_david.XXXXXXXXXXXXXXXX';
Database link created.
SQL>
SQL> SELECT * FROM DUAL@SOURCE_PROXY;
D
-
X
5º: Definimos nuestra PDB incluyendo AS PROXY para indicar que vamos a crear una proxy PDB y FROM para especificar la PDB a la que vamos hacer referencia.
SQL>
CREATE PLUGGABLE DATABASE PDB_DAVID AS PROXY
FROM PDB_DAVID@SOURCE_PROXY keystore identified by external store;
Pluggable database created.
SQL> alter pluggable database pdb_david open;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB_DAVID READ WRITE NO
SQL> r
1 SELECT pdb_name, is_proxy_pdb
2* FROM cdb_pdbs
PDB_NAME IS_PROXY_PDB
------------------------------ ----------------------------------------
PDB$SEED NO
PDB_DAVID YES
Cosas a tener en cuenta:
- V$PROXY_PDB_TARGETS: Muestra información sobre los detalles de conexión sobre la PDB a la que hace referencia nuestra Proxy PDB.
SQL> r
1* select * from v$proxy_pdb_targets
CON_ID TARGET_PORT TARGET_HOST TARGET_SERVICE TARGET_USER
---------- ----------- -------------------- -------------------------------------------------------------------------------- --------------------
3 1521 source 4843e8f3860c707be063cfdf680abf32.XXXXXXX.XXXXXXX.XXXXXXX.com
Los tablespace de SYSTEM y SYSAUX serán copiados y sincronizador con el origen.
Solo admite password authentication, no permite OS authentication. Si nos fijamos en el ejemplo de abajo, vemos como funcionan ambos métodos de autenticación y que ocurre al consultar una tabla en nuestra Proxy PDB.
[oracle@target ~]$ sqlplus / as sysdba
Connected to:
Oracle AI Database 26ai EE High Perf Release 23.26.0.0.0 - for Oracle Cloud and Engineered Systems
Version 23.26.0.0.0
SQL> alter session set container= PDB_DAVID;
Session altered.
SQL> Select * From C##MANAGER.CODIGO_POSTAL;
Select * From C##MANAGER.CODIGO_POSTAL
*
ERROR at line 1:
ORA-00942: table or view "C##MANAGER"."CODIGO_POSTAL" does not exist
Help: https://docs.oracle.com/error-help/db/ora-00942/
SQL> conn C##MANAGER/"XXXXXXXX"@'target:1521/pdb_david.XXXXXXXX.XXXXXXXX.XXXXXXXX.com'
Connected.
SQL> Select * From C##MANAGER.CODIGO_POSTAL;
ID POBLACION PAIS
----- ---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
46000 Valencia Espa??a
08000 Barcelona Espa??a
28000 Madrid Espa??a
55500 Wisconsin U.S.A.
Espero que os guste. ¡Nos vemos en el próximo artículo!
![[26ai] Hybrid Read-Only Mode PDB](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2Fde208bd2-5e24-4fd3-acf7-8e5394d95283.png&w=3840&q=75)
![[26ai] ALERT_LOG_MAX_SIZE](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2Fcbb365d0-4428-4a41-930d-516ce59e3355.jpg&w=3840&q=75)
![[26ai] ConnStr Tool](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F5005f06e-946c-49ba-bfe8-7fe18d1075d9.png&w=3840&q=75)
![[26ai] Instalación de Oracle26ai en Linux 9](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2Fd9a6ba10-eb2d-4fee-8a0c-f4957cbdc676.png&w=3840&q=75)
![[OCI] Montaje de un Bucket como un FS](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F05595570-0fbd-46ce-9db4-d2f0e9f09003.png&w=3840&q=75)