powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка в dbms_metadata.get_ddl (12.2)
17 сообщений из 17, страница 1 из 1
Ошибка в dbms_metadata.get_ddl (12.2)
    #39890073
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В схеме довольно много матвьюх, решил провести ревизию, проверить их свойства, вызывал последовательно для каждой
Код: plsql
1.
SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW', имя, схема) FROM dual;


Для некоторых почему-то получил ошибку как на картинке.

Не пойму, как так? В системных вьюхах их свойства видно, Oracle SQL Developer и другие утилиты их видят, состояние у них VALID.


Есть только одно подозрение, что конкретно у этих в свойствах user_mviews.UNUSABLE_BEFORE и user_mviews.UNUSABLE_BEGINNING установлена текущая редакция, у других матвьюх нет таких ограничений.
Но согласно докам, это вроде касается только хранимых данных, а не самих вьюх:
UNUSABLE_BEFORE In editions before the specified edition, the stored results of the materialized view's data are considered unusable.

UNUSABLE_BEGINNING The data is unusable for query rewrite in the specified edition and in any descendants of this edition.
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39890111
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курим доку:

The DBMS_METADATA package considers a privileged user to be one who is connected as user SYS or who has the SELECT_CATALOG_ROLE role. The object views of the Oracle metadata model implement security as follows:

Nonprivileged users can see the metadata of only their own objects .

SY.
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39890116
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то U99 - это моя схема. И логинился я как U99.
И да, у меня есть SELECT_CATALOG_ROLE.
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39890117
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И при всём этом для НЕКОТОРЫХ матвьюх в моей схеме такая фигня.
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39890227
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал даже логиниться AS SYSDBA, всё равно именно на этих некоторых вьюхах такая пакость.

Вот для эксперимента предлагаю скрипт:
Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE jobs AS SELECT * FROM hr.jobs;

CREATE MATERIALIZED VIEW mv_bad_getddl( job_title, max_salary )
NEVER REFRESH
ENABLE QUERY REWRITE UNUSABLE BEFORE EDITION ora$base UNUSABLE BEGINNING WITH EDITION ora$base
AS SELECT t.job_title, t.max_salary FROM jobs t;


и следом запустить
Код: plsql
1.
SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW', 'MV_BAD_GETDDL', USER) FROM dual;



Особенно интересно, как оно в 18 и далее версиях.
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39890236
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
Пробовал даже логиниться AS SYSDBA, всё равно именно на этих некоторых вьюхах такая пакость.

Вот для эксперимента предлагаю скрипт:
Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE jobs AS SELECT * FROM hr.jobs;

CREATE MATERIALIZED VIEW mv_bad_getddl( job_title, max_salary )
NEVER REFRESH
ENABLE QUERY REWRITE UNUSABLE BEFORE EDITION ora$base UNUSABLE BEGINNING WITH EDITION ora$base
AS SELECT t.job_title, t.max_salary FROM jobs t;


и следом запустить
Код: plsql
1.
SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW', 'MV_BAD_GETDDL', USER) FROM dual;



Особенно интересно, как оно в 18 и далее версиях.


