当前位置: 首页 > 面试题库 >

Oracle表动态分区

安轶
2023-03-14
问题内容

我正在研究一个Java代码,它基于INSERT_DATETIME字段(时间戳)每15分钟从oracle表中上传数据。我需要根据15分钟的间隔对表进行分区。有没有办法动态地做到这一点(分区)。我在oracle
SQL开发人员中使用oracle11g。

我创建的表之一的示例,我想添加一个分区:

CREATE TABLE "PV_TNPM"."TEJAS_CARD_REPORT" 
(   "INSERT_DATETIME" TIMESTAMP (6) NOT NULL ENABLE, 
"NAME" VARCHAR2(100 BYTE), 
"IPADDRESS" VARCHAR2(100 BYTE), 
"PRODUCTCODE" VARCHAR2(100 BYTE), 
"LCTNAME" VARCHAR2(100 BYTE), 
"CARDTYPELABEL" VARCHAR2(100 BYTE), 
"SOFTWAREVERSION" VARCHAR2(100 BYTE)
) SEGMENT CREATION IMMEDIATE 
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 32768 NEXT 1523712 MINEXTENTS 1 MAXEXTENTS 1017
PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ;

我对SQL不熟悉,因为上面的代码只是从我创建的表中生成的。任何帮助表示赞赏。谢谢你


问题答案:

使用间隔分区创建表:

CREATE TABLE TEJAS_CARD_REPORT
(
    "INSERT_DATETIME" TIMESTAMP (6) NOT NULL ENABLE, 
    "NAME"         VARCHAR2(100 BYTE), 
    "IPADDRESS" VARCHAR2(100 BYTE), 
    "PRODUCTCODE" VARCHAR2(100 BYTE), 
    "LCTNAME" VARCHAR2(100 BYTE), 
    "CARDTYPELABEL" VARCHAR2(100 BYTE), 
    "SOFTWAREVERSION" VARCHAR2(100 BYTE)
) partition by range(insert_datetime) interval (interval '15' minute)
(
    partition initial_partition values less than (date '2000-01-01')
);

在插入数据时动态创建分区。

insert into tejas_card_report(insert_datetime) values (timestamp '2000-01-01 00:14:00');
insert into tejas_card_report(insert_datetime) values (timestamp '2000-01-01 00:29:00');
insert into tejas_card_report(insert_datetime) values (timestamp '2000-10-11 00:00:00');

SQL> select partition_name, high_value from dba_tab_partitions where table_name = 'TEJAS_CARD_REPORT';

PARTITION_NAME       HIGH_VALUE
-------------------- --------------------------------------------------------------------------------
SYS_P21516           TIMESTAMP' 2000-10-11 00:15:00'
SYS_P21515           TIMESTAMP' 2000-01-01 00:30:00'
SYS_P21514           TIMESTAMP' 2000-01-01 00:15:00'
INITIAL_PARTITION    TIMESTAMP' 2000-01-01 00:00:00'

无关紧要,请避免TABLESPACE "SYSTEM"。您几乎永远都不想在SYSTEM表空间中存储任何用户或应用程序数据。



 类似资料:
  • 跟踪自由或填充分区的更好和最流行的方法是使用链表。 在这种方法中,操作系统维护一个链表,每个节点代表每个分区。 每个节点都有三个字段。 节点的第一个字段存储一个标志位,该标志位显示该分区是一个洞还是某个进程在里面。 第二个字段存储分区的起始索引。 第三个字段存储分区的结束索引。 如果某个分区在某个时间点被释放,那么该分区将与其相邻的空闲分区合并,而不会做任何额外的工作。 在使用这种方法时需要注意一

  • 现在,当我执行这个查询时: 请帮助我 1。既然分区不在ITEM_COLOR列上,Oracle将如何确定要转到哪个分区? 2。上面的查询不会从分区中受益吗? 3。SQL查询是否需要在WHERE子句中包含分区列,以便从分区中受益。 4。在分区的情况下如何使用索引?

  • 我有oracle查询,我想分析。表具有分区。我没有那么多关于分区的知识。我想检查这个分区是在什么条件下创建的。为了检查表是否已分区,我使用了下面的查询,它表示对于表是活动的。 下面是我想分析的问题:

  • 本文向大家介绍YII动态模型(动态表名)支持分析,包括了YII动态模型(动态表名)支持分析的使用技巧和注意事项,需要的朋友参考一下 本文分析了YII动态模型(动态表名)支持机制。分享给大家供大家参考,具体如下: 给YII 框架增加动态模型支持 Yii框架中的数据模型使用静态机制,如果要使用模型方式操作某张数据表,就必须得事先创建数据表对应的模型类(位于 protected/models 目录下),

  • 主要内容:动态分区比固定分区的优势,动态分区的缺点,复杂的内存分配动态分区试图克服由固定分区造成的问题。 在这种技术中,分区大小最初并未声明。 它在进程加载时声明。 第一个分区是为操作系统保留的。 剩余空间分成几部分。 每个分区的大小将等于进程的大小。 分区大小根据进程的需要而变化,以避免内部碎片。 动态分区比固定分区的优势 1. 没有内部碎片 考虑到动态分区中的分区是根据进程的需要创建的,很明显,不会有任何内部碎片,因为分区中不会有任何未使用的剩余空间。 2.

  • 我有一些静态数据,我正在使用union all的帮助创建select语句,我正在将这些数据与DB表(部门)进行比较。在减的帮助下,我将得到额外的记录,在数据库表中,我需要删除那些记录。.....需要同步现有的记录与静态数据,我希望这将清除的要求… 试图在下面的查询中删除select查询的resultSet,我不确定我的错误在哪里…获取SQL错误:ORA-01732:此视图上的数据操作不合法0173