powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / перестройка индекса при разбиении партиции
11 сообщений из 11, страница 1 из 1
перестройка индекса при разбиении партиции
    #39199567
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
перестройка индекса при разбиении партиции
    #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
перестройка индекса при разбиении партиции
    #39230953
supersupport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aag,
правильно ли я понимаю что вы без согласия вендора решили создавать объект в их схеме?По моему это не возможно.
...
Рейтинг: 0 / 0
перестройка индекса при разбиении партиции
    #39230961
supersupport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aag,может быть имеет смысл перестроить уже существующую таблицу?
create or replace table ENTRY ...
...
Рейтинг: 0 / 0
перестройка индекса при разбиении партиции
    #39231026
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
supersupport,

новый тролль?
ты вообще хоть понял о чем тут речь идет? :)
И зачем поднимать старую тему?
...
Рейтинг: 0 / 0
перестройка индекса при разбиении партиции
    #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
перестройка индекса при разбиении партиции
    #39235145
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FULL SCAN-а?
Как я понимаю, нет
...
Рейтинг: 0 / 0
перестройка индекса при разбиении партиции
    #39235203
Фотография Alexey Zhidkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровFULL SCAN-а?
Как я понимаю, нет
ок. будем строить индекс...
...
Рейтинг: 0 / 0
перестройка индекса при разбиении партиции
    #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
перестройка индекса при разбиении партиции
    #39363078
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Посмотри синтаксис команды
2. Локальные индексы разбиваются автоматом при разбиении таблички, ручками это запрещено
3. Возможно, тебе достаточно будет переименовать автоматически созданную новую секцию индекса (а скорее всего и это не надо)
...
Рейтинг: 0 / 0
перестройка индекса при разбиении партиции
    #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
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / перестройка индекса при разбиении партиции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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