Commit 2PC i materialized view
czwartek, październik 11th, 2007Oracle 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], [], [], [], [], []