1. 程式人生 > >oracle 每天備份指定表的資料到另外一張備份表中

oracle 每天備份指定表的資料到另外一張備份表中

因為有一張中轉資料的表,資料量特別大不能儲存太久,但是最近幾天的有可能要使用。所以只保留7天的資料量,其他的資料按月重新建表分開儲存,用以備份。

首先建立備份的儲存過程

CREATE OR REPLACE PROCEDURE P_DAYCLEAR IS
  V_TABLE_COUNT int;
  V_TABLE_NAME  VARCHAR2(100);
  V_YEAR_MONTH  VARCHAR2(100);
  v_sql         VARCHAR2(300);
  c_sql          VARCHAR2(300);
BEGIN

  select to_char(sysdate - interval '7' day, 'yyyyMM')
    into V_YEAR_MONTH
    from dual;
  V_TABLE_NAME := 'DSM_COM_INDEX_HIS_VALUE' || V_YEAR_MONTH;
  select count(*)
    into V_TABLE_COUNT
    from user_tables
   where table_name = V_TABLE_NAME;
--判斷表是否已經存在了
  IF V_TABLE_COUNT = 0 THEN
    --建表
    c_sql :='create table  '||V_TABLE_NAME||' as select * from DSM_COM_INDEX_HIS_VALUE where 1=2 ';
    execute immediate c_sql ;
     commit;
  END IF;
  select to_char(sysdate - interval '6' day, 'yyyy-MM-dd')
    into V_YEAR_MONTH
    from dual;
  V_SQL := 'insert into  '||V_TABLE_NAME||' select *      from DSM_COM_INDEX_HIS_VALUE     where update_time < to_date(:1, ''yyyy-MM-dd'')';
           --插資料
   execute immediate  V_SQL USING V_YEAR_MONTH ;
  COMMIT;
  --刪除資料
  V_SQL := ' delete from DSM_COM_INDEX_HIS_VALUE  where update_time < to_date(:1, ''yyyy-MM-dd'') ';
   execute immediate  V_SQL USING V_YEAR_MONTH ;
  COMMIT;

END P_DAYCLEAR;

然後建立定時任務 晚上執行

declare   
      job_id   pls_integer; 
