Skip to main content

Command Palette

Search for a command to run...

[OCI] Proxy PDB

Updated
4 min read
[OCI] Proxy PDB

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!

[OCI] Proxy PDB