1、查看oracle 的版本号
select * from v$version;
2、用分区建表
(1)partition by range (CREATE_DATE) interval (numtoyMinterval (1,'MONTH'))
根据CREATE_DATE自动按月建分区
create table T_ZNF
(ID NUMBER(24) not null,CREATE_DATE DATE,STATE VARCHAR2(10),T_DESC VARCHAR2(255)
) tablespace TBS_APP_LOG --指定表空间(如果在下面的建分区时,指定表空间,后面自动建的分区表空间还是系统给的)
partition by range (CREATE_DATE) interval (numtoyMinterval (1,'MONTH'))(partition T_LOGTIME_main values less than (TO_DATE(' 2018-02-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
);
插入数据
自动在指标的表空间下建立了分区表
按日自动建分区
1 create table MEAP_LOG
2 (
3 LOGID VARCHAR2(32) not null,
4 LOGINNAME VARCHAR2(32),
5 AREA VARCHAR2(32),
6 LOGTYPE VARCHAR2(32) not null,
7 MESSAGE VARCHAR2(4000),
8 DETAIL CLOB,
9 LOGTIME DATE not null
10 )tablespace TBS_APP_LOG
11 partition by range (LOGTIME) INTERVAL(NUMTODSINTERVAL(1,'DAY'))
12 (
13 partition T_LOGTIME_main values less than (TO_DATE(' 2018-2-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
14
15 );
(2)
-- Create table
create table T_ZNF
(ID NUMBER(24) not null,CREATE_DATE DATE,STATE VARCHAR2(10),T_DESC VARCHAR2(255)
)
partition by range (CREATE_DATE)
(partition T_ZNF_201702 values less than (TO_DATE(' 2017-02-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))tablespace TBS_ISAP
);
-- Create/Recreate primary, unique and foreign key constraints
alter table T_ZNFadd constraint PK_T_ZNF_ID primary key (ID)using index tablespace TBS_ISAP;
-- Create/Recreate indexes
create index IDX_T_ZNF_CREATE_DATE on T_ZNF (CREATE_DATE)tablespace TBS_ISAP;
- 时间函数numtodsinterval和numtoyminterval:
select add_months(to_date('2007-02-28','yyyy-mm-dd'),1) from dual;--2007/3/31
select add_months(to_date('2007-02-05','yyyy-mm-dd'),-1) from dual;--2007/1/5
select to_date('2007-02-28','yyyy-mm-dd')+numtoyminterval(12,'MONTH') from dual; --2008/2/28
select to_date('2007-01-30','yyyy-mm-dd')+numtoyminterval(1,'MONTH') from dual; --报错
- interval
3、表分区的查询
用表分区建表,以前的查询方式还是可以用的,但是用分区表查询效率更高。
查看分区的大小
SELECT * FROM dba_segments t WHERE t.segment_name ='T_ZNF';
4、表分区的删除
删除分区表时,加 update global indexes 或者update indexes ,否则索引和表失效。
alter table t_znf truncate partition SYS_P663 update global indexes;--删除表分区的数据,表分区仍旧存在
alter table t_znf drop partition SYS_P663 update global indexes; --删除表分区及其数据
update global indexes 或者update indexes,就是重建索引。
下面我们不加 update global indexes 或者update indexes 删除一下表分区。
select status ,index_name,A.* from user_indexes A where index_name IN ('PK_T_ZNF_ID','IDX_T_ZNF_CREATE_DATE');
alter table t_znf truncate partition SYS_P662;
--表分析analyze table T_ZNF compute statistics;
--索引分析
analyze index PK_T_ZNF_ID compute statistics;
alter index IDX_T_ZNF_CREATE_DATE rebuild /*online*/ tablespace TBS_ISAP;