首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行备份,然后删除Oracle中具有相同前缀的所有表

执行备份,然后删除Oracle中具有相同前缀的所有表
EN

Stack Overflow用户
提问于 2017-02-02 16:47:49
回答 2查看 89关注 0票数 1

在我用asp .net编写的一个Windows窗体应用程序中,我每天都会在凌晨00:00创建表,在Oracle数据库中名为"data_YYYY_MM_DD“。每个表中都存在大量数据,因为每隔5秒,我就会向这些表中写入一些有用的数据。

现在考虑2016年10月的所有表格。所有的名称都类似于'data_2016_10%‘。如何只备份这些表(而不是整个数据库的备份),然后从数据库中删除这些表。

EN

回答 2

Stack Overflow用户

发布于 2017-02-02 17:49:04

您可以使用数据泵对这些表进行逻辑备份。它创建了转储文件(二进制文件),可以根据需要导入。

导出:表格模式

表格模式导出是使用TABLES参数指定的。在table模式下,仅卸载一组指定的表、分区及其依赖对象。

示例:

代码语言:javascript
复制
expdp hr TABLES=hr.employees VERSION=LATEST DIRECTORY=dpump_dir1 DUMPFILE=emp.dmp NOLOGFILE=YES

参考:

票数 1
EN

Stack Overflow用户

发布于 2017-02-02 19:04:34

尝试如下,你可以安排它在dbms_scheduler作业,以便它将每天运行和创建备份表,并删除现有表请添加例外,如表不exist...if你想要的

代码语言:javascript
复制
create or replace procedure backup_monthly_table
as 
prev_date varchar2(20) := to_char(sysdate-1, 'yyyy-mm-dd');
begin
for i in (select table_name from dba_tables where upper(table_name) like '%'||'"'||prev_date||'_%')
loop
dbms_output.put_line('working');
dbms_output.put_line(i.table_name);
execute immediate 'create table sysman.'||'"'||i.table_name||'_bkp'||'"'||' as select * from sysman.'||'"'||i.table_name||'"';
execute immediate 'drop table sysman.'||'"'||i.table_name||'"';
end loop;
end;

    verification  output:
select owner,table_name from dba_tables where upper (table_name) like '%2017-%'
    SYSMAN  2017-02-01_test1_bkp
    SYSMAN  2017-02-01_test2_bkp
    SYSMAN  2017-02-01_test3_bkp
SYSMAN  2017-02-01_test4_bkp
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41997724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档