1、手动备份到表

---创建备份表
create table bosdata.user_info_bak as select * from bosdata.user_info;
---将备份表恢复到主表
truncate table bosdata.user_info;
insert into bosdata.user_info select * from bosdata.user_info_bak;

2、定时自动备份

实际上就是在存储过程中备份,然后用job任务定时去调存储过程

create or replace procedure acct_limit_bak authid current_user is
begin
    execute immediate 'drop table tspdata.acct_bank_card_limit_bak';
    execute immediate 'create table tspdata.acct_bank_card_limit_bak as select * from tspdata.acct_bank_card_limit';
    execute immediate 'CREATE INDEX bank_limit_bak_INDEX1 ON tspdata.acct_bank_card_limit_bak (trans_acctid ASC)';
    execute immediate 'grant select, insert, update, delete on tspdata.acct_bank_card_limit_bak to r_tspdata_dml';
end acct_limit_bak;

注意: authid current_user is很重要,不然在执行Create table时会抛异常:权限不足

先call一下试试存储过程是否可以执行

然后执行JOB定时任务

declare
  v_name number:=99;
begin
  sys.dbms_job.submit(job => v_name,
                      what => 'tspdata.acct_limit_bak();',
                      next_date => sysdate+1/(24*60),---一分钟后开始执行
                      interval => 'trunc(sysdate,''mi'')+2/(24*60)');---两分钟执行一次
  commit;
end;

查看Jobs任务列表和执行情况

SELECT * FROM USER_JOBS;
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