Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> execute immediate, как - то странно 
V
    Опции темы
Rickert
Дата 11.12.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Вообщем, мне нужно в опред. процедуре отребилдить индексы, иначе данные не будут отображаться на инет-странице.
Вставляю в конец процедуры по добав. данных (которые потом и должны добавиться в конечном итоге), такую строку:
Код
execute immediate 'ALTER INDEX myindex REBUILD';

Наблюдаю за поведением сервера. Обычно при ребилде он загружается процентов на 10 - 15. Так и происходит, но в конечном итоге данные не отображаются.
Если я тут же захожу и создаю запрос вручную в SQL Navigator'е:
Код
alter index myindex rebuild

Выполнив его - всё пучком, появляется.
Я дорабатываю движок одного сайта, за двумя другими программистами. Сам двиг монстроузных размеров и расчитан как коробочный продукт, но в итоге сошёл на нет. Поэтому Оракул начал мучить совсем недавно и скорее всего просто не понимаю банальных операций - признаю. Прошу объяснить smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
LSD
Дата 11.12.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Rickert @  11.12.2008,  11:22 Найти цитируемый пост)
Вообщем, мне нужно в опред. процедуре отребилдить индексы, иначе данные не будут отображаться на инет-странице.

Индекс может влиять на скорость работы выборки, но никак не на возвращаемые результаты. Если select не возвращает каких-то данных, то проблема именно в select-е, а не в индексе. 
И ребилд индекса используется для совсем других целей.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Rickert
Дата 12.12.2008, 04:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



LSD, хорошо, тогда подскажи "alter index myindex rebuild" - ребилдит индексы?
Потому что, как я уже сказал и неоднократно проверил сотней способов: именно после ребилда появляется информация. Да и дело не в этом. Вопрос в том: правильно ли я выполняю команду "execute immediate 'alter index myindex rebuild';" ?
Может что-то ещё надо?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 12.12.2008, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Может маза с правами?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
LSD
Дата 12.12.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Rickert @  12.12.2008,  06:15 Найти цитируемый пост)
Может маза с правами? 

Права на операции выполняемые через execute immediate должны быть выданы явно, а не через роль. Других ограничений вроде нет. Ты уверен, что во время выполнения не происходит никаких ошибок, которые бы перехватывались бы и игнорировались? (нехватка привилегий должна выдать ошибку)

А вообще ребилд индекса нужно выполнять, если он был отключён на время вставки большого блока данных и т.п. При нормальной работе ребилд индекса не требуется. И уж тем более он не оказывает влияние на запрос. 

Попробуй такой эксперимент: сделай ребилд индекса и выполни свой запрос. Затем выполни:
Код

alter index disable;

и снова повтори свой запрос. Результаты должны быть одинаковыми.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Nuzur
Дата 12.12.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



LSD, Ситуация очень похожа на выборку без указания порядка следования.
Хотя ситуация бредовая в принципе. 

Rickert, 
Если бы Вы показали саму выборку которая не возвращает данные я думаю Вам бы от этого было бы больше пользы.


--------------------
Never again...
PM MAIL   Вверх
Rickert
Дата 13.12.2008, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



В понедельник попробую, когда на работе окажусь.
Всем спасибо smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 15.12.2008, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Знать бы где этот запрос сформирован. Тут такой лес - караул просто!
LSD, сделал как ты сказал: да, разницы нет, за исключение того что все данные (которые до этого были индексированны) тоже отвалились.

По поводу прав можно подробнее?

Вообщем проблема пока осталась. Почему при выполнение через скрипт из SQL Navigator ребилд идёт нормально, а при выполнение через запрос, execute immediate'ом, ребилд идёт (судя по загрузке цп), но реально никаких обновлений?
Может к полю myindex надо как-то обратиться по-особенному?

Это сообщение отредактировал(а) Rickert - 15.12.2008, 09:28


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
DimW
Дата 15.12.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(Rickert @  15.12.2008,  08:46 Найти цитируемый пост)
Почему при выполнение через скрипт из SQL Navigator ребилд идёт нормально

что значит ребилд идет нормально?

Цитата(Rickert @  15.12.2008,  08:46 Найти цитируемый пост)
но реально никаких обновлений?

вам же сказали пересборка индекса не имеет отнашению к выборке данных, данные либо есть либо их нет.

с какой целью вы делаете ребилд? что ожидаете после его выполнения?

PM MAIL ICQ   Вверх
LSD
Дата 15.12.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Rickert @  15.12.2008,  08:46 Найти цитируемый пост)
По поводу прав можно подробнее?

Права в Oracle можно дать 3 путями:
- автоматически, например полные права на объекты своей схемы, есть у любого пользователя и они неотчуждаемы (т.е. revoke на них не сделать)
- явным grant-ом
- grant-ом пользователю роли, у которой есть grant на это право

так вот в случае с execute immediate, права должны или быть автоматическими или даны через явный grant. Но в принципе это все неважно, потому что проблема не в индексе, а в запросе или PL/SQL коде.


Цитата(Rickert @  15.12.2008,  08:46 Найти цитируемый пост)
Знать бы где этот запрос сформирован. Тут такой лес - караул просто!
LSD, сделал как ты сказал: да, разницы нет, за исключение того что все данные (которые до этого были индексированны) тоже отвалились.

Что значит данные отвалились? smile 

Если проблема вычленить SQL запрос в чистом виде, возьми тот же SQL Developer (или любую другую IDE с поддержкой отладки, я просто не в курсе как там с этим делом в SQL Navigator) и запусти под ним PL/SQL процедуру в режиме отладки. Поставь брекпойнт на место где выполняется запрос и увидишь его текст в чистом виде. И тогда уже можно будет разбираться.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Rickert
Дата 16.12.2008, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Всё работало, просто execute immediate работал до того, как происходили изменения в базе, как таковые. Перебросил в другую функцию и всё раскочегарилось. Всем спасибо.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 16.12.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Вопрос в догонку: alter index myindex rebuild online - вываливается ошибка: "missing alter index parameter".
Почему?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0775 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.