Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах! / 21 сообщений из 21, страница 1 из 1
03.06.2016, 17:59
    #39250333
ORAngutang
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
есть множество базовых таблиц, на которых висят mv-логи (MLOG$_BaseTbl1, MLOG$_BaseTbl2 ... MLOG$_BaseTblN ) и от которых зависят разные всякие MViews ( с опциями REFRESH FAST ON DEMAND !). И некий джоб, который "рефрешивает" все эти вьюхи каждые 15 минут. Всё отлично и быстро работает.
Проблема однако начинается, когда кто-то изменяет (DDL) какую-то из базовых таблиц BaseTbX (ну напр. новая колонка на базовой таблице (которая к MLOG$ и MVs) не имеет отношения. Потом рефреш с опцией Fast ("F" или "?") уже нормально не работает.
автор (ORA-12048: error encountered while refreshing materialized view , ORA-00904: "MYSCHEM$"."CHANGEDDATETIME" ORA-06512: in "SYS.DBMS_SNAPSHOT", row 2821)
Работает только с "C"(=complete).
Если правильный универсальный подход для решения этой проблемы? (а то пока, после каждого DDL на одной из базовых таблиц, о приходится полностью удалять(drop) все MLOG$_ и MViews и пересоздавать их снова)

Заранее всем спасибо за конструктивные советы!

____________________________________________________________
сейчас работаю на: Oracle 12.1.0.2.0, 64bit, standard edition, OU-Linux.
...
Рейтинг: 0 / 0
03.06.2016, 18:13
    #39250338
ORAngutang
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
и ещё чисто DBA-шный вопрос: как отключить (в Oracle-12c) запись в alert.log и trc-ы сообщений о проблемах с MViews?

авторThu Jun 02 18:30:02 2016
Errors in file /azt/opt/oracle/admin/aztpro/diag/rdbms/aztpro/aztpro/trace/aztpro_j003_20407.trc:
ORA-00904: invalid identifier: "MAZ$"."KOSTENART":


а то для нас это некоторый overkill! Ошибки мы ловим в свой лог! (которые пишется из нашего JOB-a)
...
Рейтинг: 0 / 0
03.06.2016, 19:11
    #39250369
UDW
UDW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
ORAngutang,

Если вставляемые столбцы не отражены в матвьюхе, то после операции DDL надо выполнить dbms_repcat.generate_replication_support, чтобы обновить триггеры для имененной родительской таблицы. Все должно работать.
...
Рейтинг: 0 / 0
03.06.2016, 20:26
    #39250418
ORAngutang
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
UDW,

Cпасибо, но пока не идёт! Пробую:

авторbegin dbms_repcat.generate_replication_support( sname => 'MYSCHEMA', oname => 'MLOG$_BaseTblX', type => 'table' ); end;

получаю:
Код: plaintext
ORA-23308 object does not exist or is invalid



а что в "oname =>" подставлять то? Базовую таблицу? Её MLOG$?(cм выше)? Таблицу самой MV? Пробывал и то и другое и третее! Во всех 3х случаях огребаю ORA-23308 !

P.S. это случайно не EE-фича? А то у нас Standard Edition! ;-)
...
Рейтинг: 0 / 0
03.06.2016, 21:53
    #39250477
UDW
UDW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
ORAngutang,

Имя объекта надо указывать, а не имя журнала.
Кстати, журнал строится по первичному ключу.
Все записи в журнале делаются триггерами реп.поддержки.
...
Рейтинг: 0 / 0
03.06.2016, 22:04
    #39250484
ORA__SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
ORAngutang,
А что если прикрутить:
Код: plsql
1.
drop materialized view preserve table и затем create materialized view on prebuilt table
...
Рейтинг: 0 / 0
04.06.2016, 06:50
    #39250553
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
ORAngutangи ещё чисто DBA-шный вопрос: как отключить (в Oracle-12c) запись в alert.log и trc-ы сообщений о проблемах с MViews?

авторThu Jun 02 18:30:02 2016
Errors in file /azt/opt/oracle/admin/aztpro/diag/rdbms/aztpro/aztpro/trace/aztpro_j003_20407.trc:
ORA-00904: invalid identifier: "MAZ$"."KOSTENART":


а то для нас это некоторый overkill! Ошибки мы ловим в свой лог! (которые пишется из нашего JOB-a)

