# [26ai] DBMS_CLOUD — Capitulo Dos

*El artículo también se encuentra publicado en Ingles* [***English version***](https://dbaintheshadow.com/26ai-dbms-cloud-chapter-two)*.*

Continuando con el artículo de la semana pasada, donde vimos la configuración y unos primeros usos de *DBMS\_CLOUD* en el día a día, hoy continuaremos con la parte de *Data Pump*.

Dejo por aquí el enlace del primer capitulo:

[\[26ai\] DBMS\_CLOUD — Capitulo Uno](https://dbaenlasombra.com/26ai-dbms-cloud-capitulo-uno)

La idea del laboratorio es la siguiente:

*   Export una tabla a nuestro *Bucket.*
    
*   Importar la tabla que hemos exportado en el punto anterior
    

Así que sin más, vamos ha realizar cada punto:

### **Export a un *Bucket***

Vamos a definir un tabla que utilizaremos para exportar e importar:

```sql
SQL> 
  Create Table My_Grants As  
   Select TABLE_SCHEMA,TABLE_NAME,PRIVILEGE  
     From All_Tab_Privs;

 Table created.

SQL> set linesize 1000 pages 1000
SQL> col TABLE_SCHEMA format a20
SQL> col table_name format a20
SQL> col privilege format a20
SQL> r
  1* Select * From My_Grants FETCH FIRST 10  ROWS ONLY

TABLE_SCHEMA         TABLE_NAME                     PRIVILEGE
-------------------- ------------------------------ --------------------
SYS                  DUAL                           SELECT
SYS                  SYSTEM_PRIVILEGE_MAP           READ
SYS                  TABLE_PRIVILEGE_MAP            READ
SYS                  USER_PRIVILEGE_MAP             READ
SYS                  STMT_AUDIT_OPTION_MAP          READ
SYS                  FINALHIST$                     INSERT
SYS                  DM$EXPIMP_ID_SEQ               SELECT
SYS                  MODELGTTRAW$                   SELECT
SYS                  MODELGTTRAW$                   INSERT
SYS                  PMAPGTT$                       SELECT
```

Utilizaremos la propiedad **DEFAULT\_CREDENTIAL** para setear nuestra credencial por defecto y así no tener que indicarla dentro del *parfile* del **export**.

```sql
SQL> 
ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'TEST.DBA_IN_THE_SHADOW';

Database altered.

SQL> 
Select PROPERTY_NAME,PROPERTY_VALUE 
  From database_properties  
 Where PROPERTY_NAME= 'DEFAULT_CREDENTIAL';

PROPERTY_NAME        PROPERTY_VALUE                           
-------------------- ---------------------------------------- 
DEFAULT_CREDENTIAL   TEST.DBA_IN_THE_SHADOW                    
```

Definimos el parfile:

```sql
SQL> ! vi export_to_bucket.par
SQL> ! cat export_to_bucket.par
DUMPFILE=<location_uri>/<TABLE>.dmp
LOGFILE=<TABLE>.log
TABLES=<SCHEMA>.<TABLE>
CONTENT=DATA_ONLY
LOGTIME=ALL
METRICS=YES
FLASHBACK_TIME=SYSTIMESTAMP
encryption_password=hari
```

Esto es lo que hemos definido:

*   DUMPILE: La ruta donde se va guardar el dmp, en nuestro caso es el Bucket más un nombre descriptivo.
    
*   LOGFILE: Nombre del log.
    
*   TABLES: Ahí indicamos la tabla que hemos creado previamente.
    
*   CONTENT=DATA\_ONLY: Solo exportamos los datos
    
*   LOGTIME/METRICS: Métricas de tiempo de nuestro export.
    
*   FLASHBACK\_TIME: Que sea un export consistente.
    
*   ENCRYPTION\_PASSWORD: Encrypt de nuestro dmp.
    

Ejecutamos el *export*:

![](https://cloudmate-test.s3.us-east-1.amazonaws.com/uploads/covers/65605419d28f19cc44df7ef1/abcbe616-5049-4a34-b90e-db8f57914a8c.png align="center")

Consultamos que el **dmp** se ha generado correctamente en el *Bucket*:

```sql
SQL> 
Select object_name, trunc(bytes / (1024*1024),2) MB
  From 
   dbms_cloud.list_objects('DBA_IN_THE_SHADOW', '<location_uri>'); 

OBJECT_NAME                                      MB
---------------------------------------- ----------
ORA7445pf_20260205085710_COM_1.zip            57.35
Wallet_OF2BAP.zip                               .02
Wallet_OF2BCE.zip                               .02
grant.dmp                                         0
grant.dmp_segments/aaaaaa                         2
grant.dmp_segments/aaaaab                       .86

6 rows selected.
```

Fijémonos una cosa sobre el **dmp** que tenemos en nuestro *Bucket*. Tenemos tres archivos, cuando hemos indicado uno único archivo sin comodines, es decir, sin **%L**, **%l**, **%U** o **%u**. El tamaño de nuestro **dmp** es 0Mb y los fragmentos son los que tiene el peso, esto es porque *Data Pump* divide cada parte del archivo en fragmentos más pequeños para una carga más rápida.

### **Import desde *Bucket***

Ejecutamos el *import* creando una tabla previa para almacenar ahí la información:

```sql
SQL> CREATE TABLE MY_GRANTS_BCK AS SELECT * FROM MY_GRANTS WHERE 2 = 1;

Table created.
SQL> ! vi import_to_bucket.par
SQL> ! cat import_to_bucket.par
DUMPFILE=<location_uri>/<TABLE>.dmp
LOGFILE=MY_GRANTS.log
LOGTIME=ALL
METRICS=YES
REMAP_TABLE = TEST.MY_GRANTS:MY_GRANTS_BCK
encryption_password=yes
```

Esto es lo que hemos definido:

*   DUMPILE: La ruta donde se encuentra el dmp.
    
*   LOGFILE: Nombre del log.
    
*   LOGTIME/METRICS: Métricas de tiempo de nuestro export.
    
*   REMAP\_TABLE: Queremos que la información del dmp se albergue en otra tabla
    
*   ENCRYPTION\_PASSWORD= Encrypt de nuestro dmp.
    

Ejecutamos el *import*:

![](https://cdn.hashnode.com/uploads/covers/65605419d28f19cc44df7ef1/1f70eaba-7bce-42eb-befe-5fcb06d93874.png align="center")

Perfecto, hemos podido exportar e importar un dmp desde el *Bucket*.

Espero que os guste. ¡Nos vemos en el próximo artículo!
