Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Не могу пересоздать индекс / 15 сообщений из 15, страница 1 из 1
16.06.2011, 10:41
    #37310476
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
Добрый день

столкнулся со странной ситуацией, версия 11.50FC8W2
oncheck ругается на индекс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
informix@my_server> oncheck -cID mydb:informix.mytab#myidx

Validating index myidx for mydb:informix.mytab...
                Index myidx 
                  Index  fragment partition dbidx in DBspace dbidx
ERROR:  Keys in node 0x3 are not in order.
ERROR:  Index myidx for mydb:informix.mytab is bad.
Please Drop and ReCreate Index myidx for mydb:informix.mytab.

Пересоздание индекса не исправляет проблему:
Код: plaintext
1.
2.
3.
drop Index myidx;

create index "informix".myidx on "informix".mytab (mycol) in dbidx;

Куда рыть, непонятно.
...
Рейтинг: 0 / 0
16.06.2011, 10:48
    #37310493
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
victor16,
1. какой тип поля ?
2. какие особенности таблицы ? фрагментация ?
3. уверены. что индекс действительно дропается, а потом пересоздается ?
...
Рейтинг: 0 / 0
16.06.2011, 11:02
    #37310521
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
vasilis1. какой тип поля ?
NVARCHAR(254)

vasilis2. какие особенности таблицы ? фрагментация ?
сама таблица не фрагментирована, но индексы хранятся в другом пространстве.

vasilis3. уверены. что индекс действительно дропается, а потом пересоздается ?
да, конечно, после удаления индекса oncheck ругается на отсутствие индекса.

Код: plaintext
ERROR:  No index named my_idx for mydb:informix.mytab.
...
Рейтинг: 0 / 0
16.06.2011, 12:33
    #37310771
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
Проблема м.б. в RowID
...
Рейтинг: 0 / 0
16.06.2011, 13:08
    #37310873
DrGonzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
victor16,

Oncheck на саму таблицу не ругается случаем?
...
Рейтинг: 0 / 0
16.06.2011, 13:12
    #37310884
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
DrGonzovictor16,

Oncheck на саму таблицу не ругается случаем?
нет, не ругается.

Начал выяснять, похоже, проблема в строках, содержащих только пробелы.
...
Рейтинг: 0 / 0
16.06.2011, 13:26
    #37310923
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
victor16vasilis1. какой тип поля ?
NVARCHAR(254)

vasilis2. какие особенности таблицы ? фрагментация ?
сама таблица не фрагментирована, но индексы хранятся в другом пространстве.

vasilis3. уверены. что индекс действительно дропается, а потом пересоздается ?
да, конечно, после удаления индекса oncheck ругается на отсутствие индекса.

Код: plaintext
ERROR:  No index named my_idx for mydb:informix.mytab.


если индекс дропнут, то ончек не должен ругаться
...
Рейтинг: 0 / 0
16.06.2011, 14:05
    #37311035
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
cprесли индекс дропнут, то ончек не должен ругаться
все ж ругается если указать, что нужно проверять именно этот индекс, а не всю базу или таблицу:

Код: plaintext
informix@my_server> oncheck -cID mydb:informix.mytab#myidx
...
Рейтинг: 0 / 0
16.06.2011, 14:30
    #37311093
onstat-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
victor16cprесли индекс дропнут, то ончек не должен ругаться
все ж ругается если указать, что нужно проверять именно этот индекс, а не всю базу или таблицу:

Код: plaintext
informix@my_server> oncheck -cID mydb:informix.mytab#myidx


У меня была похожая проблема еще на 7.31.

По багам не в курсе в момент возникновения саппорт был просрочен.

Помогла перезагрузка таблицы с другим порядком полей.

Но такой воркараунд не каждому подейдет.
...
Рейтинг: 0 / 0
16.06.2011, 14:51
    #37311162
onstat-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
onstat-
Помогла перезагрузка таблицы с другим порядком полей.




вспомнил , у меня varchar или перед или после индексируемого поля , и само поле вроде было varchar.

Что натолкнуло на мысль , что есть баг и извлечением varchar полей таблице или в ключах индекса.

Поле перенесли между полями фиксированной длины и все зажужжало .

