Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам? / 20 сообщений из 20, страница 1 из 1
06.10.2016, 18:56
    #39322263
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
ну то, что DDL-Time на таблице актуализируется, это я в курсе. Но пока инвалидных обьектов из-за этого я лично не видел! ( хотя коллеги утверждают типа как "в войну синус достигал 7" )) )

(Особую экзотку типа ddl-ей в ddl-триггерах не рассматриваем)
...
Рейтинг: 0 / 0
06.10.2016, 19:31
    #39322282
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
DBAshnik,

Видишь в запросе индекс?
Код: plsql
1.
select distinct referenced_type from dba_dependencies where type = 'PACKAGE BODY'


Вообще удивляют товарищи которым коллеги шепчут о каком-то явлении и они потом бегут на форум выяснять.
Одно дело если б коллеги говорили что чего-то не может быть никогда, но если если оно бывает - пусть покажут, делов то.

PS. Есть тут один, ему часто "пацанчики на районе" шепчут про Оракл.
...
Рейтинг: 0 / 0
07.10.2016, 02:16
    #39322362
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
В старых версиях (до 11gR2?) удаление функционального индекса инвалидировало програмные единицы, зависящие от таблицы (FBI создает псевдостолбец в описании таблицы)
Код: 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.
SQL> create table t1(a number);

Table created.

SQL> create package p1 as
  2  procedure p1;
  3  end;
  4  /

Package created.

SQL> create package body p1 as
  2  procedure p1 is
  3      r1 t1%rowtype;
  4  begin select * into r1 from t1;
  5  end;
  6  end;
  7  /

Package body created.

SQL> select type, referenced_name, referenced_type, dependency_type from user_dependencies where name='P1';

TYPE              REFERENCED_NAME                                                  REFERENCED_TYPE   DEPE
----------------- ---------------------------------------------------------------- ----------------- ----
PACKAGE BODY      STANDARD                                                         PACKAGE           HARD
PACKAGE BODY      T1                                                               TABLE             HARD
PACKAGE BODY      P1                                                               PACKAGE           HARD

3 rows selected.

SQL> select object_type, status from user_objects where object_name='P1';

OBJECT_TYPE         STATUS
------------------- -------
PACKAGE             VALID
PACKAGE BODY        VALID

2 rows selected.

SQL> create index t1_idx on t1(a+1);

Index created.

SQL> select object_type, status from user_objects where object_name='P1';

OBJECT_TYPE         STATUS
------------------- -------
PACKAGE             VALID
PACKAGE BODY        VALID

2 rows selected.

SQL> drop index t1_idx;

Index dropped.

SQL> select object_type, status from user_objects where object_name='P1';

OBJECT_TYPE         STATUS
------------------- -------
PACKAGE             VALID
PACKAGE BODY        INVALID

2 rows selected.

SQL> drop package p1;

Package dropped.

SQL> drop table t1 purge;

Table dropped.

SQL> select * from v$version where rownum=1;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

1 row selected.

Насколько помню, это было признано багом и "поправлено"
Поэтому сейчас могут возникнуть ситуации когда валидный програмный код содержит невалидный статический SQL
Код: 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.
tst> create table t1(a number);

Table created.

tst> create index t1_idx on t1(a+1);

Index created.

tst> column data_type format a20
tst> select column_name, data_type from user_tab_cols where table_name='T1';

COLUMN_NAME                    DATA_TYPE
------------------------------ --------------------
A                              NUMBER
SYS_NC00002$                   NUMBER

tst> create package p1 as
  2  procedure p1;
  3  end;
  4  /

Package created.

tst> create package body p1 as
  2  procedure p1 is
  3      n number;
  4  begin select "SYS_NC00002$" into n from t1;
  5  end;
  6  end;
  7  /

Package body created.

tst> select type, referenced_name, referenced_type, dependency_type from user_dependencies where name='P1';

TYPE               REFERENCED_NAME                                                  REFERENCED_TYPE    DEPE
------------------ ---------------------------------------------------------------- ------------------ ----
PACKAGE BODY       STANDARD                                                         PACKAGE            HARD
PACKAGE BODY       P1                                                               PACKAGE            HARD
PACKAGE BODY       T1                                                               TABLE              HARD

tst> select object_type, status from user_objects where object_name='P1';

OBJECT_TYPE         STATUS
------------------- -------
PACKAGE             VALID
PACKAGE BODY        VALID

tst> drop index t1_idx;

Index dropped.

tst> select object_type, status from user_objects where object_name='P1';

OBJECT_TYPE         STATUS
------------------- -------
PACKAGE             VALID
PACKAGE BODY        VALID

tst> exec p1.p1
BEGIN p1.p1; END;

*
ERROR at line 1:
ORA-00904: "SYS_NC00002$": invalid identifier
ORA-06512: at "U1.P1", line 4
ORA-06512: at line 1


tst> select object_type, status from user_objects where object_name='P1';

