powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ошибка в индексном уникальном поле
17 сообщений из 17, страница 1 из 1
Ошибка в индексном уникальном поле
    #32296364
Дмитрий А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите решить проблему следующего характера:

База данных “Sybase 5.0”
Есть таблица из 10 полей, в ней 5 индексных.
Записей в таблице более 3 млн.
После проверки утилитой «validate» выяснилось, что есть ошибка !!!
Она видна только при удалении всех индексов или выгрузке в MySQL, а именно в поле следующего формата – «"ID" integer NOT NULL DEFAULT autoincrement » -- имеет значение <0 , чего естественно быть не может. Каждое действие с удалением или заведением одного индекса занимает 3-4 часа , а их там 5 !!!
Пробовал скрипт « inser into NewTable select * from table » , так это вообще работает двое суток на серьезном компьютере. (все делалось на тестовой лекальной базе) На эти сроки реальный сервер останавливать нельзя !!!!

Если кто знает как решить проблему “малой кровью” подскажите как это сделать????
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32297292
cbusel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй вставить плохие записи по новой, а эти удалить:
Код: plaintext
1.
2.
3.
   insert t (...) 
       select ... from t where id <  0 
   delete t where id <  0 

А вообще молодец старичок! Проинсертить 3 мега записей мало кто сможет.
В таких случаях обычно приходится писать программку, которая в цикле инсертит порциями по несколько тысяч.
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32298157
Дмитрий А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select ... from t where id < 0

Такой фокус не пройдет, Т.К. Sybase не видит отрицательных индексов, ну соответственно и delete сделать невозможно,пока не удалишь все индексы.
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32299132
cbusel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Круто!
А все таки что вернут запросы:
Select count(*) from t where id < 0
и
Select count(*) from t where abs(id) <> id
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32306072
Дмитрий А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При запросе select * from t where abs(id) <> id , я вижу "кривую" запись, а
delete t where abs(id) <> id сделать неполучается, выдается ошибка.
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32306107
Дмитрий А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибка следующего содержания:
Unable to find in index 'lala' for table 't'

help sybase:

This is an internal error. If it can be reproduced, it should be reported to Sybase. You should be able to work around the error by dropping and recreating the index.
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32306277
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать 2 пути:
1. Выгрузить все через Unload table, убить все записи и загрузить через Load table.
2. Организовать новую таблицу и перебросить в нее данные через DataPipline, который есть в Power Builder. Работает довольно таки граммотно и быстро, можно указать кол-во порций записи для переброски для Commit, что гарантирует не постоянную блокировку исходной таблицы и не раздувание лога. Я лично через него перебрасывал 5 гигобайтную базу с таблицами по 15 миллионов записей, очень даже неплохо справился. Далее ошибочную таблицу убьете, а полученную переименуете. Если во время переброса в исходную таблицу будут добавленны новые записи, то можно непосредственно перед переименованием таблицы обычным Insert или опять же через Datapipeline вогнать порцию новых появившихся записей.
P.S. Единственное, что не могу точно сказать, насколько это будет быстро работать на ASA 5-ой версии. На 8-ой и 9-ой работает довольно таки шустро.
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32306335
Фотография DenisVK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не соглашусь с ASCRUS ASCRUS писал:Работает довольно таки граммотно и быстро, лучше уж тогда воспользоваться фунциями:OUTPUT и input (что и предлагал в принципе ASCRUS под п.1).
Пример в ISQL пишешь, что-то похожее на это

SELECT *

FROM employee ;
OUTPUT TO c:\database\employee.dat
FORMAT ASCII;

Удалишь из этого текстового файла все не нужные записи (с id<0).

А затем:

input into employee1
FROM 'c:\database\employee.dat';

А потом, как и советовал ASCRUS ASCRUS писал:Далее ошибочную таблицу убьете, а полученную переименуете.

Конечно, не знаю как все это будет быстро с учетом индексов, но можешь попробовать.
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32307450
Дмитрий А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалить из текстового файла все не нужные записи (с id<0).

НЕВОЗМОЖНО!!!
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32307491
Фотография DenisVK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий А. писал:Удалить из текстового файла все не нужные записи (с id<0).

НЕВОЗМОЖНО!!!
Интересно поинтересоваться, ПОЧЕМУ???
Как я понимаю записей с отрицательным id у него не так много, даже если много есть такая программка как EXCEL, открываешь полученный файл и фильтруешь -> следовательно можно и удалить, а потом сохраняешь без отрицательных id, ВОТ И ВСЕ!!!
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32307885
Дмитрий А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Страница EXCEL поддерживает 65 тыс. записей на лист , а их 3,5 млн.
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32307918
Фотография DenisVK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет, количества ты прав, я не посмотрел сколько у тебя записей...
Ну а разбить их не судьба и загрузить кусками?
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32307942
Дмитрий А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разбивать это не выход.
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32307964
Фотография DenisVK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты вообще уверен, что проблема то в отрицательных id?
Я тут ради прикола, создал таблицу с автоинкрементым полем, сделал его ключевым (соответсенно по нему уже сформирован индекс). Добавил две записи с отрицательным и положительным id.
Так операция типа:
delete t where id < 0
отработала на ура.
Так что скорее всего индекс у тебя слител и все-таки тебе его придеться, наверно, пересоздать.
Да оговорюсь смотрел на ASA 5.5.04 Build 1867, может в ASA 5.0 действительно такие проблемы, утвержать не могу...
Ну в общем пиши, интересно как ты енто поборешь :-))
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32308191
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Удалить из текстового файла все не нужные записи (с id<0).
>НЕВОЗМОЖНО!!!
>Страница EXCEL поддерживает 65 тыс. записей на лист , а их 3,5 млн.

Если дело только в этом, то существуют же человеческие средства специально созданные для таких задач: sed, awk, например, и есть их версии под вынь32. Работает шустро.
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32308381
Фотография DenisVK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий А. я тут прикинул, а что тебе мешает, если Дмитрий А. писал:При запросе select * from t where abs(id) <> id , я вижу "кривую" запись
то соответсвенно select * from t where abs(id) = id, вернет тебе только те записи где id не отрицательные, ну и дальше как я писал через OUTPUT выгружаешь все записи с положительным id.
...
Рейтинг: 0 / 0
Ошибка в индексном уникальном поле
    #32316108
Дмитрий А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема будет решена следующим образом:
1. создана пустая база данных
2. выгрузка данных (select * from t where abs(id) = id) из старой базы
3. загрузка в новую (все это довольно долго)
4. остановка сервера
5. подгрузка данных в новую базу
6. подмена .db
7. запуск сервера
предполагаемая остановка 20мин

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


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