首页 > 解决方案 > 如何自动导出架构并将其上传到 S3 存储桶并删除 AWS oracle RDS 中的旧转储

问题描述

I am doing it manually as export , uploading it to s3 bucket and deleting the old dumps.

有人帮助自动化它

1) 脚本导出架构 ICO_AV_PRD_OWR

    DECLARE
    hdnl NUMBER;
    BEGIN
    hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT', job_mode => 'SCHEMA', job_name=>null, 
    version=>12);
    DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'dump.dmp', directory => 
   'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
    DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'dump.log', directory => 
    'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file);
    DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''schemaname'')');
    DBMS_DATAPUMP.START_JOB(hdnl);
    END;
    /

2)将转储复制到 S3 存储桶

    set lines 399 pages 999
    col filename for a45
    select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime; --- 
    listing the files

    SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(
    p_bucket_name    =>  'bucketname',
    p_directory_name =>  'DATA_PUMP_DIR') 
    AS TASK_ID FROM DUAL;

3) 从 RDS 中删除转储 exec utl_file.fremove('DATA_PUMP_DIR','dump.dmp'); 执行 utl_file.fremove('DATA_PUMP_DIR','dump.log');

标签: amazon-s3amazon-s3-bucket

解决方案


您可以使用根据 CloudWatch 生成的事件计划运行的 lambda 函数。Lambda 函数使用 Amazon CloudWatch Events 在计划的时间间隔启动,这将运行您在问题中提到的查询。

要编写 lambda 函数,您可以使用您选择的语言,比如 Python。

您可以使用 p_s3_prefix 中的日期时间来维护 S3 中的文件。这将帮助您删除旧文件,例如 3 天前上传的转储文件。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(
      p_bucket_name    =>  'mys3bucket', 
      p_prefix         =>  '', 
      p_s3_prefix      =>  'date-time/', 
      p_directory_name =>  'DATA_PUMP_DIR') 
   AS TASK_ID FROM DUAL;

设置您的逻辑以将“日期时间”替换为实际日期时间

您可以按照 AWS 的建议在此处查看分步指南。


推荐阅读