oracle 创建范围列表(Rang-list)组合分区

创建分区:

create table GPS_POSITION
(
ID NVARCHAR2(32) not null,

GPSTIME DATE,
LONGITUDE NUMBER,
LATITUDE NUMBER,
SPEED NVARCHAR2(16),
CITYID NVARCHAR2(20)
)
partition by range(gpstime) subpartition by list (cityid)
subpartition template
(
subpartition p600000 values ('600000'),
subpartition p600001 values ('600001'),
subpartition psub_def values (default)
)
(
partition p201010 values less than (to_date('2010-10-01','yyyy-mm-dd'))
)
tablespace GPS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 16K
minextents 1
maxextents unlimited
);

新增加分区:

alter table gps_position add partition p201011 VALUES less than (to_date('2010-11-01','yyyy-mm-dd'))
(
subpartition p600000 values ('600000'),
subpartition p600001 values ('600001'),
subpartition psub_def values (default)
)

删除分区:
Alter TABLE gps_position Drop PARTITION p201011;


查看分区信息:
select partition_name,subpartition_name,tablespace_name
from user_tab_subpartitions where table_name='xxx';


使用分区查询:
select * from gps_position subpartition(P201010_P600000)

select * from gps_position partition(P201010)


创建存储过程:
--存储过程
create or replace procedure add_partition(
p_salary in number) is
v_cur BINARY_INTEGER;
v_date DATE;
sql_stmt VARCHAR2 (1000);
sql_stmt_sub VARCHAR2 (1000);
sql_log VARCHAR2 (1000);
CURSOR c_td_table IS
select cityid from gps_info
group by cityid;
begin
v_date :=TRUNC (ADD_MONTHS (SYSDATE, 2), 'MM');
sql_log :='insert into H_RETENTION(id,TABLENAME) VALUES(H_RETENTION_SEQ.Nextval'||',''p'||TO_CHAR (v_date,'YYYYMM')||''')';
sql_stmt :='ALTER TABLE GPS_POSITION ADD PARTITION p'|| TO_CHAR (v_date,'YYYYMM')|| ' VALUES less than(to_date('''||to_char(v_date,'YYYY-MM')||'-01'',''YYYY-MM-DD''))(';
v_cur := DBMS_SQL.open_cursor;
FOR v_table IN c_td_table
LOOP
sql_stmt_sub :=sql_stmt_sub|| ' subpartition p'|| v_table.cityid|| ' values('''|| v_table.cityid|| '''), ';
end loop;
sql_stmt_sub :=substr(sql_stmt_sub,0,TO_NUMBER(LENGTH(sql_stmt_sub)-2));
sql_stmt :=sql_stmt||sql_stmt_sub||')';

execute immediate sql_stmt;
execute immediate sql_log;
--dbms_output.put_line(sql_log);
commit;

DBMS_SQL.close_cursor(v_cur);
end add_partition;

--执行存储
begin
add_partition(1);
end;

--查询分区
select partition_name,subpartition_name,tablespace_name
from user_tab_subpartitions;

--删除分区
Alter TABLE gps_position Drop PARTITION p201011;


--创建作业调度
variable job10 number;
begin
SYS.dbms_job.submit(:job10,'gpsuser.add_partition;',SYSDATE,'TRUNC(LAST_DAY(SYSDATE))+1+1/24');
--dbms_job.run(jobnum,TRUE);
commit;
end;
/


--查看相关job信息
  1、相关视图
  dba_jobs
  all_jobs
  user_jobs
  dba_jobs_running 包含正在运行job相关信息
SELECT JOB, NEXT_DATE, NEXT_SEC, FAILURES, BROKEN,WHAT FROM DBA_JOBS



1:每分钟执行

Interval => TRUNC(sysdate,'mi') + 1/ (24*60)



Interval => sysdate+1/1440

2:每天定时执行

例如:每天的凌晨1点执行

Interval => TRUNC(sysdate) + 1 +1/ (24)

3:每周定时执行

例如:每周一凌晨1点执行

Interval => TRUNC(next_day(sysdate,'星期一'))+1/24

4:每月定时执行

例如:每月1日凌晨1点执行

Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24

5:每季度定时执行

例如每季度的第一天凌晨1点执行

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24

6:每半年定时执行

例如:每年7月1日和1月1日凌晨1点

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24

7:每年定时执行

例如:每年1月1日凌晨1点执行

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值