时间范围分区自动新建

前段时间做了个分区功能,表结构如下:

-- Create table
create table SUM_DUTY
(
  oid         VARCHAR2(36) default sys_guid() not null,
  entry_id    VARCHAR2(18) not null,
  manual_no   VARCHAR2(12),
  p_date      DATE,
  i_e_flag    VARCHAR2(1),
  traf_mode   VARCHAR2(1),
  trade_code  VARCHAR2(10),
  trade_name  VARCHAR2(255),
  trade_mode  VARCHAR2(4),
  cut_mode    VARCHAR2(3),
  tax_type    VARCHAR2(1),
  real_tax    NUMBER(19,2),
  center_code VARCHAR2(4),
  center_name VARCHAR2(255),
  scene_code  VARCHAR2(4),
  scene_name  VARCHAR2(255),
  manual_type VARCHAR2(4),
  inserttime  DATE default SYSDATE
)
partition by range (P_DATE)
subpartition by list (MANUAL_TYPE)
(
  partition SUM_DUTY_2014_01 values less than (TO_DATE(‘ 2014-01-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_01_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_01_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_01_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_01_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_01_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_01_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_01_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_02 values less than (TO_DATE(‘ 2014-02-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_02_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_02_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_02_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_02_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_02_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_02_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_02_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_03 values less than (TO_DATE(‘ 2014-03-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_03_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_03_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_03_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_03_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_03_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_03_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_03_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_04 values less than (TO_DATE(‘ 2014-04-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_04_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_04_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_04_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_04_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_04_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_04_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_04_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_05 values less than (TO_DATE(‘ 2014-05-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_05_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_05_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_05_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_05_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_05_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_05_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_05_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_06 values less than (TO_DATE(‘ 2014-06-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_06_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_06_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_06_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_06_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_06_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_06_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_06_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_07 values less than (TO_DATE(‘ 2014-07-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_07_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_07_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_07_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_07_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_07_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_07_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_07_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_08 values less than (TO_DATE(‘ 2014-08-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_08_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_08_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_08_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_08_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_08_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_08_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_08_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_09 values less than (TO_DATE(‘ 2014-09-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_09_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_09_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_09_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_09_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_09_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_09_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_09_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_10 values less than (TO_DATE(‘ 2014-10-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_10_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_10_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_10_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_10_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_10_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_10_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_10_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_11 values less than (TO_DATE(‘ 2014-11-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_11_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_11_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_11_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_11_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_11_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_11_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_11_MANUAL_F values (DEFAULT)
  ),
  partition SUM_DUTY_2014_12 values less than (TO_DATE(‘ 2014-12-01 00:00:00‘, ‘SYYYY-MM-DD HH24:MI:SS‘, ‘NLS_CALENDAR=GREGORIAN‘))
  (
    subpartition SUM_DUTY_2014_12_MANUAL_B values (‘B23‘),
    subpartition SUM_DUTY_2014_12_MANUAL_C values (‘C23‘),
    subpartition SUM_DUTY_2014_12_MANUAL_E values (‘E23‘),
    subpartition SUM_DUTY_2014_12_MANUAL_H values (‘H23‘),
    subpartition SUM_DUTY_2014_12_MANUAL_L values (‘L23‘),
    subpartition SUM_DUTY_2014_12_MANUAL_K values (‘K23‘),
    subpartition SUM_DUTY_2014_12_MANUAL_F values (DEFAULT)
  )
);

后要求以后当年自动新建下一年分区:

create or replace procedure SP_AutoCreatePartition is
/*自动新建系统中所有分区表的下一年的分区*/
/*过程中涉及DBA_TAB_PARTITIONS的访问,必须给用当前用户select权限:grant select on DBA_TAB_PARTITIONS to 用户*/
   V_COUNT NUMBER;                --用于判断是否已存在分区
   V_USERNAME VARCHAR2(100);      --当前用户
   V_DATE_STR VARCHAR2(100);      --下一年年份
   X NUMBER;                      --一年十二个月
   V_PARTITION_DATE VARCHAR2(100);--分区的日期格式
   V_DATA_STRING VARCHAR2(100);   --分区值年月
   V_SQL VARCHAR2(4000);
begin
    SELECT USER INTO V_USERNAME FROM DUAL;--获取当前用户
    SELECT TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE,12),‘YYYY‘),‘YYYY‘) INTO V_DATE_STR  FROM DUAL;--获取下一年的年份

    SELECT COUNT(1) INTO V_COUNT FROM DBA_TAB_PARTITIONS T WHERE T.TABLE_NAME=‘SUM_DUTY‘ AND  INSTR(T.PARTITION_NAME,V_DATE_STR)>0 AND T.TABLE_OWNER=V_USERNAME;--计算当前表中是否已存在下一年的分区
    IF V_COUNT=0 THEN
    x := 1;
    WHILE x <=12 LOOP
    SELECT TO_CHAR(ADD_MONTHS(TRUNC(ADD_MONTHS(SYSDATE,12),‘YYYY‘),x-1),‘YYYY_MM‘) INTO V_PARTITION_DATE FROM DUAL;
    SELECT TO_CHAR(ADD_MONTHS(TRUNC(ADD_MONTHS(SYSDATE,12),‘YYYY‘),x-1),‘YYYY-MM‘) INTO V_DATA_STRING FROM DUAL;
    V_SQL:=‘ALTER TABLE SUM_DUTY ADD partition SUM_DUTY_‘||V_PARTITION_DATE||‘ values less than (TO_DATE(‘‘‘||V_DATA_STRING||‘-01 00:00:00‘‘, ‘‘SYYYY-MM-DD HH24:MI:SS‘‘, ‘‘NLS_CALENDAR=GREGORIAN‘‘))
    (
       subpartition SUM_DUTY_‘||V_PARTITION_DATE||‘_MANUAL_B values (‘‘B23‘‘),
       subpartition SUM_DUTY_‘||V_PARTITION_DATE||‘_MANUAL_C values (‘‘C23‘‘),
       subpartition SUM_DUTY_‘||V_PARTITION_DATE||‘_MANUAL_E values (‘‘E23‘‘),
       subpartition SUM_DUTY_‘||V_PARTITION_DATE||‘_MANUAL_H values (‘‘H23‘‘),
       subpartition SUM_DUTY_‘||V_PARTITION_DATE||‘_MANUAL_L values (‘‘L23‘‘),
       subpartition SUM_DUTY_‘||V_PARTITION_DATE||‘_MANUAL_K values (‘‘K23‘‘),
       subpartition SUM_DUTY_‘||V_PARTITION_DATE||‘_MANUAL_F values (DEFAULT)
    )‘;
    EXECUTE IMMEDIATE V_SQL;
    x := x + 1;
    END LOOP;
    END IF;

end SP_AutoCreatePartition;
时间: 2024-02-20 15:29:45

时间范围分区自动新建的相关文章

Mysql 存储过程+定时任务,完成分区自动维护

建表: drop table if exists terminal_parameter; CREATE TABLE `terminal_parameter` ( `terminal_parameter_id` int(11) NOT NULL AUTO_INCREMENT, .................... `createtime` datetime NOT NULL, `userid` int(8) NOT NULL, `terminal_id` int(8) DEFAULT NULL

swap分区自动建立配置

##自动新建swap分区 ##开机自动挂载

分区自动挂载的三种方法

一.修改/etc/rc.local配置文件追加类似命令:mount /dev/sda1  /sda1 到配置文件最后一行 二,修改/etc/fstab配置文件追加类似命令:/dev/sda1   /sda1  ext4   defaults   0  0 到配置文件中 三,安装autofs服务yum install autofs 追加类似命令:sda1   -fstype=ext4  :/dev/sda1 到配置/etc/autofs.misc文件中重启服务: service autofs re

脚本自动新建及删除openvpn用户

1.expect交互脚本 vim vpn_expect.expect #!/usr/bin/expect -f if $argc<1 {         puts stderr "Usage: $argv0 need argv.\n"         exit 1 } set vpnuser [lindex $argv 0] set path /etc/openvpn/easy-rsa/2.0 spawn $path/build-key $vpnuser expect "

使用Oracle 11g分区自动扩展的功能的一个小问题

Oracle 11g下使用分区自动扩展的功能,非常方便,不过同时也带来一个问题,就是导出.导入之后,建表语句改了,下面来做个实验: SQL> select * from v$version; BANNER ------------------------------------------------------------------------------ Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Pr

linux分区自动挂载与fstab文件修复

linux分区自动挂载与fstab文件修复 在前面我们实现新添加硬盘,进行分区与格式化,然后手动挂载,这样做,在重启后,需要重新挂载才能使用. https://www.cnblogs.com/-wenli/p/10354807.html 自动挂载 要实现自动挂载,其实很简单,只需要把挂载信息写入/etc/fstab 1 .打开/etc/fstab 2.按照格式挂载/dev/sdb1与/dev/sdb5 /dev/sdb1 /disk1 ext4 defaults 1 2 设备文件名 挂载点 文件

多磁盘自动分区自动挂载脚本

起源: 准备测试tfs分布式存储,发现一台服务器24块大盘,还有好几台服务器, 想想那么碰分区格式化,UUID自动挂载,还好有自动脚本. 1,yes能在你需要输入y时帮你操作,要不一台服务器不间断24次y还不知道什么时候敲击 2,UUID也能自动获取,这样才能自动挂载且盘符能固定 #!/bin/bash #mkfs.ext4 mkdir /data/disk{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24} yes |

CentOS6、7 LVM逻辑卷分区自动扩容Shell脚本编程思路与实例

应用场景和已知存在的问题: 适用于CentOS6或CentOS7(可能适用于CentOS4或5等早些版本) 根文件系统(被扩展的文件系统)采用LVM进行管理,例如mount命令输出"/dev/mapper/vg_$hostname-lv_root on / type ext4 (rw)"中含有"mapper"关键词 自动扩容根文件系统,如果想扩展其他文件系统,例如有的业务应用数据目录不在根分区中,则需要修改Shell脚本代码中的VG_PATH_TO_EXTEND变量

Linux 自动挂载 和 fstab分区-自动挂载

01.自动挂载  =>vi /etc/fstab 文件 第1字段:分区设备文件名或UUID(硬盘通用唯一识别码) 第2字段:挂载点 第3字段:文件系统名称 第4字段:挂载参数 第5字段:指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份 第6字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高 /dev/sdb1   /disk1  ext4  defaults  1  2 执行 : mount  -a 02./etc/fst