在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 - "可能没有为表分区指定此物理属性" ...
答案 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.
分区的大小大致相同,但边界会有所不同,但这可能或不重要 - 我想这对于分区交换是一个问题,但不确定它是否会对你有任何其他明显的影响