简体   繁体   English

在oracle 12c中分割范围分区的问题

[英]problems with splitiing the range partition in oracle 12c

I have a problem with splitting rang partition in oracle 12c. 我在oracle 12c中拆分rang分区时遇到问题。

i check it with some sources but I thought and saw it a lot. 我从一些来源进行了检查,但是我想了很多。 so may it has a simple error but I can't find it. 因此它可能有一个简单的错误,但我找不到它。 please check this code. 请检查此代码。 thanks. 谢谢。


first of all, I create this table 首先,我创建此表

CREATE TABLE SALES_SAMPLE_WITH_RANGE_PARTITION
(
DEP_NO      NUMBER (20),
PART_NO     VARCHAR2 (30),
COUNTRY     VARCHAR2(20),
DATES       DATE,
AMOUNT      NUMBER (20)
)
PARTITION BY RANGE(DATES)
(
  PARTITION q1_2012  VALUES LESS THAN(TO_DATE('2012/01/01','YYYY/MM/DD')),
  PARTITION q2_2012  VALUES LESS THAN(TO_DATE('2012/04/01','YYYY/MM/DD')),
  PARTITION q3_2012  VALUES LESS THAN(TO_DATE('2012/07/01','YYYY/MM/DD')),
  PARTITION q4_2012  VALUES LESS THAN(TO_DATE('2013/10/01','YYYY/MM/DD'))
);

after that, I insert these data into it 之后,我将这些数据插入其中

