Skip to main content

Command Palette

Search for a command to run...

[OCI] Proxy PDB

Published
•4 min read•View as Markdown
[OCI] Proxy PDB
D

Ingeniero informático, Oracle ACE, DBA y Arquitecto OCI, con más de 15 años de experiencia en plataformas Oracle. Certificado en OCI Certified Architect Professional y OCI Migration and Integration Certified Professional.

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!

More from this blog

DBA en la SOMBRA

104 posts

Tutoriales, scripts y casos prácticos que hacemos los DBA de desarrollos. Únase a mí en mi viaje para optimizar y aprender.