Transferencia de archivos entre Amazon RDS para Oracle y un bucket de Amazon S3
Para transferir archivos entre una instancia de base de datos de RDS para Oracle y un bucket Amazon S3, puede utilizar el paquete rdsadmin_s3_tasks
de Amazon RDS. Puede comprimir archivos con GZIP al cargarlos y descomprimirlos durante la descarga.
Temas
- Requisitos y limitaciones de la transferencia de archivos
- Carga de archivos desde la instancia de base de datos de RDS para Oracle en un bucket de Amazon S3
- Descarga de archivos desde un bucket de Amazon S3 en una instancia de base de datos de Oracle
- Monitoreo del estado de una transferencia de archivos
Requisitos y limitaciones de la transferencia de archivos
Antes de transferir archivos entre una instancia de base de datos y un bucket de Amazon S3, tenga en cuenta lo siguiente:
-
El paquete
rdsadmin_s3_tasks
transfiere los archivos que se encuentran en un único directorio. No puede incluir subdirectorios en una transferencia. -
El tamaño máximo de objeto en un bucket de Amazon S3 es de 5 TB.
-
Las tareas creadas por
rdsadmin_s3_tasks
se ejecutan de forma asíncrona. -
Puede cargar archivos desde el directorio de Data Pump, como
DATA_PUMP_DIR
, o desde cualquier directorio creado por el usuario. No puede cargar archivos desde un directorio que utilizan los procesos en segundo plano de Oracle, como los directoriosadump
,bdump
otrace
. -
El límite de descargas es de 2000 archivos por llamada a procedimiento para
download_from_s3
. Si necesita descargar más de 2000 archivos de Amazon S3, divida la descarga en acciones independientes, con un máximo de 2000 archivos por llamada al procedimiento. -
Si existe un archivo en la carpeta de descargas e intenta descargar un archivo con el mismo nombre,
download_from_s3
omite la descarga. Para quitar un archivo del directorio de descarga, utilice el procedimiento PL/SQL UTL_FILE.FREMOVE.
Carga de archivos desde la instancia de base de datos de RDS para Oracle en un bucket de Amazon S3
Para cargar archivos desde una instancia de base de datos en un bucket de Amazon S3, use el procedimiento rdsadmin.rdsadmin_s3_tasks.upload_to_s3
. Por ejemplo, puede cargar archivos de copia de seguridad de Oracle Recovery Manager (RMAN) o archivos de Oracle Data Pump. Para obtener información acerca del uso de objetos, consulte Guía del usuario de Amazon Simple Storage Service. Para obtener más información acerca de cómo realizar copias de seguridad de RMAN, consulte Realización de tareas RMAN comunes para instancias de base de datos de Oracle.
El procedimiento rdsadmin.rdsadmin_s3_tasks.upload_to_s3
tiene los siguientes parámetros.
Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción |
---|---|---|---|---|
|
VARCHAR2 |
– |
obligatorio |
Nombre del bucket de Amazon S3 en el que cargar archivos. |
|
VARCHAR2 |
– |
obligatorio |
Nombre del objeto de directorio de Oracle desde el que cargar archivos. El directorio puede ser cualquier objeto de directorio creado por el usuario o el directorio Data Pump, como notaSolo puede cargar archivos desde el directorio especificado. No puede cargar archivos en subdirectorios en el directorio especificado. |
|
VARCHAR2 |
– |
obligatorio |
Prefijo del nombre de archivo de Amazon S3 en el que se cargan los archivos. Un prefijo vacío carga todos los archivos en el nivel superior en el bucket de Amazon S3 especificado y no añade un prefijo a los nombres de archivo. Por ejemplo, si el prefijo es |
|
VARCHAR2 |
– |
obligatorio |
Prefijo del nombre de archivo con el que deben coincidir los nombres de archivo para cargarse. Un prefijo vacío carga todos los archivos en el directorio especificado. |
|
NUMBER |
|
opcional |
El nivel de compresión GZIP. Los valores válidos van de
|
|
VARCHAR2 |
– |
opcional |
Configuración de control de acceso para el bucket. Los únicos valores válidos son null o |
El valor devuelto para el procedimiento rdsadmin.rdsadmin_s3_tasks.upload_to_s3
es un ID de tarea.
En el siguiente ejemplo, se cargan todos los archivos del directorio
en el bucket de Amazon S3 denominado DATA_PUMP_DIR
amzn-s3-demo-bucket
. Los archivos no están comprimidos.
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR
') AS TASK_ID FROM DUAL;
En el siguiente ejemplo se cargan todos los archivos con el prefijo
del directorio db
en el bucket de Amazon S3 denominado DATA_PUMP_DIR
. Amazon RDS aplica el nivel más alto de compresión GZIP a los archivos.amzn-s3-demo-bucket
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_prefix => 'db
', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR
', p_compression_level =>9
) AS TASK_ID FROM DUAL;
En el siguiente ejemplo se cargan todos los archivos del directorio
en el bucket de Amazon S3 denominado DATA_PUMP_DIR
. Los archivos se cargan en una carpeta amzn-s3-demo-bucket
dbfiles
. En este ejemplo, el nivel de compresión GZIP es 1
, que es el nivel de compresión más rápido.
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_prefix => '', p_s3_prefix => 'dbfiles/
', p_directory_name => 'DATA_PUMP_DIR
', p_compression_level =>1
) AS TASK_ID FROM DUAL;
En el siguiente ejemplo se cargan todos los archivos del directorio
en el bucket de Amazon S3 denominado DATA_PUMP_DIR
. Los archivos se cargan en una carpeta amzn-s3-demo-bucket
dbfiles
y ora
se añade al principio de cada nombre de archivo. No se aplica compresión.
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_prefix => '', p_s3_prefix => 'dbfiles/ora
', p_directory_name => 'DATA_PUMP_DIR
') AS TASK_ID FROM DUAL;
En el ejemplo siguiente se supone que el comando se ejecuta en la cuenta A, pero la cuenta B requiere un control total del contenido del bucket. El comando rdsadmin_s3_tasks.upload_to_s3
transfiere todos los archivos del directorio
al bucket denominado DATA_PUMP_DIR
. El control de acceso está configurado en s3bucketOwnedByAccountB
FULL_CONTROL
para que la cuenta B pueda acceder a los archivos del bucket. El nivel de compresión GZIP es 6
, que equilibra la velocidad y el tamaño del archivo.
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => '
s3bucketOwnedByAccountB
', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR
', p_bucket_owner_full_control => 'FULL_CONTROL', p_compression_level =>6
) AS TASK_ID FROM DUAL;
En cada ejemplo, la instrucción SELECT
devuelve el identificador de la tarea en un tipo de datos VARCHAR2
.
Para ver el resultado, visualice el archivo de salida de la tarea.
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-
task-id
.log'));
Reemplace
con el ID de tarea devuelto por el procedimiento.task-id
nota
Las tareas se ejecutan de forma asíncrona.
Descarga de archivos desde un bucket de Amazon S3 en una instancia de base de datos de Oracle
Para descargar archivos desde un bucket de Amazon S3 en una instancia de RDS para Oracle, use el procedimiento de Amazon RDS rdsadmin.rdsadmin_s3_tasks.download_from_s3
.
El procedimiento download_from_s3
tiene los siguientes parámetros.
Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción |
---|---|---|---|---|
|
VARCHAR2 |
– |
Obligatoria |
Nombre del bucket de Amazon S3 desde el que descargar archivos. |
|
VARCHAR2 |
– |
Obligatoria |
Nombre del directorio de Oracle en el que descargar archivos. El directorio puede ser cualquier objeto de directorio creado por el usuario o el directorio Data Pump, como |
|
VARCHAR2 |
FALSO |
Opcional |
Indicador que determina si la tarea genera un error cuando ningún objeto del bucket de Amazon S3 coincide con el prefijo. Si este parámetro no está establecido o se establece en FALSE (predeterminado), la tarea imprime un mensaje en el que se indica que no se ha encontrado ningún objeto, pero no genera ninguna excepción ni se produce un error. Si este parámetro es TRUE, la tarea genera una excepción y se produce un error. Algunos ejemplos de especificaciones de prefijos que no superan las pruebas de coincidencia son los espacios en los prefijos, como en |
|
VARCHAR2 |
– |
Obligatoria |
Prefijo del nombre de archivo con el que deben coincidir los nombres de archivo para descargarse. Un prefijo vacío descarga todos los archivos de nivel superior en el bucket de Amazon S3 especificado pero no los archivos en las carpetas en el bucket. El procedimiento descarga objetos de Amazon S3 solo desde la primera carpeta de nivel que coincide con el prefijo. Las estructuras de directorios anidados que coinciden con el prefijo especificado no se descargan. Por ejemplo, supongamos que un bucket de Amazon S3 tiene la estructura de carpetas Si, de lo contrario, especifico el prefijo |
|
VARCHAR2 |
– |
Opcional |
El formato de compresión. Los valores válidos son |
El valor devuelto para el procedimiento rdsadmin.rdsadmin_s3_tasks.download_from_s3
es un ID de tarea.
En el siguiente ejemplo se descargan todos los archivos del bucket de Amazon S3 denominado
en el directorio amzn-s3-demo-bucket
. Los archivos no están comprimidos, por lo que no se aplica descompresión.DATA_PUMP_DIR
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_directory_name => 'DATA_PUMP_DIR
') AS TASK_ID FROM DUAL;
En el siguiente ejemplo se descargan todos los archivos con el prefijo
del bucket de Amazon S3 denominado db
en el directorio amzn-s3-demo-bucket
. Los archivos están comprimidos con GZIP, por lo que se aplica descompresión. El parámetro DATA_PUMP_DIR
p_error_on_zero_downloads
activa la comprobación de errores de prefijos, de modo que si el prefijo no coincide con ningún archivo del bucket, la tarea generará una excepción y fallará.
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_s3_prefix => 'db
', p_directory_name => 'DATA_PUMP_DIR
', p_decompression_format => 'GZIP
', p_error_on_zero_downloads => 'TRUE
') AS TASK_ID FROM DUAL;
En el siguiente ejemplo se descargan todos los archivos de la carpeta
del bucket de Amazon S3 denominado myfolder/
en el directorio amzn-s3-demo-bucket
. Use el parámetro DATA_PUMP_DIR
p_s3_prefix
para especificar la carpeta de Amazon S3. Los archivos cargados se comprimen con GZIP, pero no se descomprimen durante la descarga.
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_s3_prefix => 'myfolder/
', p_directory_name => 'DATA_PUMP_DIR
', p_decompression_format => 'NONE
') AS TASK_ID FROM DUAL;
El siguiente ejemplo descarga el archivo
en el bucket de Simple Storage Service (Amazon S3) con el nombre mydumpfile.dmp
del directorio amzn-s3-demo-bucket
. No se aplica descompresión.DATA_PUMP_DIR
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_s3_prefix => 'mydumpfile.dmp
', p_directory_name => 'DATA_PUMP_DIR
') AS TASK_ID FROM DUAL;
En cada ejemplo, la instrucción SELECT
devuelve el identificador de la tarea en un tipo de datos VARCHAR2
.
Para ver el resultado, visualice el archivo de salida de la tarea.
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-
task-id
.log'));
Reemplace
con el ID de tarea devuelto por el procedimiento.task-id
nota
Las tareas se ejecutan de forma asíncrona.
Puede utilizar el procedimiento UTL_FILE.FREMOVE
de Oracle para eliminar archivos de un directorio. Para más información, consulte FREMOVE Procedure
Monitoreo del estado de una transferencia de archivos
Las tareas de transferencia de archivos publican eventos de Amazon RDS al comenzar y al completarse. El mensaje de evento contiene el identificador de la tarea para la transferencia del archivo. Para obtener información acerca de cómo ver los eventos, consulte Consulta de eventos de Amazon RDS.
Puede ver el estado de una tarea continua en un archivo bdump. Los archivos bdump están ubicados en el directorio /rdsdbdata/log/trace
. El nombre del archivo bdump está en el siguiente formato.
dbtask-
task-id
.log
Reemplace
por el ID de la tarea que desea monitorizar.task-id
nota
Las tareas se ejecutan de forma asíncrona.
Puede utilizar el procedimiento almacenado rdsadmin.rds_file_util.read_text_file
para ver el contenido de los archivos bdump. Por ejemplo, la siguiente consulta devuelve el contenido del archivo bdump
.dbtask-1234567890123-1234.log
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','
dbtask-1234567890123-1234.log
'));
A continuación, se muestra un ejemplo de archivo de registro de una transferencia fallida.
TASK_ID -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1234567890123-1234 TEXT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2023-04-17 18:21:33.993 UTC [INFO ] File #1: Uploading the file /rdsdbdata/datapump/A123B4CDEF567890G1234567890H1234/sample.dmp to Amazon S3 with bucket name
amzn-s3-demo-bucket
and key sample.dmp. 2023-04-17 18:21:34.188 UTC [ERROR] RDS doesn't have permission to write to Amazon S3 bucket nameamzn-s3-demo-bucket
and key sample.dmp. 2023-04-17 18:21:34.189 UTC [INFO ] The task failed.