Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / перестройка индекса при разбиении партиции / 11 сообщений из 11, страница 1 из 1
24.03.2016, 12:45
    #39199567
aag
aag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
Есть партиционированная таблица,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create table W4_ENTRY$T
(
  ID            NUMBER(18) not null,
  LQL           NUMBER not null,
  ACCOUNT       NUMBER not null,
  POSTING_DATE  NUMBER not null,
  AMOUNT        NUMBER(23,5) not null,
  FEE_AMOUNT    NUMBER(23,5) not null,
  M_TRANSACTION NUMBER(18),
  REQUEST_CAT   VARCHAR2(3),
  SERVICE_CLASS VARCHAR2(3)
)
partition by range (POSTING_DATE)
(
  partition P_2013_01_01 values less than (20130101),
....
  partition P_2015_11_01 values less than (20151101),
  partition P_2016_01_01 values less than (20160101),
  partition P_MAXVALUE values less than (MAXVALUE)
);
create index W4_ENTRY$IACCDT on W4_ENTRY$T (ACCOUNT, POSTING_DATE);
create index W4_ENTRY$IDT on W4_ENTRY$T (POSTING_DATE);
create index W4_ENTRY$MTRAN on W4_ENTRY$T (M_TRANSACTION)



Индексы W4_ENTRY$IACCDT, W4_ENTRY$IDT также разбиты по партициям.
Сейчас наступает момент, когда хочется отодвинуть MAXVALUE подальше, т.е. разбить последнюю партицию на две

Код: plsql
1.
2.
3.
alter table w4_entry$t
split partition P_MAXVALUE at (20160331) 
into (partition P_2016_04_01, partition P_MAXVALUE);



Есть несколько вопросов, связанных в основном с желанием понять как будет работать механизм разбиения. Ибо таблица гигантская и используется постоянно (почти круглосуточно на чтение и 2-4 часа на обновление), возможности экспериментировать с ней нет.
1) Как я понимаю, поскольку все данные сейчас по текущую дату, физически записи перемещаться не будут и разбиение произойдет быстро?
2) Таким же макаром нужно разбить индексы
alter index W4_ENTRY$IDT split partition P_MAXVALUE at (20160331)
into (partition P_2016_04_01, partition P_MAXVALUE) nologging;
3) Нужно ли при этом делать update global indexes при alter table? В доке написано
Any global indexes, or all partitions of partitioned global indexes, are marked UNUSABLE and must be rebuilt.
Сделал тестовую табличку с партициями, разбил, посмотрел dba_ind_partitions - все индексы и все партиции остались USABLE, и с update indexes, и без. Причем это и при разбиении, и если не делать оного.
4) А локальный индекс обновится сам автоматически?


Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
25.03.2016, 02:00
    #39200201
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
Если при разбиении (split) секции таблицы хотя бы одна из двух получившихся новых не имеет записей, то будет просто переиспользован старый сегмент, добавлен пустой и инвалидации индексов не будет (Fast Split partitioning in 9iR2 (Doc ID 232628.1), How to Perform a FAST SPLIT PARTITION Using ALTER TABLE? (Doc ID 1268714.1))

Локальные индексы также разобьются и останутся валидными

Но вот дальше разбиение глобальных индексов -- это, насколько помню, нельзя сделать в ONLINE, поэтому может потребоваться "технологическое окно"
...
Рейтинг: 0 / 0
06.05.2016, 15:35
    #39230953
supersupport
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
aag,
правильно ли я понимаю что вы без согласия вендора решили создавать объект в их схеме?По моему это не возможно.
...
Рейтинг: 0 / 0
06.05.2016, 15:41
    #39230961
supersupport
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
aag,может быть имеет смысл перестроить уже существующую таблицу?
create or replace table ENTRY ...
...
Рейтинг: 0 / 0
06.05.2016, 17:01
    #39231026
Q.Tarantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
supersupport,

