Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Материализованные представления и индексы  [new]
Sarkand
Member

Откуда:
Сообщений: 167
Как при полном обновлении материализованного представления отключить использования индекса.
1) При alter index disable - выдается ошибка:

ORA-02243: invalid ALTER INDEX or ALTER MATERIALIZED VIEW option
Cause: An option other than INITRANS, MAXTRANS,or STORAGE is specified in an ALTER INDEX statement or in the USING INDEX clause of an ALTER MATERIALIZED VIEW statement.

Action: Specify only legal options.
2) При drop index пакет становиться INVALID, хотя прямых ссылок на материализованные пердставления. Всё запросы в данном пакете выполняются через динамический SQL. (Это при условии, что кто использует в этот момент пакет)
3) При включеных индексах обновление материализованого представления выполняется очень долго. Всё уже перепробывал, ничто не хочет работать. Подскажите, кто чем может.
2 апр 08, 17:45    [5494174]     Ответить | Цитировать Сообщить модератору
 Re: Материализованные представления и индексы  [new]
Alexey Yatsenko
Member

Откуда:
Сообщений: 154
Oracle® Database SQL Reference

DISABLE Clause

DISABLE applies only to a function-based index. This clause lets you disable the use of a function-based index. You might want to do so, for example, while working on the body of the function. Afterward you can either rebuild the index or specify another ALTER INDEX statement with the ENABLE keyword.
2 апр 08, 20:26    [5495021]     Ответить | Цитировать Сообщить модератору
 Re: Материализованные представления и индексы  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
"Очень долго", это не диагноз. Сними трассировку с complete refresh, посмотри какие запросы тормозят процесс, тогда и решай что делать.
2 апр 08, 21:31    [5495201]     Ответить | Цитировать Сообщить модератору
 Re: Материализованные представления и индексы  [new]
givanov
Member

Откуда:
Сообщений: 757
begin
  dbms_mview.refresh
  ( list => 'B'
  , method => 'C'
  , atomic_refresh => false
  );
end;
?
3 апр 08, 11:21    [5496762]     Ответить | Цитировать Сообщить модератору
 Re: Материализованные представления и индексы  [new]
Sarkand
Member

Откуда:
Сообщений: 167
givanov
begin
dbms_mview.refresh
( list => 'B'
, method => 'C'
, atomic_refresh => false
);
end;

Что за мега - параметр atomic_refresh? Насколько я понял, он используется при подаче списка материлизованных представлений, разбивая их на отдельные транзакции. Я не использую список, но производительность у меня возросла в разы и главное размер redo size упал в 5 раз. Думаю переделать на atomic_refresh, надеюсь никаких траблов не возникнет. :)
3 апр 08, 12:13    [5497270]     Ответить | Цитировать Сообщить модератору
 Re: Материализованные представления и индексы  [new]
Тынц.
Guest
Sarkand

...
Что за мега - параметр atomic_refresh?
...

А кто мешает включить трассировку и почувствовать разницу между delete/insert и truncate/insert ? :)

+ Note 466181.1
3 апр 08, 21:14    [5501491]     Ответить | Цитировать Сообщить модератору
 Re: Материализованные представления и индексы  [new]
Sarkand
Member

Откуда:
Сообщений: 167
Поднимаю проблему снова, после установки atomic_refresh => FALSE, при попадании какого - нибудь select по даным материализованным представлениям получаю ошибку ORA-01410: invalid ROWID. Судя по всему в сегменте отката ничего нет и Oracle просто не находит эту запись.
7 апр 08, 15:52    [5513261]     Ответить | Цитировать Сообщить модератору
 Re: Материализованные представления и индексы  [new]
givanov
Member

Откуда:
Сообщений: 757
Sarkand
ORA-01410: invalid ROWID.
Тут надо что-то выбирать.
Думаете, если при живом запросе Вы индекс выключите - запросу не поплохеет?

Есть еще вариант с exchange partition. Там, вроде бы, начавшийся до exchange partition запрос будет читать данные со старого места и после exchange partition.

Алгоритм такой:
Создаете секционированную таблицу такой же структуры (поля и индексы), с одной секцией.
При необходимости обновить:
1. truncate этой секции.
2. insert /*+append*/ туда записи.
3. exchange partition этой секции с таблицей.
Между обновлениями хранятся две копии данных, старые и актуальные.

Из минусов - partition option лицензируется отдельно.
7 апр 08, 16:04    [5513368]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить