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

你可能感兴趣的:(oracle,sql,C++,c,C#)