INSERT ALL
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES (10, '4519b', 'FRANCE', (TO_DATE('2012/04/17','YYYY/MM/DD')), 45000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (20, '3788a', 'INDIA', (TO_DATE('2012/05/11','YYYY/MM/DD')), 75000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (40, '9519b', 'US', (TO_DATE('2012/09/18','YYYY,MM/DD')), 145000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (20, '3788a', 'PAKISTAN', (TO_DATE('2012/06/21','YYYY/MM/DD')), 37500)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (40, '4577b', 'US', (TO_DATE('2012/06/30','YYYY/MM/DD')), 25000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (30, '7588b', 'CANADA', (TO_DATE('2012/03/26','YYYY/MM/DD')), 50000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (30, '9519b', 'CANADA', (TO_DATE('2012/09/09','YYYY/MM/DD')), 75000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (30, '4519b', 'CANADA', (TO_DATE('2012/06/08','YYYY/MM/DD')), 120000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (40, '3788a', 'US', (TO_DATE('2012/02/18','YYYY/MM/DD')), 4950)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (10, '9519b', 'ITALY', (TO_DATE('2012/02/19','YYYY/MM/DD')), 15000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (10, '9519a', 'FRANCE', (TO_DATE('2012/02/06','YYYY/MM/DD')), 650000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (10, '9519b', 'FRANCE', (TO_DATE('2012/12/16','YYYY/MM/DD')), 650000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (20, '3788b', 'INDIA', (TO_DATE('2012/02/14','YYYY/MM/DD')), 5090)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (40, '4788a', 'US',(TO_DATE('2012/09/17','YYYY/MM/DD')), 4950)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (40, '4788b', 'US', (TO_DATE('2012/12/11','YYYY/MM/DD')), 15000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (20, '4519a', 'INDIA', (TO_DATE('2012/11/21','YYYY/MM/DD')), 650000)
  INTO PP_SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (20, '4519b', 'INDIA', (TO_DATE('2012/12/16','YYYY/MM/DD')), 5090)
  SELECT * FROM DUAL;

and after that I try to split the last partition in two parts 然后,我尝试将最后一个分区分为两部分

 ALTER TABLE PP_SALES_SAMPLE_WITH_RANGE_PARTITION SPLIT PARTITION q4_2012 AT (TO_DATE('2012/11/15','YYYY/MM/DD') INTO 
  (
  PARTITION Q4_2012_P1,
  PARTITION Q4_2012_P2
  );

unfortunately it doesn't work. 不幸的是,它不起作用。 :( :(

please do me a favor and check this code. 请帮我一个忙,并检查此代码。 thanks. 谢谢。

SQL> CREATE TABLE SALES_SAMPLE_WITH_RANGE_PARTITION
(
DEP_NO      NUMBER (20),
PART_NO     VARCHAR2 (30),
COUNTRY     VARCHAR2(20),
DATES       DATE,
AMOUNT      NUMBER (20)
)
PARTITION BY RANGE(DATES)
(
  PARTITION q1_2012  VALUES LESS THAN(TO_DATE('2012/01/01','YYYY/MM/DD')),
  PARTITION q2_2012  VALUES LESS THAN(TO_DATE('2012/04/01','YYYY/MM/DD')),
  PARTITION q3_2012  VALUES LESS THAN(TO_DATE('2012/07/01','YYYY/MM/DD')),
  PARTITION q4_2012  VALUES LESS THAN(TO_DATE('2013/10/01','YYYY/MM/DD'))
)
Table created.
SQL> INSERT ALL
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES (10, '4519b', 'FRANCE', (TO_DATE('2012/04/17','YYYY/MM/DD')), 45000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (20, '3788a', 'INDIA', (TO_DATE('2012/05/11','YYYY/MM/DD')), 75000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (40, '9519b', 'US', (TO_DATE('2012/09/18','YYYY,MM/DD')), 145000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (20, '3788a', 'PAKISTAN', (TO_DATE('2012/06/21','YYYY/MM/DD')), 37500)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (40, '4577b', 'US', (TO_DATE('2012/06/30','YYYY/MM/DD')), 25000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (30, '7588b', 'CANADA', (TO_DATE('2012/03/26','YYYY/MM/DD')), 50000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (30, '9519b', 'CANADA', (TO_DATE('2012/09/09','YYYY/MM/DD')), 75000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (30, '4519b', 'CANADA', (TO_DATE('2012/06/08','YYYY/MM/DD')), 120000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (40, '3788a', 'US', (TO_DATE('2012/02/18','YYYY/MM/DD')), 4950)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (10, '9519b', 'ITALY', (TO_DATE('2012/02/19','YYYY/MM/DD')), 15000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (10, '9519a', 'FRANCE', (TO_DATE('2012/02/06','YYYY/MM/DD')), 650000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (10, '9519b', 'FRANCE', (TO_DATE('2012/12/16','YYYY/MM/DD')), 650000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (20, '3788b', 'INDIA', (TO_DATE('2012/02/14','YYYY/MM/DD')), 5090)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (40, '4788a', 'US',(TO_DATE('2012/09/17','YYYY/MM/DD')), 4950)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (40, '4788b', 'US', (TO_DATE('2012/12/11','YYYY/MM/DD')), 15000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (20, '4519a', 'INDIA', (TO_DATE('2012/11/21','YYYY/MM/DD')), 650000)
  INTO SALES_SAMPLE_WITH_RANGE_PARTITION  VALUES  (20, '4519b', 'INDIA', (TO_DATE('2012/12/16','YYYY/MM/DD')), 5090)
  SELECT * FROM DUAL
17 rows created.
SQL> REM ## Gather stats and show row nums before the partiton split
SQL> BEGIN
  SYS.DBMS_STATS.GATHER_TABLE_STATS (
     OwnName           => 'SOA_USER1'
    ,TabName           => 'SALES_SAMPLE_WITH_RANGE_PARTITION'
    ,Estimate_Percent  => NULL
    ,Cascade           => TRUE
  ); 
END;
 PL/SQL procedure successfully completed.
SQL> col partition_name for a20
SQL> select partition_name, NUM_ROWS from user_tab_partitions

PARTITION_NAME         NUM_ROWS
-------------------- ----------
Q1_2012                       0
Q2_2012                       5
Q3_2012                       5
Q4_2012                       7

4 rows selected.
SQL> ALTER TABLE SALES_SAMPLE_WITH_RANGE_PARTITION SPLIT PARTITION q4_2012 AT (TO_DATE('2012/11/15','YYYY/MM/DD')) INTO 
  (
  PARTITION Q4_2012_P1,
  PARTITION Q4_2012_P2
  )
Table altered.
SQL> REM ## Gather stats and show row nums before the partiton split
SQL> BEGIN
  SYS.DBMS_STATS.GATHER_TABLE_STATS (
     OwnName           => 'SOA_USER1'
    ,TabName           => 'SALES_SAMPLE_WITH_RANGE_PARTITION'
    ,Estimate_Percent  => NULL
    ,Cascade           => TRUE
  ); 
END;
 PL/SQL procedure successfully completed.

SQL> select partition_name, NUM_ROWS from user_tab_partitions

PARTITION_NAME         NUM_ROWS
-------------------- ----------
Q1_2012                       0
Q2_2012                       5
Q3_2012                       5
Q4_2012_P1                    3
Q4_2012_P2                    4

5 rows selected.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM