热门标签 | 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



推荐阅读
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 基于OpenCV的小型图像检索系统开发指南
    本文详细介绍了如何利用OpenCV构建一个高效的小型图像检索系统,涵盖从图像特征提取、视觉词汇表构建到图像数据库创建及在线检索的全过程。 ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • 本文详细介绍了如何处理Oracle数据库中的ORA-00227错误,即控制文件中检测到损坏块的问题,并提供了具体的解决方案。 ... [详细]
  • 本文介绍如何通过创建数据库触发器来限制Oracle数据库中特定用户的登录IP地址,以增强系统的安全性。示例代码展示了如何阻止非授权IP地址的登录尝试。 ... [详细]
  • 本文介绍了一种算法,用于在一个给定的二叉树中找到一个节点,该节点的子树包含最大数量的值小于该节点的节点。如果存在多个符合条件的节点,可以选择任意一个。 ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • 本文介绍了多种将多行数据合并为单行的方法,包括使用动态SQL、函数、CTE等技术,适用于不同的SQL Server版本。 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • SQL 数据恢复技巧:利用快照实现高效恢复
    本文详细介绍了如何在 SQL 中通过数据库快照实现数据恢复,包括快照的创建、使用及恢复过程,旨在帮助读者深入了解这一技术并有效应用于实际场景。 ... [详细]
  • Kubernetes Services详解
    本文深入探讨了Kubernetes中的服务(Services)概念,解释了如何通过Services实现Pods之间的稳定通信,以及如何管理没有选择器的服务。 ... [详细]
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社区 版权所有