OBJECT_TYPE         STATUS
------------------- -------
PACKAGE             VALID
PACKAGE BODY        VALID

tst> select * from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

...
Рейтинг: 0 / 0
07.10.2016, 02:55
    #39322366
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
Вячеслав Любомудров,

Что и говорить, если заведомо невалидный PL/SQL успешно компилится.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> create or replace package pkg is
  2  
  3    c integer := 1;
  4    c integer := 2;
  5  
  6  end pkg;
  7  /
 
Package created
...
Рейтинг: 0 / 0
07.10.2016, 03:18
    #39322369
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
Я не говорю, что компилится -- как раз откомпилиться он не может
Он содержит заведомо кривой SQL, но состояние это не отображает
Код: 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.
tst> insert into t1 values(1);

1 row created.

tst> select object_type, status from user_objects where object_name='P1';

OBJECT_TYPE         STATUS
------------------- -------
PACKAGE             VALID
PACKAGE BODY        VALID

tst> exec p1.p1

PL/SQL procedure successfully completed.

tst> drop index t1_idx;

Index dropped.

tst> exec p1.p1
BEGIN p1.p1; END;

*
ERROR at line 1:
ORA-00904: "SYS_NC00002$": invalid identifier
ORA-06512: at "U1.P1", line 4
ORA-06512: at line 1


tst> select object_type, status from user_objects where object_name='P1';

OBJECT_TYPE         STATUS
------------------- -------
PACKAGE             VALID
PACKAGE BODY        VALID

tst> alter package p1 compile body;

Warning: Package Body altered with compilation errors.

tst> sho err
Errors for PACKAGE BODY P1:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/7      PL/SQL: SQL Statement ignored
4/15     PL/SQL: ORA-00904: "SYS_NC00002$": invalid identifier
tst> select object_type, status from user_objects where object_name='P1';

OBJECT_TYPE         STATUS
------------------- -------
PACKAGE             VALID
PACKAGE BODY        INVALID

tst> 

...
Рейтинг: 0 / 0
07.10.2016, 08:15
    #39322407
ого(
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
Вячеслав ЛюбомудровЯ не говорю, что компилится -- как раз откомпилиться он не может
Он содержит заведомо кривой SQL, но состояние это не отображает
и чем лечится? пересозданием пакета только?
...
Рейтинг: 0 / 0
07.10.2016, 08:25
    #39322414
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
Ну, или возвращением взад индекса
Да и ясно, что обращение к этой колонке не совсем корректно
...
Рейтинг: 0 / 0
07.10.2016, 08:29
    #39322416
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
Код: 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.
tst> create table t1 as select 1 a from dual;

Table created.

tst> create index t1_idx on t1(a+1);

Index created.

tst> create function f1 return number as
  2      r number;
  3  begin select SYS_NC00002$ into r from t1;
  4        return r;
  5  end;
  6  /

Function created.

tst> select f1 from dual;

        F1
----------
         2

tst> drop index t1_idx;

Index dropped.

tst> select f1 from dual;
select f1 from dual
       *
ERROR at line 1:
ORA-00904: "SYS_NC00002$": invalid identifier
ORA-06512: at "U1.F1", line 3


tst> create index t1_idx on t1(a+10);

Index created.

tst> select f1 from dual;

        F1
----------
        11

...
Рейтинг: 0 / 0
11.10.2016, 10:57
    #39324292
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
ребята! Про drop (alter и т.п.) речь не идёт. От слова "вооообще"! :-) Исключительно про create. Так что вопрос пока не отвечен, по-моему, sorry... (кстати, интересует только 11gR2, более раннее версии - нет!)
...
Рейтинг: 0 / 0
11.10.2016, 11:06
    #39324300
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
DBAshnik,

показывай как индекс создаешь. тебе же Вячеслав намекнул, что создание FBI приводит к автоматическому добавлению в таблицу виртуальной колонки с результатом вычисления функции из индекса. Что в некоторых версиях рассматривалось как вполне себе реальное ALETR TABLE.
...
Рейтинг: 0 / 0
11.10.2016, 12:51
    #39324406
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
Добрый Э - Эх,

не, ничего похожего на FB! Всё примитивно как грабли:
автор create index idx_OrderState on seaAsDbX.tWELHOrderStore ( nOrderState )
...
Рейтинг: 0 / 0
12.10.2016, 16:44
    #39325486
