Гость
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ошибка в индексном уникальном поле / 17 сообщений из 17, страница 1 из 1
17.10.2003, 11:41
    #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
17.10.2003, 23:31
    #32297292
cbusel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в индексном уникальном поле
Попробуй вставить плохие записи по новой, а эти удалить:
Код: plaintext
1.
2.
3.
   insert t (...) 
       select ... from t where id <  0 
   delete t where id <  0 

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

Такой фокус не пройдет, Т.К. Sybase не видит отрицательных индексов, ну соответственно и delete сделать невозможно,пока не удалишь все индексы.
...
Рейтинг: 0 / 0
20.10.2003, 22:37
    #32299132
cbusel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в индексном уникальном поле
Круто!
А все таки что вернут запросы:
Select count(*) from t where id < 0
и
Select count(*) from t where abs(id) <> id
...
Рейтинг: 0 / 0
27.10.2003, 13:45
    #32306072
Дмитрий А.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в индексном уникальном поле
При запросе select * from t where abs(id) <> id , я вижу "кривую" запись, а
delete t where abs(id) <> id сделать неполучается, выдается ошибка.
...
Рейтинг: 0 / 0
27.10.2003, 14:01
    #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
27.10.2003, 15:32
    #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
27.10.2003, 16:08
    #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
28.10.2003, 14:02
    #32307450
Дмитрий А.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в индексном уникальном поле
Удалить из текстового файла все не нужные записи (с id<0).

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

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

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

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


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