在asp .net中的一个Windows窗体应用程序中,我每天都在00:00创建表格,名称为" data_YYYY_MM_DD"在Oracle数据库中。每个表格中存在大量数据,因为我每5秒钟就会将一些有用的数据写入这些数据中。
现在考虑2016年10月的所有表格。所有表格都会有' data_2016_10%'。如何仅备份这些表(不是整个数据库的备份),然后从数据库中删除这些表。
答案 0 :(得分:1)
您可以使用数据泵对这些表进行逻辑备份。它创建转储文件(二进制文件),可以根据需要导入。
导出:表格模式
使用TABLES参数指定表模式导出。在表模式下,只卸载一组指定的表,分区及其依赖对象。
示例:强>
expdp hr TABLES=hr.employees VERSION=LATEST DIRECTORY=dpump_dir1 DUMPFILE=emp.dmp NOLOGFILE=YES
<强>参考:强>
答案 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