новый тролль?
ты вообще хоть понял о чем тут речь идет? :)
И зачем поднимать старую тему?
...
Рейтинг: 0 / 0
13.05.2016, 13:48
    #39235140
Alexey Zhidkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
Вячеслав ЛюбомудровЕсли при разбиении (split) секции таблицы хотя бы одна из двух получившихся новых не имеет записей, то будет просто переиспользован старый сегмент, добавлен пустой и инвалидации индексов не будет (Fast Split partitioning in 9iR2 (Doc ID 232628.1), How to Perform a FAST SPLIT PARTITION Using ALTER TABLE? (Doc ID 1268714.1))

Вопрос как к гуру...
Имеем партицированную таблицу, выполняем все условия для FAST SPLIT. Но есть одно "но" - нет индекса по партицироемому полю (дата). В итоге имеем full scan партиции, все остальное - как положено - индексы целы, данные на прежнем месте + созданная новая партиция.
Без создания индекса можно этого избежать?
...
Рейтинг: 0 / 0
13.05.2016, 13:52
    #39235145
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
FULL SCAN-а?
Как я понимаю, нет
...
Рейтинг: 0 / 0
13.05.2016, 14:44
    #39235203
Alexey Zhidkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
Вячеслав ЛюбомудровFULL SCAN-а?
Как я понимаю, нет
ок. будем строить индекс...
...
Рейтинг: 0 / 0
08.12.2016, 14:51
    #39362608
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
посоветуйте и мне - индекс на две части разбить. Примеры смотрел, походжего не нашел
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
SQL> DROP TABLE Tt
Table dropped.

SQL> CREATE TABLE Tt
(
  KDPL      NUMBER,
  DTOT      DATE NOT NULL
)
PARTITION BY RANGE (DTOT)
(  
  PARTITION BUX_2016 VALUES LESS THAN (TO_DATE('2016-01-01', 'YYYY-MM-DD'))
)
Table created.

SQL> CREATE INDEX tt_INDX ON tt
(DTOT, KDPL)
LOCAL (PARTITION ind_2016)
Index created.

SQL> ALTER TABLE tt ADD PARTITION bux_2017 VALUES LESS THAN (DATE '2018-01-01')
Table altered.

SQL> ALTER INDEX tt_INDX SPLIT PARTITION ind_2016 VALUES (LESS THAN DATE '2018-01-01') 
INTO (PARTITION ind_2016, PARTITION ind_2017)

ALTER INDEX tt_INDX SPLIT PARTITION ind_2016 VALUES (LESS THAN DATE '2018-01-01') 
INTO (PARTITION ind_2016, PARTITION ind_2017)
Error at line 21
ORA-14308: граничный элемент секции должен быть одним из следующих: строка, литерал даты-времени или интервала, число или NULL
...
Рейтинг: 0 / 0
09.12.2016, 03:55
    #39363078
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
1. Посмотри синтаксис команды
2. Локальные индексы разбиваются автоматом при разбиении таблички, ручками это запрещено
3. Возможно, тебе достаточно будет переименовать автоматически созданную новую секцию индекса (а скорее всего и это не надо)
...
Рейтинг: 0 / 0
09.12.2016, 08:10
    #39363111
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перестройка индекса при разбиении партиции
Вячеслав Любомудров1. Посмотри синтаксис команды
2. Локальные индексы разбиваются автоматом при разбиении таблички, ручками это запрещено
3. Возможно, тебе достаточно будет переименовать автоматически созданную новую секцию индекса (а скорее всего и это не надо)спасибо, всё сделал
Код: plsql
1.
2.
3.
alter INDEX BUX.TT_INDX rebuild  PARTITION BUX_2017 TABLESPACE ind_2017;

alter INDEX BUX.TT_INDX rename  PARTITION BUX_2017 to ind_2017;
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / перестройка индекса при разбиении партиции / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]