Commit 2PC i materialized view

Oracle zimplementował wiele zaawansowancyh mechanizmów i funkcjonalności, wraz ze wzrostem ich liczby stopień skomplikowania oprogramowania wzrasta i ilość potencjalnych błędów i interakcji rośnie.

Oracle pozwala tworzyć widoki zmaterializowane ( dawniej zwane dawniej jako snapshot - migawka ), które mogą być odświerzne w wielu trybach. Jednym z trybów jest odświerzanie przy zmianie danych, na których zbudowany jest widok zmaterializowany w momencie zatwierdzania (on commit).

Natomiast dla transakcji rozproszoncyh ( pomiedzy wieloma bazami dancyh ) używany jest mechanizm 2PC (Two-phase commit).

Niestety obydwa mechanizmy nie działają razem. Gdy tablica, na której zbudowane jest view zmaterializowane jest modyfikowana w transakcji rozproszonej, wystepuje bląd ORA-00603 :

create table gmt ( a number primary key);

create materialized view gmt_mv refresh on commit as select * from gmt;

insert into gmt select 1 from dual@DB_LINK_DO_INNEJ_BAZY;

SQL> commit;
commit
*
BŁĄD w linii 1:
ORA-00603: sesja serwera ORACLE zakończona błędem krytycznym

W alert logu dostępna jest informacja:

ORA-00603: sesja serwera ORACLE zakończona błędem krytycznym
ORA-00600: kod błędu wewnętrznego, argumenty: [4080], [1], [131], [], [], [], [], []

Leave a Reply