begin
sys.dbms_job.submit(job => job_id,
                      what => 'P_DAYCLEAR();',
                      next_date => to_date('10-03-2018 03:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'TRUNC(sysdate+86400)');
commit;
end;

相關推薦

oracle 每天備份指定資料另外備份

因為有一張中轉資料的表,資料量特別大不能儲存太久,但是最近幾天的有可能要使用。所以只保留7天的資料量,其他的資料按月重新建表分開儲存,用以備份。 首先建立備份的儲存過程 CREATE OR REPLACE PROCEDURE P_DAYCLEAR IS V_TABLE

根據更新另外

#需要更新的表 select distinct owner,table_name from dba_tab_columns t where (t.COLUMN_NAME like '%ACCT_ID%' ) and owner in('COMM'); #根據

MS SQL複製另外個數據庫

--複製結構+資料 select * into 資料庫名.dbo.新表名 from 資料庫名.dbo.原表名 select * into Stockholder.dbo.SHInfo from dspring.dbo.HIREMEN --只複製結構

oracle,把一個指定的欄位資料更新到另外裡面

一、建立表結構 create table test1( id varchar2(10) , val varchar2(20), name varchar2(20)); create table test2( id varchar2(10), val varchar2(20) ,

插入資料另外

  方法一: 程式碼 1 select into 和 insert into select 兩種表複製語句 2 select * into destTbl from srcTbl 3 4 insert into destTbl(fld1, fld2) sele

Linq實現sql資料不存在另外

Linq中包含查詢 //Linq程式碼: T_WxMaterials.Where(n=>T_VideoMsgs.Select(m=>m.MediaID).Contains(n.MediaID)) //生成的sql語句: SELECT [t0].[ID], [t0].[

java 連帶操作(兩關聯,插入條新資料另外也跟著插入條新資料

以角色許可權模組中增加功能為例子:a) 概念: 連帶操作:首先先在Role表中插入一條資料,接著拿到rid,往Role-Acl表中插入一條資料b)資料庫設計:Role表:Role-Acl表:c) 程式碼實現:RoleMap:/**  *  * @Description: 新增

Mysql 把查詢的資料插入另外

直接上sql語句: INSERT INTO tableA (name,addDate) SELECT name,addDate from tableB 今天遇到個問題,就是把一個表的資料匯入到另外一張

Oracle另外的列更新到本的列

_id bsp select oracl sele zid lec sql set Oracle寫法: update temp_agentpay_df q set q.up_batch_bizid=(select c.batch_bizid from temp_df_id

MySql 從查詢的資料賦值給另外的欄位(MySQL Update Query using a left join)

舉慄: 我們的使用者積分出現重複資料,然後我們要把重複資料刪除掉,重新計算使用者總積分,假設所有積分都是增加的積分。 使用者積分表test_user_points 使用者iduser_id 使用者積分總

DB2大資料複製到另外儲存過程和直接在客戶端執行

  IN PI_PCKBED VARCHAR(32672),IN PI_PCKEND VARCHAR(32672)) BEGIN   DECLARE SQL1 VARCHAR(200);   DECLARE SQL2 VARCHAR(200);   DECLARE SQL3 VARCHAR(200);   D

oracle儲存過程將某一個欄位的多值分開成多條資料插入到

create or replace PROCEDURE PRO_MANDATESCOPE (dataid in varchar2,tablename in varchar2 ) AS

oracle向另插入不重複資料merge into用法

參考1: 由於專案中需要用到批量插入,為了防止使用者插入重複的資料,需要先判斷插入的資料是不是已經存在,如果存在則忽略這次插入,否則插入這條資料,剛開始的時候是先用一條SQL語句判斷,如果返回結果是真(記錄已經存在),則忽略,否則插入這條資料,這樣的話插入一條資料

轉換一個字段含有多個另外的id | | 行轉列

ret .net sub 模式 end posit tex 匹配 replace 1、Oracle Function --入參:表 id /* cxcyxm02 :操作表,含有一個存儲另一張表(xs0101)多個主鍵id的字段  ids :操作表的主鍵 i

查詢在不在另外的記錄及效率探究

tro 圖片 刪除 rom 表連接 ren open 方式 mod 在我做項目的時候遇到一個需求,要將存在於表ta而不存在於表tb中的數據查詢出來。 記錄使用的方法和探討效率。 數據準備 創建表ta,並且使用存儲過程插入13000條數據,在我的機器上運行時間: 346.7

完整備份數據庫+差異備份,恢復到另外臺服務器

數據庫文件 完整 刷新 需要 點擊 一個 服務 選中 第一個 材料:完整備份數據庫一份、最近備份的差異備份一份 現在需要將它完整的恢復到另外一臺數據庫服務器上。 首先 左側數據庫-右鍵-還原數據庫 然後目標數據庫手動輸入一個名字。 下面源設備選擇完整數據庫文件,然後確定後會

MySQL將一個的某個欄位值更新到另外

今天,遇到一個需求是要將MySQL的一個表中的欄位更新到另一個表中,開始,我嘗試用以下的SQL解決:   UPDATE t_order_temp SET price=t_order.amount  FROM t_order WHERE t_order_temp

mysql 把的某列,更新到另外

mysql 把一張表的某列,更新到另外一張表 由於第二張表的列出來的是集合,但是我們只需要集合的第一條記錄 1、先把需要的列和對應關係導到另外臨時表中 create table tmp1 as select a.SCWXDID,a.wxff from wz_scwxd_sub a;

sql insert into 一次性插入多條資料查詢到的資料插入到另

--插入多條資料使用DEFAULT關鍵字(第二種方法,不要將預設列名寫出,在UNION後面加上all,最後一行不加) ------------------------------------------------------------------------------

oracle資料誤刪恢復,誤刪恢復

一 表資料誤刪恢復: 1.ALTER TABLE CCUSAGENTRELA ENABLE row movement ; 2.flashback table CCUSAGENTRELA to timestamp to_timestamp(‘2018-11-01 10:34:00’,‘yyyy