powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_utility.compile_schema оставляет инвалидные объекты
14 сообщений из 14, страница 1 из 1
dbms_utility.compile_schema оставляет инвалидные объекты
    #39641940
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После деплоймента нам необходимо проверить что все ок - нет инвалидных объектов. Т.к. часть объектов в базе инвалидируется из-за деплоймента, то мы запускаем dbms_utility.compile_schema которая должна по идее все такие объекты вернуть в состояние valid.
Тем не менее это происходит не всегда - на практике остаются инвалидные объекты, даже если запускать несколько ранов dbms_utility.compile_schema - по-видимому дело в циклических зависимостях.
Существует ли 100% надежный способ откомпилировать схему?
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39641942
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValergradПосле деплоймента нам необходимо проверить что все ок - нет инвалидных объектов. Т.к. часть объектов в базе инвалидируется из-за деплоймента, то мы запускаем dbms_utility.compile_schema которая должна по идее все такие объекты вернуть в состояние valid.
Тем не менее это происходит не всегда - на практике остаются инвалидные объекты, даже если запускать несколько ранов dbms_utility.compile_schema - по-видимому дело в циклических зависимостях.
Существует ли 100% надежный способ откомпилировать схему?

Я, возможно, непонятно написал - объекты на самом деле валидные, у них нет ошибок в dba_errors, они становятся валидными при первом использовании, но до этого они имеют статус INVALID в dba_objects.
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39641972
KoTTT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
utl_recomp?
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39641977
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при shema := null комилируются все инвалидные обьёкты в базе
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
grant executee on sys.utl_recomp to system;

CREATE OR REPLACE PROCEDURE SYSTEM.Custom_Recompile_Invalid_Objects (schema in VarChar2) as
begin
  sys.utl_recomp.recomp_serial(schema);
end;
/
grant execute on system.Custom_Recompile_Invalid_Objects to ....


...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39641992
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viewer
при shema := null комилируются все инвалидные обьёкты в базе
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
grant executee on sys.utl_recomp to system;

CREATE OR REPLACE PROCEDURE SYSTEM.Custom_Recompile_Invalid_Objects (schema in VarChar2) as
begin
  sys.utl_recomp.recomp_serial(schema);
end;
/
grant execute on system.Custom_Recompile_Invalid_Objects to ....




Я открыл код dbms_utility.compile_schema, и на самом деле он вызывает именно sys.utl_recomp.recomp_serial(schema);
Так что это ничего не изменит.
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39641993
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
открой код ?/rdbms/admin/utlrp.sql
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39641995
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad,
появляется возможность выполнить компиляцию не просто схемы, но тотальную компиляцию инвалидных объектов по всей базе с учётом зависимостей.
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39642007
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудровоткрой код ?/rdbms/admin/utlrp.sql


Это из DBMS_UTILITY:

Код: 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.
PROCEDURE COMPILE_SCHEMA (SCHEMA         VARCHAR2,
                            COMPILE_ALL    BOOLEAN DEFAULT TRUE,
                            REUSE_SETTINGS BOOLEAN DEFAULT FALSE) IS
    NOT_EXIST_OR_NO_PRIV EXCEPTION;
    PRAGMA EXCEPTION_INIT(NOT_EXIST_OR_NO_PRIV, -20000);

    COMMIT_DISABLED EXCEPTION;
    PRAGMA EXCEPTION_INIT(COMMIT_DISABLED, -34);

    IN_DIST_TX EXCEPTION;
    PRAGMA EXCEPTION_INIT(IN_DIST_TX, -2074);

    IN_TRIGGER EXCEPTION;
    PRAGMA EXCEPTION_INIT(IN_TRIGGER, -4092);

    CURSOR INTERESTING_OBJS_C IS
      SELECT O.OBJ#
        FROM OBJ$ O, USER$ U
        WHERE U.USER# = O.OWNER#
$IF UTL_IDENT.IS_ORACLE_SERVER $THEN
              AND O.REMOTEOWNER IS NULL
$ELSE
  
$END
              AND U.NAME  = SCHEMA
              AND O.TYPE# IN (7, 8, 9, 11, 12)
$IF UTL_IDENT.IS_ORACLE_SERVER $THEN
              
              AND (BITAND(O.FLAGS, 128) = 0);
$ELSE
  ;
