【问题标题】:Create partition is using timestamp with local time zone [Oracle 11g]创建分区使用带有本地时区的时间戳 [Oracle 11g]
【发布时间】:2014-11-19 15:12:02
【问题描述】:

在 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 -“可能未为表分区指定此物理属性”...

【问题讨论】:

  • 您得到的是 ORA-14020,而不是 ORA-14751:间隔分区表的分区列的数据类型无效?不过我认为你是对的......

标签: database oracle11g partitioning ddl


【解决方案1】:

您不能对该类型的列进行间隔分区。您可能会添加一个与您的本地时区时间戳等效的 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.

分区的大小大致相同,但边界会有所不同,但这可能无关紧要 - 我想分区交换会出现问题,但不确定它是否会对您产生任何其他明显的影响.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2015-10-07
    相关资源
    最近更新 更多