

# Movimiento de datos entre volúmenes de almacenamiento en RDS para Oracle
<a name="Appendix.Oracle.CommonDBATasks.MovingDataBetweenVolumes"></a>

Puede mover archivos de datos y objetos de base de datos entre los volúmenes de almacenamiento principal y los adicionales. Antes de mover los datos, se tienen en cuenta los siguientes puntos:
+ Los volúmenes de origen y destino deben tener suficiente espacio libre.
+ Las operaciones de movimiento de datos consumen E/S en ambos volúmenes.
+ Los grandes movimientos de datos pueden afectar al rendimiento de la base de datos.
+ Si restaura una instantánea, el movimiento de los datos entre los volúmenes de almacenamiento puede resultar lento si se ve afectado por la carga diferida de EBS.

**Topics**
+ [

## Movimiento de archivos de datos entre volúmenes en RDS para Oracle
](#Appendix.Oracle.CommonDBATasks.MovingDatafiles)
+ [

## Movimiento de datos de tablas e índices entre volúmenes en RDS para Oracle
](#Appendix.Oracle.CommonDBATasks.MovingTableData)
+ [

## Administración del almacenamiento de LOB mediante volúmenes adicionales
](#Appendix.Oracle.CommonDBATasks.ManagingLargeLOBStorage)

## Movimiento de archivos de datos entre volúmenes en RDS para Oracle
<a name="Appendix.Oracle.CommonDBATasks.MovingDatafiles"></a>

Para mover archivos de datos entre volúmenes de almacenamiento, utilice el procedimiento `rdsadmin.rdsadmin_util.move_datafile` de Amazon RDS. Tenga en cuenta los siguientes requisitos:
+ Debe utilizar Oracle Enterprise Edition para ejecutar el procedimiento `move_datafile`.
+ No puede mover el espacio de tablas `SYSTEM` y `RDSADMIN`.

El procedimiento `move_datafile` tiene los siguientes parámetros.


****  

| Nombre del parámetro | Tipo de datos | Obligatorio | Descripción | 
| --- | --- | --- | --- | 
|  `p_data_file_id`  |  número  |  Sí  |  El ID del archivo de datos que se va a mover.  | 
|  `p_location`  |  varchar2  |  Sí  |  El volumen de almacenamiento al que desea mover el archivo de datos.  | 

En el siguiente ejemplo, se mueve un espacio de tabla del volumen predeterminado `rdsdbdata` al volumen adicional `rdsdbdata2`.

```
SQL> SELECT tablespace_name,file_id,file_name FROM dba_data_files
 WHERE tablespace_name = 'MYNEWTABLESPACE';

TABLESPACE_NAME              FILE_ID FILE_NAME
------------------------- ---------- --------------------------------------------------------------------------------
MYNEWTABLESPACE                    6 /rdsdbdata/db/ORCL_A/datafile/o1_mf_mynewtab_n123abcd_.dbf

EXECUTE rdsadmin.rdsadmin_util.move_datafile( 6, 'rdsdbdata2');

PL/SQL procedure successfully completed.

SQL> SELECT tablespace_name,file_id,file_name FROM dba_data_files
  WHERE tablespace_name = 'MYNEWTABLESPACE';

TABLESPACE_NAME              FILE_ID FILE_NAME
------------------------- ---------- --------------------------------------------------------------------------------
MYNEWTABLESPACE                    6 /rdsdbdata2/db/ORCL_A/datafile/o1_mf_mynewtab_n356efgh_.dbf
```

## Movimiento de datos de tablas e índices entre volúmenes en RDS para Oracle
<a name="Appendix.Oracle.CommonDBATasks.MovingTableData"></a>

Puede optimizar el almacenamiento de la base de datos mediante la creación de espacios de tabla en volúmenes de almacenamiento adicionales. A continuación, puede mover objetos como tablas, índices y particiones a estos espacios de tabla mediante el SQL estándar de Oracle. Este enfoque es valioso para ajustar el rendimiento cuando la base de datos contiene datos con patrones de acceso diferentes. Por ejemplo, puede almacenar los datos operativos a los que se accede con frecuencia en volúmenes de almacenamiento de alto rendimiento y, al mismo tiempo, trasladar los datos históricos a los que se accede con menos frecuencia a volúmenes de almacenamiento de menor costo.

En el siguiente ejemplo, se crea un nuevo espacio de tablas en un volumen de alto rendimiento `rdsdbdata2`. A continuación, mueva una tabla al volumen de almacenamiento adicional mientras la tabla está en línea. También mueve el índice al mismo volumen. El movimiento de tablas y la reconstrucción de índices mientras se está en línea necesita Oracle Enterprise Edition.

```
ALTER SESSION SET db_create_file_dest = '/rdsdbdata2/db';
CREATE TABLESPACE perf_tbs DATAFILE SIZE 10G;

ALTER TABLE employees
  MOVE TABLESPACE perf_tbs ONLINE;

ALTER INDEX employees_idx
  REBUILD ONLINE TABLESPACE perf_tbs;
```

En el siguiente ejemplo, se crea un espacio de tablas en un volumen de bajo costo. A continuación, mueva una partición de tabla al volumen de almacenamiento de bajo costo mediante una operación en línea.

```
ALTER SESSION SET db_create_file_dest = '/rdsdbdata3/db';
CREATE TABLESPACE hist_tbs DATAFILE SIZE 10G;

ALTER TABLE orders
  MOVE PARTITION orders_2022
  TABLESPACE hist_tbs ONLINE;
```

En el siguiente ejemplo, consulte las operaciones largas de sesiones activas.

```
SELECT sid,opname,sofar,totalwork,time_remaining,elapsed_seconds 
  FROM v$session_longops 
  WHERE time_remaining > 0;
```

Puede verificar el uso de los espacios de tabla con la siguiente consulta.

```
SELECT tablespace_name, used_percent
  FROM dba_tablespace_usage_metrics
  ORDER BY used_percent DESC;
```

## Administración del almacenamiento de LOB mediante volúmenes adicionales
<a name="Appendix.Oracle.CommonDBATasks.ManagingLargeLOBStorage"></a>

La base de datos puede contener tablas con objetos BLOB o CLOB que consumen una cantidad considerable de almacenamiento, pero a los que se accede con poca frecuencia. Para optimizar el almacenamiento, puede reubicar estos segmentos de LOB en un espacio de tablas en un volumen de almacenamiento adicional.

En el siguiente ejemplo, se crea un espacio de tabla para datos de LOB en un volumen de bajo costo destinado a datos de poco acceso. A continuación, cree una tabla que almacene los datos de este volumen.

```
ALTER SESSION SET db_create_file_dest = '/rdsdbdata3/db';
CREATE TABLESPACE lob_data DATAFILE SIZE 5G AUTOEXTEND ON NEXT 1G;

CREATE TABLE documents (
    doc_id NUMBER PRIMARY KEY,
    doc_date DATE,
    doc_content CLOB
) TABLESPACE user_data
LOB(doc_content) STORE AS (TABLESPACE lob_data);
```