интересно, а откуда ваш job берет информацию о таких ошибках?
...
Рейтинг: 0 / 0
04.06.2016, 16:02
    #39250631
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
UDWORAngutang,

Все записи в журнале делаются триггерами реп.поддержки.

А с какого перепугу ты решил у ORAngutang'а advanced replication с мастерами, триггeрами и прочее? Скорее всего у него банально basic replication: таблица + журнал + матпредставление с fast refresh. И он должен работать:

Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
SQL> select  banner
  2    from  v$version
  3  /

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
PL/SQL Release 12.1.0.1.0 - Production
CORE    12.1.0.1.0      Production
TNS for 64-bit Windows: Version 12.1.0.1.0 - Production
NLSRTL Version 12.1.0.1.0 - Production

SQL> create table tbl(ename varchar2(20))
  2  /

Table created.

SQL> alter table tbl
  2    add constraint tbl_pk
  3      primary key(ename)
  4  /

Table altered.

SQL> create materialized view log on tbl
  2  /

Materialized view log created.

SQL> create materialized view tbl_mv
  2    refresh fast
  3    on demand
  4    as
  5      select  *
  6        from  tbl
  7  /

Materialized view created.

SQL> insert
  2    into tbl
  3    select  ename
  4      from  emp
  5  /

14 rows created.

SQL> commit
  2  /

Commit complete.

SQL> exec dbms_mview.refresh('tbl_mv','f');

PL/SQL procedure successfully completed.

SQL> alter table tbl
  2    add job varchar2(20)
  3  /

Table altered.

SQL> exec dbms_mview.refresh('tbl_mv','f');

PL/SQL procedure successfully completed.

SQL> update tbl
  2     set job = (select job from emp where emp.ename = tbl.ename)
  3  /

14 rows updated.

SQL> commit
  2  /

Commit complete.

SQL> exec dbms_mview.refresh('tbl_mv','f');

PL/SQL procedure successfully completed.

SQL> select  *
  2    from  tbl_mv
  3  /

ENAME
--------------------
ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
KING
MARTIN
MILLER
SCOTT

ENAME
--------------------
SMITH
TURNER
WARD

14 rows selected.

SQL>



Т.e. добавление полей в базовую таблицу на MV не влияет - матпредставление просто их не видит ведь контейнер матпредставления создается на базе select'a уазанного в матпредставлении.

SY.
...
Рейтинг: 0 / 0
04.06.2016, 18:31
    #39250652
UDW
UDW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
SY,

Перепугу нет, но AR основана на механизме MV.
...
Рейтинг: 0 / 0
04.06.2016, 18:49
    #39250659
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
UDWAR основана на механизме MV.

И? Что теперь все должны использовать AR для простого MV?

SY.
...
Рейтинг: 0 / 0
04.06.2016, 21:20
    #39250701
UDW
UDW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
SY,

Ok. Ваше предложение?
...
Рейтинг: 0 / 0
04.06.2016, 21:44
    #39250703
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
UDWOk. Ваше предложение?

Так я вроде показал что все работает. Пока ORAngutang не приведет тест кейс предложений не будет.

SY.
...
Рейтинг: 0 / 0
04.06.2016, 21:57
    #39250706
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
SYUDWOk. Ваше предложение?

Так я вроде показал что все работает. Пока ORAngutang не приведет тест кейс предложений не будет.

SY.

Вообще-то cитуация очень похожа на "кашу маслoм можно и испортить". Тот кто модифицирует таблицу "заодно" переcоздает и журнал при этом теряя все изменения с момента последнего обновления (даже если их и не было - Oracle этого ведь не знает и руководствуется только сравнением дат создaния журнала и последнего обновления матпредставления):

Код: 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> alter table tbl
  2    add sal number
  3  /

Table altered.

SQL> drop materialized view log on tbl
  2  /

Materialized view log dropped.

SQL> create materialized view log on tbl
  2  /

Materialized view log created.

SQL> exec dbms_mview.refresh('tbl_mv','f');
BEGIN dbms_mview.refresh('tbl_mv','f'); END;

*
ERROR at line 1:
ORA-12034: materialized view log on "SCOTT"."TBL" younger than last refresh
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2802
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 3039
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2998
ORA-06512: at line 1


SQL>



SY.
...
Рейтинг: 0 / 0
04.06.2016, 22:51
    #39250714
