暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 基于时间戳自动归档数据

askTom 2016-07-19
114

问题描述

嗨,汤姆

我需要在Oracle 12c中执行数据归档,之后归档的数据必须由应用程序访问,当查询有没有一种方法可以根据表中的每一行的 “updated_date” 列自动存档> 1年的数据。

可以在不使用触发器的情况下自动执行此操作吗?即对于特定行,如果updated_date> 1岁在任何给定的日期,则自动存档该行 (从主表中删除并插入到另一个存档表中)。

此存档数据必须可由应用程序访问。所以,我的逻辑必须是在给定的时间点 '选择 * 从primary_table',当我的updated_date是在过去1年内,否则 '选择 * 从归档表' 当我的updated_date大于过去1年。
请协助。

专家解答

触发器在这里对你没有帮助。没有什么可以让它着火的!

你需要的是一个 (调度程序) 作业。所以你的过程是:

-创建一个过程,将数据从当前传输到历史记录表
-提交每日/每周/每月/运行的作业...调用该程序

该过程可以是简单的插入删除。例如:
create table t (
  x int,
  up_dt date
);

create table t_hist as
  select * from t;

insert into t
  select rownum, sysdate-400+rownum from dual connect by level <= 400;
  
create index i on t(up_dt);

create or replace procedure arch_t is
begin
  insert into t_hist
    select * from t
    where  up_dt <= add_months(sysdate, -12);
    
  delete t
  where  up_dt <= add_months(sysdate, -12);
end arch_t;
/
select count(*) from t;

COUNT(*)  
400       

select count(*) from t_hist;

COUNT(*)  
0         

exec arch_t;

select count(*) from t;

COUNT(*)  
366       

select count(*) from t_hist;

COUNT(*)  
34  

如果你的表是 “大”,所以你要删除数百万行在每次运行,你可能想看看分区。如果在update_date上对主表进行分区,则可以进行 “删除分区” 而不是删除。这将更快,并产生更少的重做。

一旦你对这个过程感到满意,你可以用这样的方法来安排它:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
            job_name => 'ARCH_JOB',
            job_type => 'STORED_PROCEDURE',
            job_action => 'ARCH_T',
            number_of_arguments => 0,
            start_date => NULL,
            repeat_interval => 'FREQ=WEEKLY',
            end_date => NULL,
            enabled => FALSE,
            auto_drop => FALSE,
            comments => '');
    
    DBMS_SCHEDULER.enable(
             name => 'ARCH_JOB');
END;
/

而Oracle会根据repeat_interval (这里每周一次) 自动运行它。

有关调度程序的更多信息,请参见:

http://docs.oracle.com/database/121/ADMIN/schedover.htm#ADMIN033
https://oracle-base.com/articles/10g/scheduler-10g
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论