创建分区正在使用带有本地时区的时间戳[Oracle 11g]

时间:2014-11-19 15:12:03

标签: database oracle11g partitioning ddl

在oracle数据库11g中创建分区时,我尝试找到一个解决方案。我认为分区不能在数据类型" TIMESTAMP WITH LOCAL TIME ZONE"上创建,是真的吗?

我发现下面的内容谈到了这个主题: https://community.oracle.com/message/9515330

任何人都知道这个问题的解决方案吗?

代码示例:

CREATE TABLE "XPTO" 
(
  "XPTO_DATE" TIMESTAMP (6) WITH LOCAL TIME ZONE
)
STORAGE(BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TABLES"
PARTITION BY RANGE ("XPTO_DATE") INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) 
(
  PARTITION "P1" VALUES LESS THAN (TIMESTAMP' 2013-01-01 00:00:00')
  SEGMENT CREATION DEFERRED 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
  NOCOMPRESS LOGGING
  TABLESPACE "TABLES"
 )

SQL错误:ORA-14020 - "可能没有为表分区指定此物理属性" ...

1 个答案:

答案 0 :(得分:5)

您不能在该类型的列上进行间隔分区。您可能会添加一个虚拟列,该列具有与当地时区时间戳相当的UTC,并在其上添加分区:

CREATE TABLE "XPTO" 
(
  "XPTO_DATE" TIMESTAMP (6) WITH LOCAL TIME ZONE,
  "XPTO_GMT" TIMESTAMP (6) GENERATED ALWAYS AS (SYS_EXTRACT_UTC("XPTO_DATE"))
)
STORAGE(BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TABLES"
PARTITION BY RANGE ("XPTO_GMT") INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) 
(
  PARTITION "P1" VALUES LESS THAN (TIMESTAMP '2013-01-01 00:00:00 UTC')
  SEGMENT CREATION DEFERRED 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
  NOCOMPRESS LOGGING
  TABLESPACE "TABLES"
 );

table "XPTO" created.

分区的大小大致相同,但边界会有所不同,但这可能或不重要 - 我想这对于分区交换是一个问题,但不确定它是否会对你有任何其他明显的影响