按天分区并通过存储过程删除历史分区

-- 按天创建分区表,并通过存储过程定期删除指定天数前的分区

/****/
/ 创建按天分区表 */
/****/

-- 订单订单资产快照表
drop table DTSDATA.tyebasset_beforecash_ds_self;
create table DTSDATA.tyebasset_beforecash_ds_self
(
id_yebassetself VARCHAR2(32) default sys_guid() not null,
vc_tradeacco VARCHAR2(17) not null,
vc_fundcode VARCHAR2(6) not null,
d_carryday DATE not null,
en_cday15endasset NUMBER(16,2),
en_cday24endasset NUMBER(16,2),
en_frozenbala NUMBER(16,2),
en_accumincome NUMBER(16,2),
remark VARCHAR2(200) ,
created_by VARCHAR2(100) not null,
created_date DATE not null,
updated_by VARCHAR2(100) not null,
updated_date DATE not null
)
partition by range (d_carryday)
INTERVAL (NUMTODSINTERVAL(1,‘day‘))
(
partition asset_self_p1 values less than (to_date(‘2018-01-01‘,‘yyyy-mm-dd‘))
);

-- Add comments to the table
comment on table DTSDATA.tyebasset_beforecash_ds_self
is ‘订单订单资产快照表‘;

-- Add comments to the columns
comment on column DTSDATA.tyebasset_beforecash_ds_self.id_yebassetself
is ‘记录编号(唯一)‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.vc_tradeacco
is ‘交易账号‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.vc_fundcode
is ‘基金代码‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.d_carryday
is ‘待分配收益日期‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.en_cday15endasset
is ‘cday截止15点资产‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.en_cday24endasset
is ‘cday截止24点资产‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.en_frozenbala
is ‘冻结份额‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.en_accumincome
is ‘累计收益‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.remark
is ‘备注‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.CREATED_BY
is ‘录入人员‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.CREATED_DATE
is ‘创建日期‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.UPDATED_BY
is ‘更新人员‘;
comment on column DTSDATA.tyebasset_beforecash_ds_self.UPDATED_DATE
is ‘更新日期‘;

-- 创建主键
alter table DTSDATA.tyebasset_beforecash_ds_self add constraint PK_tyebasset_ds_self primary key (id_yebassetself) using index initrans 16 ;

-- 创建索引
create unique index DTSDATA.IDX_tyebasset_ds_self on DTSDATA.tyebasset_beforecash_ds_self (vc_tradeacco,vc_fundcode,d_carryday) local ;

-- 创建同义词、授权
create or replace public synonym tyebasset_beforecash_ds_self for dtsdata.tyebasset_beforecash_ds_self ;
grant select, insert, update, delete on DTSDATA.tyebasset_beforecash_ds_self to FDWKTL, DTSOPR, R_DTSDATA_DML;
grant select on DTSDATA.tyebasset_beforecash_ds_self to R_DTSDATA_QRY,R_DTSDATA_DEV_QRY;

/****/
/ 定时删除分区表历史分区 package /
/****/

create or replace package puf_dts_xxx is
procedure del_self_partition(
days in int, --保留天数
r_error_code out int, --错误代码
r_error_message out varchar2 --错误消息
);
end puf_dts_xxx;
/

/****/
/* 定时删除分区表历史分区 package body /
/****/

create or replace package body puf_dts_xxx is
procedure del_self_partition(days in int, --保留天数
r_error_code out int, --错误代码
r_error_message out varchar2 --错误消息
) is
partitions_size int;
delete_size int;
v_partition_name user_tab_partitions.partition_name%TYPE;
cursor c_partitions is
select partition_name from user_tab_partitions
where table_name = ‘TYEBASSET_BEFORECASH_DS_SELF‘
and partition_position > 1
order by partition_position asc;

begin
-- 获取除默认分区外的分区数量
select count(1) into partitions_size
from user_tab_partitions
where table_name = ‘TYEBASSET_BEFORECASH_DS_SELF‘;

delete_size := partitions_size - 1 - days;     -- 待删除分区数量

open c_partitions;
loop
  fetch c_partitions
    into v_partition_name;
  EXIT WHEN delete_size <= 0;
  begin
    --删除分区后需要更新全局索引,否则后续插入数据会报ORA-01502异常
    execute immediate ‘alter table  dtsdata.tyebasset_beforecash_ds_self drop partition ‘ || v_partition_name || ‘ update global indexes ‘;
    delete_size := delete_size - 1;
  end;
end loop;
close c_partitions;

Exception
When others then
r_error_code := SQLCODE;
r_error_message := SQLERRM;
puf_dts_error_log.log_error(r_error_code,
r_error_message,
‘puf_dts_xxx.del_self_partition‘,
‘删除‘ || days || ‘天前分区失败‘,
user);

end del_self_partition;