UDW
UDW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
SY,

Вобще есть компромисс - force refresh.
...
Рейтинг: 0 / 0
05.06.2016, 00:44
    #39250738
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
UDWВобще есть компромисс - force refresh.

Вообще проще не удалять/переcоздавать журнал. Конечно force refresh в таком случае ошибки не выдаст но выполнит complete refresh который может длится дoлго, потребует кучу UNDO (взaвисимости от ATOMIC_REFRESH) и нагенерирует кучу redo.

SY.
...
Рейтинг: 0 / 0
06.06.2016, 20:26
    #39251511
ORAngutang
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
чё-то реально непонятное происходит:

cоздаю м-лог на одной из старых наших базовых таблиц:

Код: sql
1.
 create materialized view log on  MYSCH.MYTBLX WITH ROWID INCLUDING NEW VALUES;



потом пытаюсь создать м-вью:

Код: sql
1.
2.
CREATE MATERIALIZED VIEW MYSCH.kbortil_fi_agg_mv
REFRESH FAST ON DEMAND AS


...

огребаю:

ORA-12033: cannot use filter columns from materialized view log on "MYSCH"."MYTBLX"

потом создаю клон базовой таблицы:

Код: sql
1.
2.
create table MYSCH.MYTBLX2
as select * from MYSCH.MYTBLX where 1 = 0 



делаю всё тоже самое на клоне MYTBLX2 (mlog + mv). Всё получается!!! Может это что-то системное? Как это проверить? Куда копать???
...
Рейтинг: 0 / 0
06.06.2016, 21:40
    #39251528
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
...
Рейтинг: 0 / 0
07.06.2016, 17:16
    #39252207
ORAngutang
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
SYORAngutang,

Возможно 11g Virtual Columns and Fast Refreshable Materialized Views (What In The World)

SY.

Cпасибо огромнейшее за наводку! Благодаря ней мы нашли workaround. Вообщем-то что Оракл там за кулисами делает, это просто праздник какой-то:

select * --table_name, column_name, data_default, virtual_column, hidden_column
from dba_tab_cols
where owner = 'MYSCH'
and virtual_column = 'YES'
and Table_Name = 'MYTBLX'
and Column_Name like 'SYS_ST%'

SYS_STSR9JGQU6238JVT6LX3ZIY9MA SYS_OP_COMBINED_HASH("ID","PARENTFIRMAID")

оказывается, он лепит похоже некую extended statistics в некие созданые за кулисами hidden-сolumns, и вот они то с fast-refreshable MVs как раз таки и не дружат! Баг старый (MOS.10281402) с 11g-времён (c 2010) протянутый аж до 12с: :-(
https://blogs.oracle.com/sql/entry/ora_54033_and_the_hidden

если на базовых таблицах эту хрень (extended statistics) удалить:

begin dbms_stats.drop_extended_stats( ''MYSCH', ''MYTAB', '(ID,PARENTFIRMAID)'); end;

то проблема решается! Т.е. после этого создаются без ошибок (ORA-12033) все MV и их можно без проблем (fast-)рефрешевать:

begin dbms_mview.refresh( list => 'mysch.kportail_myviewsoandso22', method => 'F' ); end;

P.S. остаётся надеяться, что удаление extended statistics-и не подпортит нам performance в других местах! ;-)

P.P.S. а SYS_OP_COMBINED_HASH вообще "is an undocumented feature"! Во как! :-))))
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.10.2019, 17:26
    #39872807
part351
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
ORAngutang,

Добрый вечер.
Хочу уточнить - вы не разобрались с проблемой записи в алект лог?

автори ещё чисто DBA-шный вопрос: как отключить (в Oracle-12c) запись в alert.log и trc-ы сообщений о проблемах с MViews?
...
Рейтинг: 0 / 0
08.10.2019, 07:19
    #39873106
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
part351с проблемой записи в алект логwhen others then null
...
Рейтинг: 0 / 0
08.10.2019, 13:05
    #39873317
part351
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах!
-2-,

Боюсь это не то...
В 12 версии оракл пишет не только ошибку в алерт лог, но и здоровенную портянку снимков, которые он не смог обновить.
И это жутко засоряет лог. Пытаюсь найти как это отключить.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / падающий dbms_mview.refresh( ..., method => 'F' ) после DDL на базовых таблицах! / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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