amazon-s3 - 如何自动导出架构并将其上传到 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');
解决方案
您可以使用根据 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 的建议在此处查看分步指南。
推荐阅读
- java - 如何在 while 循环中使用字符串数组和扫描仪?
- c# - 将 Unity navmesh 多个代理移动到单点并停止相互推动
- flutter - Flutter:显示带有文本和冻结 UI 的简单 ProgressBar
- sql - 如何将从函数返回的用户定义表类型作为参数传递给另一个内联函数(没有'DECLARE')?
- python - 如何在 Python 中访问聚合函数值
- python - 为什么 xticks 没有出现在我的 Matplotlib 图上?
- javascript - 有时在 Vue.js 中不执行 Drop 事件
- java - 使用 JPA 存储地图
- c# - Blazor - 当子组件 onclick 事件发生时执行父组件的方法
- google-cloud-platform - 从 Springboot 到 BigQuery 便宜