Oracle Split partition

klmntmp
Дата: 23.11.2009 19:49:19
Ни чё не понимаю)
Есть табличка:
 CREATE TABLE TEST2
   (	"ID" NUMBER, 
	"ENTRYDATE" DATE
   ) 
  PARTITION BY RANGE ("ENTRYDATE") 
 (PARTITION "TEST_0709"  VALUES LESS THAN (TO_DATE('2009-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 
  TABLESPACE "TEST_D0709" , 
 PARTITION "TEST_0809"  VALUES LESS THAN (TO_DATE(' 2009-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 
  TABLESPACE "TEST_D0809" , 
 PARTITION "TEST_0909"  VALUES LESS THAN (TO_DATE(' 2009-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 
  TABLESPACE "TEST_D0909") ;

далее хочу добавить партицию для 6 месяца... почитал делается это делением в моём случае за 7 т.е. как то вот так:
ALTER TABLE TEST2
SPLIT PARTITION TEST_0709
AT (TO_DATE('01-08-2009','DD-MM-YYYY')) 
INTO (PARTITION TEST_0709 TABLESPACE TEST_D0709, PARTITION TEST_0609 TABLESPACE TEST_D0609)
на что получаю
автор
ORA-14080: partition cannot be split along the specified high bound

далее совершенно не понятно каким макаром он догадается что TEST_0609 это для 6 месяца я предпологал что будет типа:
ALTER TABLE TEST2
SPLIT PARTITION TEST_0709
AT (TO_DATE('01-08-2009','DD-MM-YYYY')) 
INTO (PARTITION TEST_0709 VALUES LESS THAN (TO_DATE('01-08-09','DD-MM-YY')) TABLESPACE TEST_D0709, PARTITION TEST_0609 VALUES LESS THAN (TO_DATE('01-07-09','DD-MM-YY')) TABLESPACE TEST_D0609);
на что получаю
автор
ORA-14020: this physical attribute may not be specified for a table partition

почитал действительно чёт не видел я что бы в примерах было подобное
ладно мб сначала режем потом modify?... вернулся к 1 варианту ни как
P.S
1 TEST_0709 TO_DATE(' 2009-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
2 TEST_0809 TO_DATE(' 2009-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
3 TEST_0909 TO_DATE(' 2009-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
andrey_anonymous
Дата: 23.11.2009 19:53:46
Плохо когда доку до конца не читаете.
Еще хуже - когда выключаете при этом голову.
Вот для зачем, скажите, в split указывается AT? Праальна, это граница.
А зачем тогда "values less than" в сплите пишете?
andrey_anonymous
Дата: 23.11.2009 20:02:27
На бедность:
CREATE TABLE ANE_TEST2(ID NUMBER, ENTRYDATE DATE )
  PARTITION BY RANGE (ENTRYDATE)
 ( PARTITION TEST_0709  VALUES LESS THAN ( date '2009-08-01')
 , PARTITION TEST_0809  VALUES LESS THAN ( date '2009-09-01')
 , PARTITION TEST_0909  VALUES LESS THAN ( date '2009-10-01')
 ) ;
 
Table created

alter table ANE_TEST2 split partition  TEST_0709 at (date '2009-07-01')
INTO (PARTITION TEST_0709, PARTITION TEST_0609);
 
Table altered
klmntmp
Дата: 23.11.2009 20:05:23
Еще хуже - когда выключаете при этом голову.
да сделал!=) спасибо))
P.S до самого дошло!))
samatom
Дата: 31.10.2013 12:30:46
Комрады, подскажите, плиз:
необходимо имеющуюся секцию за 1 год разбить на секции по 1 мес. В итоге имею 12 ALTER TABLE - таких какие приведены здесь выше. Админ говорит, что можно вместо 12 DDL сделать 1, т.к. при каждом SPLIT оракл создает 2 новые секции и раскидывает по ним данные старой секции. Таким образом, можно избежать лишних операций и существенно ускорить процесс.
Но я не смог найти примера. Данная конструкция у меня не работает и выдает ORA-14126: only a <parallel clause> may follow description(s) of resulting partitions
+
ALTER TABLE KRN_ENTRIES_ALL
SPLIT
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_01 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES), 
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_02 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES),        
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_03 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES),
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_04 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES),
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_05 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES),
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_06 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES),
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_07 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES),
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_08 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES),
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_09 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES),
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_10 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES),
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2013-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_11 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES),
PARTITION KRN_FUTURE_ENTRIES AT (TO_DATE(' 2014-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  INTO (PARTITION KRN_ENTRIES_2013_12 TABLESPACE ENTRIES_2013, PARTITION KRN_FUTURE_ENTRIES)
/*update indexes PARALLEL 4 */;
Версия - 10.2. Возможно ли использование 1 DDL в моем случае? Заранее спасибо.
Sayan Malakshinov
Дата: 31.10.2013 13:22:34
samatom,

Только с 12с, а до этого только ускорить можно через ctas из этой секции в секционированную и потом эксченджами возвернуть все обратно
samatom
Дата: 22.01.2014 10:21:08
xtender, добрый день!

т.к. ни разу этого не делал, хотел уточнить сценарий (хочется добиться минимального простоя).

Имеем 1 большую секцию за год (213 млн записей). Необходимо разбить её на месяцы.
Примерный план:
1) с помощью CTAS создаем 12 таблиц для каждого месяца
2) делаем Truncate большой секции
3) разбиваем её на 12 секций
4) с помощью EXCHANGE PARTITION в каждую секцию загоняем соответствующую ей таблицу из п.1
5) перестраиваем индексы, пересобираем статистику по новым патициям - при необходимости.

Взлетит?
Заранее спасибо.
Добрый Э - Эх
Дата: 22.01.2014 10:32:36
samatom,

для ради "на всякий случай" я бы не стал делать транкейт большой секции, а сделал бы и ей эксчендж с отдельно стоящей постой таблицей.
Sayan Malakshinov
Дата: 22.01.2014 11:04:15
samatom
1) с помощью CTAS создаем 12 таблиц для каждого месяца
ctas проще сделать сразу в одну секционированную на 12 месяцев таблицу
Sayan Malakshinov
Дата: 22.01.2014 11:05:21
причем в параллели