|
|
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
Суть проблемы приведена в теме. Ход действий в листинге: Код: plaintext 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. 109. 110. 111. 112. 113. 114. 115. На 9i работает так как и ожидалось (FUNCIDX_STATUS меняется на DISABLED и запрос с FBI-индексом, естественно падает по ошибке) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 03:53 |
|
||
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
PL/SQL Language Reference 11g Release 2 (11.2)CREATE FUNCTION Statement ... DETERMINISTIC Indicates that the function returns the same result value whenever it is called with the same values for its parameters. You must specify this keyword if you intend to invoke the function in the expression of a function-based index or from the query of a materialized view that is marked REFRESH FAST or ENABLE QUERY REWRITE. When the database encounters a deterministic function in one of these contexts, it attempts to use previously calculated results when possible rather than reexecuting the function. If you subsequently change the semantics of the function, then you must manually rebuild all dependent function-based indexes and materialized views. авторНа 9i работает так как и ожидалось и вроде даже на форуме было что детерменистик работает как надо только с 10.2, хотя мож и не на этом форуме :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 04:46 |
|
||
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
Dimka9PL/SQL Language Reference 11g Release 2 (11.2)CREATE FUNCTION Statement ... DETERMINISTIC Indicates that the function returns the same result value whenever it is called with the same values for its parameters. You must specify this keyword if you intend to invoke the function in the expression of a function-based index or from the query of a materialized view that is marked REFRESH FAST or ENABLE QUERY REWRITE. When the database encounters a deterministic function in one of these contexts, it attempts to use previously calculated results when possible rather than reexecuting the function. If you subsequently change the semantics of the function, then you must manually rebuild all dependent function-based indexes and materialized views. авторНа 9i работает так как и ожидалось и вроде даже на форуме было что детерменистик работает как надо только с 10.2, хотя мож и не на этом форуме :) тут скорее вопрос не о детерменистик, а почему идекс остается enabled? имхо, ето неправильно ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 09:11 |
|
||
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
stax..имхо, ето неправильно Прокатит за ответ? И это кстати не единственное упоминание такого поведения на данном форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 09:23 |
|
||
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
Dimka9stax..имхо, ето неправильно Прокатит за ответ? И это кстати не единственное упоминание такого поведения на данном форуме. імхо НЕТ! я не говорю чтоб индекс перестраивался, он ДОЛЖЕН стать инвалид согласен на you must manually rebuild оставив втихаря индекс валидным, у нас молча "упоплывут" данные с is_customized(NAME) = 0 давайте тогда и зависимые пакеты будем оставлять в валид при изменениии dependent функции кстати если ф-ция не детерменистик (наш случай) update слетит тоесть проверяется и старое (взятое из индекса) значение с ф-цией попробуйте SQL> update TEST_X set name='x'||name where is_customized(NAME) = 0; update TEST_X set name='x'||name where is_customized(NAME) = 0 * ERROR at line 1: ORA-08102: index key not found, obj# 137933, file 4, block 3266491 (2) и ето ПРАВИЛЬНО! select * from TEST_X where is_customized(NAME) = 0 не слетает и ето НЕПРАВИЛЬНО! ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 10:11 |
|
||
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
stax..я не говорю чтоб индекс перестраивался, он ДОЛЖЕН стать инвалид согласен на you must manually rebuild автор удивлялся поведению, я показал что это документировано. почему так сделано? - как один из вариантов объяснения была ссылка. Объяснение не прокатывает - можете открыть SR. Лично у меня есть куча претензий, вдобавок не[до]документированных, которые более существенны чем эта и ничего, живем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 10:28 |
|
||
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
Dimka9stax..я не говорю чтоб индекс перестраивался, он ДОЛЖЕН стать инвалид согласен на you must manually rebuild автор удивлялся поведению, я показал что это документировано. почему так сделано? - как один из вариантов объяснения была ссылка. Объяснение не прокатывает - можете открыть SR. Лично у меня есть куча претензий, вдобавок не[до]документированных, которые более существенны чем эта и ничего, живем :) я так и не понял, где задокументировано что индекс останется валидным? имхо ето баг в древних версиях при создании FBI обекты зависящие от таблицы становились в инвалид, мож убирая ету "фичу" зацепили индекс ps аглиский со словарем ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 10:35 |
|
||
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
Dimka9, спасибо! надо внимательнее смотреть документацию. У меня этот баг еще на 10ке проявился, вот я и полез в доку по 10g и вот что откопал: автор Dependencies of Function-Based Indexes Function-based indexes depend on the function used in the expression that defines the index. If the function is a PL/SQL function or package function, the index is disabled by any changes to the function specification. To create a function-based index, the user must be granted CREATE INDEX or CREATE ANY INDEX. To use a function-based index: The table must be analyzed after the index is created. The query must be guaranteed not to need any NULL values from the indexed expression, because NULL values are not stored in indexes. The following sections describe additional requirements. DETERMINISTIC Functions Any user-written function used in a function-based index must have been declared with the DETERMINISTIC keyword to indicate that the function will always return the same output return value for any given set of input argument values, now and in the future. Вот это-то меня и ставило в ступор. После вашего совета, покопался в доке 11gRelease2 и обнаружил следующее - раздел Dependencies of Function-Based Indexes был благополучно удален, но появился новый Disadvantages of Function-Based Indexes , в котором как раз и говорится о том, что: авторIf you change the semantics of a DETERMINISTIC function and recompile it, then you must manually rebuild any dependent function-based indexes and materialized views. Otherwise, they report results for the prior version of the function. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 12:04 |
|
||
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
и получается что, начиная с 10ки при вместе с созданием FBI создавать еще ddl-триггер на create ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 12:13 |
|
||
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
Да дураку понятно, что он должен быть вручную перестроен. Вопрос в другом, в том, что он обязательно должен стать unusable после изменения функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 12:20 |
|
||
|
FBI не помечается как DISABLED после изменения используемой функции
|
|||
|---|---|---|---|
|
#18+
indxДа дураку понятно, что он должен быть вручную перестроен. Вопрос в другом, в том, что он обязательно должен стать unusable после изменения функции. дык, и я о том же но видать новая фича ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2011, 12:50 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=37388793&tid=1908284]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 334ms |

| 0 / 0 |
