在我用asp .net编写的一个Windows窗体应用程序中,我每天都会在凌晨00:00创建表,在Oracle数据库中名为"data_YYYY_MM_DD“。每个表中都存在大量数据,因为每隔5秒,我就会向这些表中写入一些有用的数据。
现在考虑2016年10月的所有表格。所有的名称都类似于'data_2016_10%‘。如何只备份这些表(而不是整个数据库的备份),然后从数据库中删除这些表。
发布于 2017-02-02 17:49:04
您可以使用数据泵对这些表进行逻辑备份。它创建了转储文件(二进制文件),可以根据需要导入。
导出:表格模式
表格模式导出是使用TABLES参数指定的。在table模式下,仅卸载一组指定的表、分区及其依赖对象。
示例:
expdp hr TABLES=hr.employees VERSION=LATEST DIRECTORY=dpump_dir1 DUMPFILE=emp.dmp NOLOGFILE=YES参考:
发布于 2017-02-02 19:04:34
尝试如下,你可以安排它在dbms_scheduler作业,以便它将每天运行和创建备份表,并删除现有表请添加例外,如表不exist...if你想要的
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_bkphttps://stackoverflow.com/questions/41997724
复制相似问题