$END

  BEGIN

    
    
    
    
    IF (UPPER(SCHEMA) = 'SYS') THEN
      RAISE_APPLICATION_ERROR(-20001, 'Cannot recompile SYS objects');
    END IF;

    IF (COMPILE_ALL) THEN
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      FOR INTERESTING_OBJ IN INTERESTING_OBJS_C LOOP
        BEGIN
          INVALIDATE(INTERESTING_OBJ.OBJ#, 
                     CASE WHEN REUSE_SETTINGS = TRUE THEN 'REUSE SETTINGS'
                                                     ELSE ' '
                     END);
        EXCEPTION
          WHEN INV_NOT_EXIST_OR_NO_PRIV THEN
            RAISE NOT_EXIST_OR_NO_PRIV;
          WHEN OTHERS THEN
            NULL;  
        END;
      END LOOP;
    END IF;

    BEGIN
      UTL_RECOMP.RECOMP_SERIAL(SCHEMA);
    EXCEPTION
      WHEN NOT_EXIST_OR_NO_PRIV THEN
        
        RAISE;
      WHEN COMMIT_DISABLED OR IN_DIST_TX OR IN_TRIGGER THEN
        RAISE;
      WHEN OTHERS THEN
        NULL;  
    END;

  END;



Как видим - внутри вызывается UTL_RECOMP.RECOMP_SERIAL.
Я глянул мельком код и этой процедуры, там делается топологическая сортировка, но циклические зависимости суда по всему не обрабатываются. Хотя там непросто разобраться, поэтому я и спросил - может кто-то уже экперт в этом вопросе.
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39642014
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык я тебе и намекнул где смотреть
Правда, обычно этот скрипт вызывается с правами SYSDBA, но по-идее процедурка может быть вызвана любым, на кого распределены права
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39642078
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

что-то мы друг друга не понимаем. Вот что я нагуглил:

авторThe utlrp.sql and utlprp.sql scripts are provided by Oracle to recompile all invalid objects in the database. They are typically run after major database changes such as upgrades or patches. They are located in the $ORACLE_HOME/rdbms/admin directory and provide a wrapper on the UTL_RECOMP package. The utlrp.sql script simply calls the utlprp.sql script with a command line parameter of "0". The utlprp.sql accepts a single integer parameter that indicates the level of parallelism as follows.

0 - The level of parallelism is derived based on the CPU_COUNT parameter.
1 - The recompilation is run serially, one object at a time.
N - The recompilation is run in parallel with "N" number of threads.
Both scripts must be run as the SYS user, or another user with SYSDBA, to work correctly.

Таким образом utlrp вызывает процедуру UTL_RECOMP.RECOMP_SERIAL.
Dbms_utility.compile_schema вызывает ее же.
Раз не работает Dbms_utility.compile_schema, значит не сработает и UTL_RECOMP.RECOMP_SERIAL и не сработают файлы utlrp.sql и utlprp.sql.
Или я где-то неправ?
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39642083
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad, Вы компилируете только одну схему или несколько?
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39642091
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad я нагуглил
Почитать сам utlrp.sql религия не позволяет?
Зовет он utlprp.sql
Внутри скрипта - гайд для юзверей.

и собственно вызовы

utl_recomp.recomp_parallel

@@?/rdbms/admin/reenable_indexes.sql

и dbms_registry_sys.validate_components
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39642118
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousValergrad я нагуглил
Почитать сам utlrp.sql религия не позволяет?


Не религия, а отсутствие доступа напрямую на машину - у разработчиков доступ туда бывает редко.

andrey_anonymousи собственно вызовы

utl_recomp.recomp_parallel


В непараллельном скрипте я так понимаю с параметром threads = 1? А это сводится опять же ( если посмотреть код UTL_RECOMP ) к вызову этой самой функции utl_recomp.recomp_serial. Про которую я уже трижды написал что она не работает. Вот вам далась эта функция, елы-палы.

andrey_anonymousdbms_registry_sys.validate_components



А это что за зверь? Про него не удалось нагуглить ничего кроме того что эта недокументированная функция. На первый взгляд непохоже чтобы она имела хоть какое-то отношение к инвалидации пакетов.
...
Рейтинг: 0 / 0
dbms_utility.compile_schema оставляет инвалидные объекты
    #39642161
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValergradНе религия, а отсутствие доступа напрямую на машину - у разработчиков доступ туда бывает редко.
Ви таки будете смеяться, но эти скрипты в клиентской инсталляции тоже могут лежать - зависит от варианта установки клиента.
Лично я на сервер за ними не ходил :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_utility.compile_schema оставляет инвалидные объекты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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