end puf_dts_xxx;
/

-- 指定分区查询
-- select * from TYEBASSET_BEFORECASH_DS_SELF partition(SYS_P131) ;

-- java代码 通过preparestatement调用
-- call puf_dts_clear_expproc.exportpredeal_proc(?,?,?,?)

--kettle定时任务 TyebassetBeforecashDsSelfMain

原文地址:http://blog.51cto.com/pengsaiwei/2131297

时间: 2024-10-08 19:26:49

按天分区并通过存储过程删除历史分区的相关文章

oracle range分区表已经有了MAXVALUE 分区,如何添加分区?要不能删除MAXVALUE分区里的数据,不影响在线应用。

来做个实验说明该问题:1.创建个分区表SQL> create table p_range_test 2 (id number,name varchar2(100)) 3 partition by range(id)( 4 partition t_p1 values less than (10), 5 partition t_p2 values less than (20), 6 partition t_p3 values less than (30) 7 );Table created. 2.查

truncate删除一个分区,测试全局索引是否失效

目的,有一个清理数据的需求,需要删除历史的一个分区所有记录信息,但是存在主键global索引,如何更好的维护. 如下测试流程一 提前创建好一个已时间created 字段作为分区键的范围分区表 SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME from dba_tab_partitions where TABLE_OWNER='TEST' and TABLE_NAME='A';TABLE_OWN

Windows xp 下删除ubuntu分区后恢复

1. 发生情形 在windows下的计算机管理中删除了一个ubuntu10.04所在分区,结果所有Linux分区变成一片绿色,变成了可用空间.对分区表进行操作尽量不要用磁盘管理,disk Genius(diskman)非常好用,对分区表进行操作可以预览效果,退出时不保存分区信息就不会更新磁盘分区表.当然你也可以用它的备份分区表的功能. 2. 处理思路 之前安装ubuntu时为了腾出空间也曾经发生删除最后一个磁盘别的分区也跟着消失的问题.原因可能是分区链已经错乱.不过现在要处理的问题是如何找回Li

Linux如何创建和删除swap分区

Linux中的swap分区类似Windows的虚拟内存,在硬盘空间不足的情况下,可通过创建swap分区来解决,下面小编就给大家介绍下Linux如何创建和删除swap分区. 1.swap概述 Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中.

系统重装 VISTA下如何删除EISA分区

现在的品牌电脑大部分都有一键还原,把还原内容存储在EISA配置的隐藏分区里面,一般的软件都无法对其进行操作,保证分区及系统还原的安全性.这样的功能对于一些人不使用一键还原(笔者即是)来说实属鸡肋功能,且看着那若干容量的硬盘浪费在那里极为不爽. 在网上搜索了很久,大部分都是说要重新启动到DOS下才可以进行,对技能要就较高,经过笔者不懈努力,研究了若干Windows自带的工具后,终于找到一个工具:Diskpart.exe. 关于Diskpart命令:使用此实用工具可以从脚本.远程会话或其他命令提示符

Oracle 删除表分区

删除表分区(drop partition)    删除表分区包含两种操作,分别是:   Ø 删除分区:alter table [tbname] drop partition [ptname]; Ø 删除子分区:alter table [tbname] drop subpartition [ptname];   除hash分区和hash子分区外,其它的分区格式都可以支持这项操作.   例如,删除分区: JSSWEB> select table_name,partition_name   2  fr

CentOS6启动流程呢个以及删除boot分区相关实验

centos6启动流程 主动读取BIOS,通过CMOS加载硬件信息 ,并进行POST,指定第一个可启动的设备 ROM:BIOS,Basic Input and Output System,保存着计算机系统最重要的基本输入输出程序,系统信息设置,开机加电自检程序RAM:保存各项参数的设定 读取第一个可启动设备MBR的引导加载程序(grub)的启动信息 MBR: 446 boot loader 64:分区表 2 :55aa BIOS通过硬件的INT13中断功能来读取MBR的 Windows:ntlo

mysql 存储过程 删除重复

DELIMITER $$ CREATE PROCEDURE `delRepeatCA`() BEGIN DECLARE tally INT DEFAULT 0; SELECT COUNT(rs.c_CA) INTO tally FROM          --------赋值 (SELECT COUNT(c_CA) AS c_CA FROM t_CA GROUP BY c_CA HAVING COUNT(1) > 1) rs WHILE tally>0 DO --------循环 IF(tal

创建与删除swap分区

1.创建文件 dd if=/dev/zero of=/swap/swap bs=1024 count=3096000 dd if=/dev/zero of=/swap/swap2 bs=1024 count=3096000 dd if=/dev/zero of=/swap/swap5 bs=1024 count=3096000 --/dev/zero,是一个输入设备,你可你用它来初始化文件. 2.指定文件为swap文件 mkswap /swap/swap mkswap /swap/swap2 m