热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

按时间分区自动建分区表

在oracle11以前,分区维护需要手工维护,就是要手工建表分区。oracle11以后,就可以自动建时间分区了。1、查看oracle的版本
在oracle11以前,分区维护需要手工维护,就是要手工建表分区。oracle11以后,就可以自动建时间分区了。

1、查看oracle 的版本号

select * from v$version;

我的oracle是11,支持自动建分区,查询结果如下:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

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:
两个函数都是时间的增加函数,只是增减的对象不一样(减是在数字前加符号‘-’)。
numtodsinterval:MONTH|YEAR;
numtoyminterval:DAY|HOUR|MINUTE|SECOND;
另:numtodsinterval 增减月份时和add_months函数相似,都是增减一个月,但有所不同。
numtodsinterval :2.28 增减月份后,日期是该月的28号,如果该月对应的日期不存在,就会抛异常。如 计算后日期为2月30日,就会抛异常。
add_months:2.28 增减月份后,日期是该月的月底。

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
根据年: INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
根据月: INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))
根据天: INTERVAL(NUMTODSINTERVAL(1,'DAY'))
根据时分秒: NUMTODSINTERVAL( n, { 'DAY'|'HOUR'|'MINUTE'|'SECOND'})  
3、插入数据,验证是否自动建分区
插入如下数据
查看表的分区,发现表自动新建4个分区:SYS_P661、SYS_P662、SYS_P663、SYS_P664

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;

将两个所以重建后,索引状态为VALID,数据也可以正常插入。

 

 

 

 


转:https://www.cnblogs.com/weimengjiacan/p/8275023.html



推荐阅读
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • html结构 ... [详细]
  • ORACLE11g错误密码登录10次将被锁定,测试如下:SQLsettimeon;15:32:18SQLconngxgatpasswordCo ... [详细]
  • WIN10 21H1/21H2/22H2+WIN11 21H2/22H2 商业版64位MSDN订阅10月原版镜像下载更新
    Windows10和Windows11MSDN订阅频道系统镜像10月份更新已经推出,小编今天为大家分享搬运并提供多个网盘分流下载, ... [详细]
  • 一、概述OpenWRT是一个高度模块化、自动化的嵌入式Linux系统,拥有强大的网络组建和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • c语言难在哪儿,c语言难学
    本文目录一览:1、C语言难在哪?2、学C语言难 ... [详细]
  • D-MutiplesonacircleTimeLimit:1000MSMemoryLimit:65535KB64bitIOFormat:%I64d&%I64uSubmitStatu ... [详细]
  • 【zookeeper】zookeeper的ZAB协议
    文章目录一、前言二、ZAB概要2.1ZAB定义ZAB作用Zxid2.2Zookeeper集群中的三个角色(重点:leaderfollowerobserv ... [详细]
  • 64位Linux下的地址映射
    IA32-e模式下地址映射之前写过,32位Linux虚拟地址映射,讨论了在CPU80386下的虚拟地址映射。看过博主的《Linux内核在x86_64CPU中地址映射》,对32位和 ... [详细]
author-avatar
王小瑶p_35ps
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有