Приблизительно так , ситуация была не менее 10 лет назад.
...
Рейтинг: 0 / 0
16.06.2011, 14:57
    #37311190
svat2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
victor16,

была почти точь-в-точь такая же проблема на 11.5.FC8.WE (проявилась сразу после обновления с FC6, проявляется и на FC8W2)
Т.е. портился индекс по полю NVARCHAR, если есть пробельные значения, при использовании кодировки 1251.
Пересоздание индекса не помогало, пришлось откатиться на FC6.

По этому поводу создавал PMR.
Была долгая переписка и в конечном результате меня уведомили, что этот баг пофикшен в 11.5.FC9.
Сам я результативности фикса по факту не проверял (т.к. к моменту, когда выпустили этот FC9 срок поддержки закончился и поэтому скачать его нет возможности).
...
Рейтинг: 0 / 0
16.06.2011, 15:06
    #37311231
svat2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
А, еще.
У меня проявлялось на неск. таблицах, причем на некоторых помогал такой воркэраунд: поменять длину поля NVARCHAR (в сторону увеличения и обратно).
Т.е. напр., если было NVARCHAR(30), то преобразовать его сначала к NVARCHAR(32), а после этого сразу же назад на NVARCHAR(30).
После этого баг не проявлялся.
Но для остальных таблиц с таким же глюком, увы, это не помогало.

Могу предположить, что в качестве еще одного обходного маневра поможет замена всех значений с пробелом на NULL(предварительно выгрузив таблицу, поменяв "вручную" в файле выгрузки и загрузив обратно). Почему нужна выгрузка - иначе "добраться" из-за испорченного индекса ко всем строкам у меня не давало...
Но остается открытым вопрос "а что будет если опять появится пробельное значение?". Триггер на модификацию вешать, что ли? Отакэ.
...
Рейтинг: 0 / 0
16.06.2011, 21:08
    #37311834
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
Спасибо за ответы.
Теперь понятно, что это все-таки баг. Чтож, теперь будем думать, как обойти проблему.
Ситуация усугубляется, что таблица участвует в ER и альтерить будет затруднительно.
На сайте IBM посмотрел, версии 11.50FС9 пока еще нет, остаются другие варианты:
Открыть PMR и попросить отдельную сборку, кстати не факт, что проапгрейдится, поскольку сервер будет считать, что структура индекса порушена

Дропнуть индекс и заапдейтить на NULL, создать индекс заново.

Пинать разработчиков, чтобы не совали пробельные строки в базу.

Кстати, если уж альтерить, кто может что сказать насчет LVARCHAR?
...
Рейтинг: 0 / 0
17.06.2011, 11:09
    #37312421
DrGonzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
victor16,

Из подходящих под описание дефектов вижу только APAR IC74628: INDEX CORRUPTION AND WRONG RESULTS WITH NULL OR EMPTY STRING VALUES IN NVARCHAR FIELDS.

Судя по описанию, проявляется только с индексами, созданными по одному полю.
...
Рейтинг: 0 / 0
17.06.2011, 11:55
    #37312550
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу пересоздать индекс
Судя по всему, так оно и есть, очень похоже на APAR IC74628.

C проблемой удалось справиться следующим образом:
поскольку таблица участвует в ER (пара из 2-х серверов), сначала удалил реплику

выгрузил данные с первого сервера и удалил здесь таблицу

удалил проблемный индекс на втором сервере

создал таблицу с аналогичной структурой, но с другим именем на втором сервере и загрузил туда данные

оператором MERGE попытался слить обе таблицы на втором сервере

выскочила ошибка -396 (ISAM=-111)

пересоздал primary key на основной таблице на втором сервере

теперь оператор MERGE выполнился без ошибок

oncheck на втором сервере тоже прошел без ошибок

создал таблицу на первом сервере, констрайнты и индексы нее, включая проблемный

заново создал реплику между серверами для основных таблиц

синхронизировал данные через команду
Код: plaintext
cdr sync replicate

oncheck на первом сервере тоже прошел без ошибок

Таким образом, удалось побороть проблему.
В конечном счете, помогло скорее всего пересоздание первичного констрайнта, хотя лично мне непонятно как.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Не могу пересоздать индекс / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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