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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как проиндексировать, добавленную информацию 
:(
    Опции темы
Rickert
Дата 26.1.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Через модуль написанный на C# вызывается функция из БД по добавленюю новой записи в таблицу, которая индексируется. Вопрос: как теперь проиндексировать вновь добавленную запись?
ALTER INDEX <index> REBUILD - слишком долгий и работает со всеми данными, а не с только что добавленными.


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


Чо?
****


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

Репутация: 37
Всего: 161



Цитата(Rickert @  26.1.2009,  11:34 Найти цитируемый пост)
как теперь проиндексировать вновь добавленную запись

Как вы узнали что она не проиндексировалась при вставке?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Rickert
Дата 26.1.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Zloxa, есть функция выборки из БД, если бурать у неё условия по работе с индексами - все данные вываливаются кучей, а если оставить - ничего не добавляется, до тех пор не проделаешь ALTER INDEX REBUILD


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


Чо?
****


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

Репутация: 37
Всего: 161



Я не смог себе представить такую функцию, чтобы если из нее "убрать условия по работе с индексами" то она вываливала бы кучу.

Попробуйте объяснить как для дебила.  Последовательно, с примерами.

Добавлено @ 12:25
Почитал Вашу прежнюю ветку. Там тоже ничего не понятно.

Вы коммитить(commit) данные вместо ребилда индекса пробовали?

Дело в том, что alter index это DDL команда, которая помимо всего прочего фиксирует транзакцию.
Т.о. если без выполнения этой команды вы не видите данных, весьма вероятно, что просто забыли зафиксировать транзакцию.

Это сообщение отредактировал(а) Zloxa - 26.1.2009, 12:27


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Rickert
Дата 26.1.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Zloxa, Вы правы, мне сложно описать процесс, мне по-наследству достался движок от сайт больших размеров и я потихоньку пытаюсь с ним разбираться и естественно плохо могу объяснить.
Вот про комминт, расскажите, plz.


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


Чо?
****


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

Репутация: 37
Всего: 161



Цитата(Rickert @  26.1.2009,  14:17 Найти цитируемый пост)
Вот про комминт, расскажите, plz

Commit
Introduction to Transactions


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Rickert
Дата 27.1.2009, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Есть процедура добавления:
Код
    PROCEDURE AddNode
    (
     pID  RAW,
     pSiteID    VARCHAR2,
     pCatalogID    VARCHAR2,
     pParentID  RAW,
     pName    VARCHAR2,
     pCreateDate    DATE,
     pLastUpdate    DATE,
     pData    xmltype     
    )
    AS
    BEGIN

        INSERT INTO CATALOG(id, siteId, catalogId, parentId, name, createdate, lastupdate, data) values(pID, pSiteID, pCatalogID, pParentID, pName, pCreateDate, pLastUpdate, pData);

    END;

И функция выбора из БД:

Код
    FUNCTION FilterNodes
    (
     pSiteID    VARCHAR2,
     pCatalogID  NUMBER,
        pFromIndex NUMBER,
        pTillIndex NUMBER,
        pSortField VARCHAR2,
        pSortType VARCHAR2,
      pCondition  VARCHAR2,
        pCount OUT NUMBER           
    )
    RETURN SYS_REFCURSOR
    AS
     l_cursor SYS_REFCURSOR;
        l_countCursor SYS_REFCURSOR;
    BEGIN

    OPEN l_countCursor FOR 'SELECT count(*) FROM CATALOG WHERE siteid = '''||pSiteID||''' 
    AND catalogid = '||TO_CHAR(pCatalogID)||' AND ('||pCondition||')';
    FETCH l_countCursor into pCount;
        
    OPEN l_cursor FOR 'SELECT * FROM
    (
        SELECT a.*, rownum AS rnum FROM
        ( 
            SELECT * FROM CATALOG
            WHERE siteid = '''||pSiteID||''' AND catalogid = '||pCatalogID||'
            AND ('||pCondition||') ORDER BY '||pSortField||' '||pSortType||'
        ) a WHERE rownum <= '||TO_CHAR(pTillIndex)||'
    ) WHERE rnum > '||TO_CHAR(pFromIndex);

    RETURN l_cursor;

    END;

Всё это вызывается из модуля написанного на C#.
Я так понимаю: есть таблица индексов, которая связана с CATALOG, в которую в первой процедуре добавляем новую запись. А во второй функции мы извлекаем записи по некоторым условиям.
Мне думается, что после добавления данных индексы не обновляются, потому что новые данные по такой выборке не возвращаются до тех пор, пока не будет произведено "ALTER INDEX REBUILD".
Как мне проиндексировать новую инфу?

Это сообщение отредактировал(а) Rickert - 27.1.2009, 10:51


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


Чо?
****


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

Репутация: 37
Всего: 161



Видится мне, Вам не правильно думается.
В ранее упомянутой мной ветке, вам это втолдычить пытались много раз.
Наличие или отсутствие индекса не влияет на результат выборки, только на способ ее выполнения.

Добавляете и извлекаете данные вы в разных сессиях?
Ребилд индекса вы делаете в какой сессии, в той, которой добавляли?
В сессии, из которой добавляли запись вы фиксировали транзакцию?

Мне видится, вы абсолютно не понимаете что такое индексы. Почитайте про них Тут

Пример Вашей функции "выбора из БД" - классический пример иллюстрации кода, за который DBA должны бы убить программистов. Тут, когдато я пытался объяснить почему.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Rickert
Дата 27.1.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Zloxa @  27.1.2009,  11:25 Найти цитируемый пост)
Добавляете и извлекаете данные вы в разных сессиях?

Вроде да.
Цитата(Zloxa @  27.1.2009,  11:25 Найти цитируемый пост)
Ребилд индекса вы делаете в какой сессии, в той, которой добавляли?

Напрямую: захожу на серве и в Navigator'е создаю sql скрипт.

Цитата(Zloxa @  27.1.2009,  11:25 Найти цитируемый пост)
В сессии, из которой добавляли запись вы фиксировали транзакцию?

Всмысле COMMIT ? Да, пробовал.
Цитата(Zloxa @  27.1.2009,  11:25 Найти цитируемый пост)
Пример Вашей функции "выбора из БД" - классический пример иллюстрации кода, за который DBA должны бы убить программистов. Тут, когдато я пытался объяснить почему.

Реализованно не мной, повторяю. Я бы вообще не использовал Оракл. Но за ссылки спасибо, почитаю.


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


Чо?
****


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

Репутация: 37
Всего: 161



Цитата(Rickert @  27.1.2009,  12:00 Найти цитируемый пост)
Всмысле COMMIT ? Да, пробовал.

И?
После коммита вы не увидели тех данных, которые вставили?

CATALOG это таблица или представление( покажите результат select object_type from all_objects where object_name = 'CATALOG')?
Триггеры на CATALOG есть(select * from all_triggers where table_name = 'CATALOG')?
Покажите select owner,index_name,table_name,status,partitioned,funcidx_status from all_indexes t where table_name = 'EL_ETALON'

Добавлено @ 12:17
Цитата(Rickert @  27.1.2009,  12:00 Найти цитируемый пост)
Реализованно не мной, повторяю

А вот это глубоко пофиг, могли бы вообще не упоминать об этом.

Вы уж решите для себя, что вам более важно - поконючить или же разобраться. Если второе, помогу чем смогу, если первое, уж какнить без меня плиз.
Цитата(Rickert @  27.1.2009,  12:00 Найти цитируемый пост)
Я бы вообще не использовал Оракл

Этим вы показываете сколь не интересна вам начатая вами же тема?
Ну и как вам помогать после этого?

Это сообщение отредактировал(а) Zloxa - 27.1.2009, 12:18


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Rickert
Дата 9.2.2009, 06:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Zloxa @  27.1.2009,  12:13 Найти цитируемый пост)
И?После коммита вы не увидели тех данных, которые вставили?

Нет, не увидел также.
Цитата(Zloxa @  27.1.2009,  12:13 Найти цитируемый пост)
CATALOG это таблица или представление( покажите результат select object_type from all_objects where object_name = 'CATALOG')?

Результат нулевой. А что такое представление?
Цитата(Zloxa @  27.1.2009,  12:13 Найти цитируемый пост)
Триггеры на CATALOG есть(select * from all_triggers where table_name = 'CATALOG')?

Судя по нулевому результату - тоже нет smile
Цитата(Zloxa @  27.1.2009,  12:13 Найти цитируемый пост)
Покажите select owner,index_name,table_name,status,partitioned,funcidx_status from all_indexes t where table_name = 'EL_ETALON'

Опять ничего.
Цитата(Zloxa @  27.1.2009,  12:13 Найти цитируемый пост)
Вы уж решите для себя, что вам более важно - поконючить или же разобраться. Если второе, помогу чем смогу, если первое, уж какнить без меня плиз.

Цитата(Zloxa @  27.1.2009,  12:13 Найти цитируемый пост)
Этим вы показываете сколь не интересна вам начатая вами же тема?Ну и как вам помогать после этого?

Прошу прощения, вы правы.
Для меня важно разобраться smile 


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


Чо?
****


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

Репутация: 37
Всего: 161



Цитата(Rickert @  9.2.2009,  06:07 Найти цитируемый пост)
Результат нулевой

Запрос нужно производить от имени пользователя-владельца схемы, либо от имени пользователя, которому даны права на просмотр целевой схемы.
Цитата(Rickert @  9.2.2009,  06:07 Найти цитируемый пост)
table_name = 'EL_ETALON'

Я забыл заменить имя таблици в посте... замените на ваш CATALOG.

Пока мы не найдем этот объект в схеме, и не поймем что это за объект, что либо думать - бессмысленно.



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Rickert
Дата 10.2.2009, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Zloxa @ 9.2.2009,  14:49)
Цитата(Rickert @  9.2.2009,  06:07 Найти цитируемый пост)
Результат нулевой

Запрос нужно производить от имени пользователя-владельца схемы, либо от имени пользователя, которому даны права на просмотр целевой схемы.
Цитата(Rickert @  9.2.2009,  06:07 Найти цитируемый пост)
table_name = 'EL_ETALON'

Я забыл заменить имя таблици в посте... замените на ваш CATALOG.

Пока мы не найдем этот объект в схеме, и не поймем что это за объект, что либо думать - бессмысленно.

Результат в аттаче.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  res.jpg 16,24 Kb


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


Чо?
****


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

Репутация: 37
Всего: 161



Вы вставляетесь в CATALOG.
Индекс вы показали на таблицу CATALOG223_
Что такое CATALOG?
Цитата(Zloxa @  27.1.2009,  12:13 Найти цитируемый пост)
CATALOG это таблица или представление( покажите результат select object_type from all_objects where object_name = 'CATALOG')?




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Rickert
Дата 10.2.2009, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Сорри, имя CATALOG я дал чтобы вы не заморачивались с названием. реальное имя в базе CATALOG223_NODE. Но это не важно, я подменял как надо.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
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.3682 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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