Materialized view и транзакции...

MaximusZ
Дата: 29.07.2005 13:02:06
Тут возникла следующая проблема!
Есть две БД - А и Б.
В БД А создан dblink_b к БД Б.
В БД А существует таблица - table_а.
На эту таблицу построено MV (materialized view) mv_table.
create materialized view MV_TABLE
BUILD immediate
refresh force on COMMIT
as
select
r.id,
r.num,
r.type,
r.date,
r.state
from table_а r
where r.status='2';
В БД Б есть процедура procedure_b. Процедура ничего не делает просто select 'A' into A from dual;
Следующий код, запускаемый из PL/SQL Developera, нормально отрабатывает.

declare
begin

procedure_b@dblink_b;
insert into table_f values (1,1,1,1,1);
commit;
end;


Этот же код вызываемый из приложения написаного на С# - вызывает ошибку
ORA-00603: ORACLE server session terminated by fatal error.

Если вставить после вызова удаленной процедуры commit - работает.
Если изменить параметры обновления MV с COMMIT на DEMAND, то код работает.
Но хотелось бы использовать именно конструкцию refresh on COMMIT.
В чем может быть проблема?
JcAlex
Дата: 29.07.2005 13:09:08
Буквально вчера нарвался на то же баг :-). В трейсах Оракл пишет немного по другому

http://www.sql.ru/forum/actualthread.aspx?tid=70030

Баг № 1385495. Пришлось сделать не on commit, а по требованию(on demand).
AlexanderKz
Дата: 29.07.2005 13:10:56
У меня в свое время возникла аналогичная проблема.
Любая распределенная транзакция, обновляющая локальную таблицу с представлением refresh on commit кладет канал. (Oracle 9.2.0.4)

Для проверки попробуй не из C# выполнить тот же код, но в процедуре вместо простого select написать какой-нибудь локальный insert. Если будет падать, значит те же грабли. Мне побороть не удалось(: Отказался от refresh on commit.
AndrewN
Дата: 29.07.2005 14:11:00
Наступал как-то на такие же грабли. :(
Оракл был 9.2.0.6