Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复合间隔分区-按月份划分的第一个分区和按日期划分的子分区-Oracle 11g R2_Oracle_Plsql_Oracle11g_Partitioning_Database Partitioning - Fatal编程技术网

复合间隔分区-按月份划分的第一个分区和按日期划分的子分区-Oracle 11g R2

复合间隔分区-按月份划分的第一个分区和按日期划分的子分区-Oracle 11g R2,oracle,plsql,oracle11g,partitioning,database-partitioning,Oracle,Plsql,Oracle11g,Partitioning,Database Partitioning,我们必须将快照数据从源(SQL Server)拉到目标(Oracle)。源中的数据大部分是每天追加的,尽管可能很少有删除和更新。由于数据在源中被更新和删除,因此很难知道我们在过去某个特定日期拥有哪些数据,除非我们通过使用新字段“as_of_dt”将日常快照数据拉入目标中。考虑到目标表顶部的报告要求,最好按月份划分,按日期细分 我可以创建如下表- CREATE TABLE SUBPART_TABLE ( AS_OF_DT DATE, AS_OF_DAY NUMBER(2,0) GENERA

我们必须将快照数据从源(SQL Server)拉到目标(Oracle)。源中的数据大部分是每天追加的,尽管可能很少有删除和更新。由于数据在源中被更新和删除,因此很难知道我们在过去某个特定日期拥有哪些数据,除非我们通过使用新字段“as_of_dt”将日常快照数据拉入目标中。考虑到目标表顶部的报告要求,最好按月份划分,按日期细分

我可以创建如下表-

CREATE TABLE SUBPART_TABLE
(
  AS_OF_DT DATE,
  AS_OF_DAY NUMBER(2,0) GENERATED ALWAYS AS (EXTRACT(DAY FROM AS_OF_DT)) VIRTUAL,
  ... more COLUMNS
)
partition by range (AS_OF_DT) interval (numtoyminterval(1,'MONTH'))
   SUBPARTITION BY LIST (AS_OF_DAY)
   SUBPARTITION TEMPLATE
     (SUBPARTITION P01 VALUES (1),
      SUBPARTITION P02 VALUES (2),
      SUBPARTITION P03 VALUES (3),
      ...
      SUBPARTITION P30 VALUES (30)
      SUBPARTITION P31 VALUES (31)
      )
(  
  partition P201706 values less than (to_date('2017-07-01','yyyy-mm-dd'))
);
查看解释计划,我认为我必须包括以下两个过滤器,以便Oracle只进行单子分区扫描-

WHERE AS_OF_DT = TO_DATE('2017-06-15', 'yyyy-mm-dd')
AND AS_OF_DAY = 15; 
如何使用相同的日期字段(在本例中为“as_of_dt”)按月份进行分区,并按日期进行子分区,这样我就不必为Oracle添加额外的筛选器来只扫描属于该日期的子分区


如果您想知道为什么我不按日期分区,而不是按月份分区,然后按日期子分区,原因是主分区太多(365/年),我认为这不是个好主意

为什么子分区比多个分区更好?通常,子分区与分区相同。在我看来,“分部”这个名字有点误导。这是一个更好的术语。分区和子分区之间的层次依赖关系仅与创建相关,分区和子分区的段是相同的,即,如果查询必须访问分区或子分区,则没有任何区别。Oracle允许1024K-1个分区,即超过一百万个分区。365应该是没有问题的,Ohtherwise 1周怎么样,即
按范围划分(以DT为单位)间隔(numtodsinterval(7,'DAY'))