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



在oracle数据库11g中创建分区时,我尝试为我的问题找到一种解决方案。我认为无法在数据类型"具有本地时区的时间戳"上创建分区,这是真的吗?

我发现下面谈论这个主题的脚步: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 - "可能未为表分区指定此物理属性"...

不能在该

类型的列上间隔分区。您可以添加具有与本地时区时间戳等效的 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.

分区的大小大致相同,但边界会略有不同,但这可能无关紧要 - 我想这对分区交换来说会是一个问题,但不确定它是否会对你产生任何其他明显的影响。

最新更新