Jonhson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
ого(Вячеслав ЛюбомудровЯ не говорю, что компилится -- как раз откомпилиться он не может
Он содержит заведомо кривой SQL, но состояние это не отображает
и чем лечится? пересозданием пакета только?

выпрямлением рук.

Код, предоставленный пользователем Вячеслав Любомудров некорректен (хоть и компилируется), посему и работает когда как.
...
Рейтинг: 0 / 0
13.10.2016, 03:46
    #39325812
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
Насчет некорректности вопрос спорный, ведь мне никто не мешает переименовать этот столбец и юзать его как короткую замену выражения, причем как в SELECT-листе, так и в предикатах
Код: 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.
tst> create table t1(a number);

Table created.

tst> select column_name, data_type from user_tab_cols where table_name='T1';

COLUMN_NAME                    DATA_TYPE
------------------------------ --------------------
A                              NUMBER

tst> create index t1_idx on t1(a+1);

Index created.

tst> select column_name, data_type from user_tab_cols where table_name='T1';

COLUMN_NAME                    DATA_TYPE
------------------------------ --------------------
A                              NUMBER
SYS_NC00002$                   NUMBER

tst> alter table t1 rename column SYS_NC00002$ to b;

Table altered.

tst> select column_name, data_type from user_tab_cols where table_name='T1';

COLUMN_NAME                    DATA_TYPE
------------------------------ --------------------
A                              NUMBER
B                              NUMBER

tst> insert into t1 values(2);

1 row created.

tst> select a, b from t1 where a+1=3;

         A          B
---------- ----------
         2          3

tst> select * from table(dbms_xplan.display_cursor);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
SQL_ID  5t8qgdcyj29gc, child number 0
-------------------------------------
select a, b from t1 where a+1=3

Plan hash value: 1720721055

--------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |       |       |     1 (100)|          |
|   1 |  TABLE ACCESS BY INDEX ROWID| T1     |     1 |    26 |     1   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | T1_IDX |     1 |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("T1"."B"=3)

Note
-----
   - dynamic sampling used for this statement (level=2)


23 rows selected.

tst> select a, b from t1 where a=2;

         A          B
---------- ----------
         2          3

tst> select * from table(dbms_xplan.display_cursor);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
SQL_ID  83g5u2bb6pbq6, child number 0
-------------------------------------
select a, b from t1 where a=2

Plan hash value: 838529891

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |       |       |     3 (100)|          |
|*  1 |  TABLE ACCESS FULL| T1   |     1 |    26 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("A"=2)

Note
-----
   - dynamic sampling used for this statement (level=2)


22 rows selected.

...
Рейтинг: 0 / 0
13.10.2016, 07:38
    #39325834
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
Вячеслав Любомудровведь мне никто не мешает переименовать этот столбецЗдравый смысл.
Есть сопровождаемо-тиражируемые способы - индексирование виртуального столбца.
...
Рейтинг: 0 / 0
04.08.2017, 17:23
    #39500422
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
DBAshnik, c тех пор этот миф так и прижился в нашей фирме... Ни подтвердить ни опровергнуть пока, похоже, никто так и не смог, да? ;-)
Думаю, а может из-за актуализации LAST-DDL на таблице какие-нибудь remote-процедуры (зависящие от сигнатуры) обламываются??? Какие вообще могут быть гипотезы по сабжу?? (как уже сказал, DROP и FBI можем больше не обсуждать - это не наш случай!)
...
Рейтинг: 0 / 0
04.08.2017, 17:55
    #39500438
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
DBAshnik,

Думаю, кто-то просто накосячил и свалил всё на чужой индекс...
...
Рейтинг: 0 / 0
07.08.2017, 10:34
    #39501120
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
xtenderDBAshnik,

Думаю, кто-то просто накосячил и свалил всё на чужой индекс...

мда... склоняюсь уже к этой версии как к основной!
...
Рейтинг: 0 / 0
07.08.2017, 14:43
    #39501259
DВА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
DBAshnikну то, что DDL-Time на таблице актуализируется, это я в курсе. Но пока инвалидных обьектов из-за этого я лично не видел! ( хотя коллеги утверждают типа как "в войну синус достигал 7" )) )

(Особую экзотку типа ddl-ей в ddl-триггерах не рассматриваем)

в военное время в 12 версии пакеты может инвалидизировать обычный сбор статистики ) вернее не совсем обычный )
ну а если допустить, что он вызван появлением нового индекса, то почему бы и нет
...
Рейтинг: 0 / 0
07.08.2017, 16:19
    #39501366
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
DВАDBAshnikну то, что DDL-Time на таблице актуализируется, это я в курсе. Но пока инвалидных обьектов из-за этого я лично не видел! ( хотя коллеги утверждают типа как "в войну синус достигал 7" )) )

(Особую экзотку типа ddl-ей в ddl-триггерах не рассматриваем)

в военное время в 12 версии пакеты может инвалидизировать обычный сбор статистики ) вернее не совсем обычный )
ну а если допустить, что он вызван появлением нового индекса, то почему бы и нет

это я какбы даже знаю! (ext.statistic которая, да?) Но у нас тут по любому везде только 11g!
...
Рейтинг: 0 / 0
08.08.2017, 15:33
    #39501927
девелопер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам?
DBAshnikв каких случаях создания индекса...

Сколько раз ?


Например :
1)
CREATE INDEX IDX1 on T(id);

2)
CREATE INDEX IDX1 on T(id);
drop index IDX1;
CREATE INDEX IDX1 on T(id);
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / в каких случаях создания индекса на таблице приводит к инвалидным pl/sql-пакетам? / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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