Возможно, твой случай подпадает под DBMS_METADAT.GET_DDL on a MView Results in ORA-31603 (Doc ID 1467126.1)
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39890237
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася(12.2)Успеешь дотестировать? Поддержка через год заканчивается.
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39890570
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут покопайтесь:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
select '2','0',
         mvv.sowner,
         mvv.vname,
         value(mvv),
         value(fhtv),
         cast(multiset(select value(iv) from sys.ku$_all_index_view iv, sys.ind$ i
                       where i.bo# = ot.obj# and
                             bitand(i.property,8192) = 8192 and
                             iv.obj_num = i.obj#) as ku$_index_list_t)
  from   sys.obj$ ot, sys.user$ u, sys.ku$_fhtable_view fhtv,
         sys.ku$_m_view_view mvv
  where  ot.name     = mvv.tname
     and ot.owner#   = u.user#
     and u.name      = mvv.sowner
     and ot.type#    = 2
     and fhtv.obj_num = ot.obj#
     and BITAND(mvv.flag,33554432) != 33554432
     and (SYS_CONTEXT('USERENV','CURRENT_USERID') IN (ot.owner#, 0) OR
          EXISTS ( SELECT * FROM sys.session_roles
                   WHERE role='SELECT_CATALOG_ROLE' ))
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39890808
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgen , спасибо.

Возможно, но проверить не могу.


andrey_anonymous , спасибо.

У меня под юзером U99 дает ошибку на ku$_index_list_t
ORA-00902: неверный тип данных
А если AS SYSDBA, то ошибка на картинке.


А на вашей системе мой тестовый кейс как себя ведёт?
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39890875
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-
Правильный Вася(12.2)
Успеешь дотестировать? Поддержка через год заканчивается.Он (правильнее сказать - собирательный коллектив "энтузиастов") пишет свою супер-мега-пупер-субд, которая покроет оракл как бык овцу. Ага.
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39891345
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

https://tsitaty.com/цитата/130202

Не надоело?
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39891353
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
flexgen , спасибо.

Возможно, но проверить не могу.


andrey_anonymous , спасибо.

У меня под юзером U99 дает ошибку на ku$_index_list_t
ORA-00902: неверный тип данных

А если AS SYSDBA, то ошибка на картинке.


А на вашей системе мой тестовый кейс как себя ведёт?

Что вернет
Код: plsql
1.
select comp_name, version,status from dba_registry where comp_name like '%XDB%';



И это
Код: plsql
1.
select OWNER, OBJECT_NAME, OBJECT_TYPE from dba_objects where status = 'INVALID' and owner = 'SYS';
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39891376
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgenЧто вернет
Оба запроса дают пустой набор данных (as SYSDBA).
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39891381
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgen

Что вернет
Код: plsql
1.
select comp_name, version,status from dba_registry where comp_name like '%XDB%';




Читаем MOS по-диагонали?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> select comp_name, version,status from dba_registry where comp_name like '%XDB%';

no rows selected

SQL> select comp_name, version,status from dba_registry where comp_name like '%X%';

COMP_NAME                           VERSION                        STATUS
----------------------------------- ------------------------------ -------------------
Oracle XDK                          12.2.0.1.0                     VALID
Oracle XML Database                 12.2.0.1.0                     VALID

SQL> 



SY.
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39891395
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аналогично.
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select comp_name, version,status from dba_registry where comp_name like '%X%';

COMP_NAME                           VERSION                        STATUS
----------------------------------- ------------------------------ -------------------
Oracle XDK                          12.2.0.1.0                     VALID
Oracle XML Database                 12.2.0.1.0                     VALID
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39891422
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
Elic,

https://tsitaty.com/цитата/130202

Не надоело?
Нет. Сфера твоих "интересов" не может коррелировать с таковой одного живого человека. В других областях тут сразу же включаются службы безопасности.
Но местной части истеблишмента, которой "хоць у вочы сцы, а скажа - божая раса" по барабану.
А мне нет. Я не люблю проекты. И буду "вас" гнобить. В меру сил и возможностей.
...
Рейтинг: 0 / 0
Ошибка в dbms_metadata.get_ddl (12.2)
    #39891790
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася

А если AS SYSDBA, то ошибка на картинке.
А на вашей системе мой тестовый кейс как себя ведёт?

Поковыряйте - значит "разберите на запчасти".
В приведенном запросе (из которого dbms_metadata как раз и тащит данные) есть пара базовых view, одно из которых достаточно перспективно в плане понять "что по чем" - в частности, содержит логику UNUSABLE_BEFORE.
Я поленился ковырять до потрохов - это не сложно, но муторно.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка в dbms_metadata.get_ddl (12.2)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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