进行备份,然后删除Oracle

时间:2017-02-02 08:47:49

标签: oracle

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

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

2 个答案:

答案 0 :(得分:1)

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

  

导出:表格模式

     

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

示例:

expdp hr TABLES=hr.employees VERSION=LATEST DIRECTORY=dpump_dir1 DUMPFILE=emp.dmp NOLOGFILE=YES

<强>参考:

  • Data Pump Export

  • 答案 1 :(得分:0)

    尝试如下,  您可以在dbms_scheduler作业中安排它,这样它每天都会运行并创建备份表并删除现有表。还请添加例如表不存在的例外...如果您需要

    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