|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Помогите решить проблему следующего характера: База данных “Sybase 5.0” Есть таблица из 10 полей, в ней 5 индексных. Записей в таблице более 3 млн. После проверки утилитой «validate» выяснилось, что есть ошибка !!! Она видна только при удалении всех индексов или выгрузке в MySQL, а именно в поле следующего формата – «"ID" integer NOT NULL DEFAULT autoincrement » -- имеет значение <0 , чего естественно быть не может. Каждое действие с удалением или заведением одного индекса занимает 3-4 часа , а их там 5 !!! Пробовал скрипт « inser into NewTable select * from table » , так это вообще работает двое суток на серьезном компьютере. (все делалось на тестовой лекальной базе) На эти сроки реальный сервер останавливать нельзя !!!! Если кто знает как решить проблему “малой кровью” подскажите как это сделать???? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2003, 11:41 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Попробуй вставить плохие записи по новой, а эти удалить: Код: plaintext 1. 2. 3.
А вообще молодец старичок! Проинсертить 3 мега записей мало кто сможет. В таких случаях обычно приходится писать программку, которая в цикле инсертит порциями по несколько тысяч. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2003, 23:31 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
select ... from t where id < 0 Такой фокус не пройдет, Т.К. Sybase не видит отрицательных индексов, ну соответственно и delete сделать невозможно,пока не удалишь все индексы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2003, 11:54 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Круто! А все таки что вернут запросы: Select count(*) from t where id < 0 и Select count(*) from t where abs(id) <> id ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2003, 22:37 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
При запросе select * from t where abs(id) <> id , я вижу "кривую" запись, а delete t where abs(id) <> id сделать неполучается, выдается ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 13:45 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Ошибка следующего содержания: 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 14:01 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Можно попробовать 2 пути: 1. Выгрузить все через Unload table, убить все записи и загрузить через Load table. 2. Организовать новую таблицу и перебросить в нее данные через DataPipline, который есть в Power Builder. Работает довольно таки граммотно и быстро, можно указать кол-во порций записи для переброски для Commit, что гарантирует не постоянную блокировку исходной таблицы и не раздувание лога. Я лично через него перебрасывал 5 гигобайтную базу с таблицами по 15 миллионов записей, очень даже неплохо справился. Далее ошибочную таблицу убьете, а полученную переименуете. Если во время переброса в исходную таблицу будут добавленны новые записи, то можно непосредственно перед переименованием таблицы обычным Insert или опять же через Datapipeline вогнать порцию новых появившихся записей. P.S. Единственное, что не могу точно сказать, насколько это будет быстро работать на ASA 5-ой версии. На 8-ой и 9-ой работает довольно таки шустро. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 15:32 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Не соглашусь с 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 писал:Далее ошибочную таблицу убьете, а полученную переименуете. Конечно, не знаю как все это будет быстро с учетом индексов, но можешь попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 16:08 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Удалить из текстового файла все не нужные записи (с id<0). НЕВОЗМОЖНО!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2003, 14:02 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Дмитрий А. писал:Удалить из текстового файла все не нужные записи (с id<0). НЕВОЗМОЖНО!!! Интересно поинтересоваться, ПОЧЕМУ??? Как я понимаю записей с отрицательным id у него не так много, даже если много есть такая программка как EXCEL, открываешь полученный файл и фильтруешь -> следовательно можно и удалить, а потом сохраняешь без отрицательных id, ВОТ И ВСЕ!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2003, 14:22 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Страница EXCEL поддерживает 65 тыс. записей на лист , а их 3,5 млн. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2003, 17:24 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Насчет, количества ты прав, я не посмотрел сколько у тебя записей... Ну а разбить их не судьба и загрузить кусками? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2003, 17:44 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Разбивать это не выход. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2003, 17:52 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
А ты вообще уверен, что проблема то в отрицательных id? Я тут ради прикола, создал таблицу с автоинкрементым полем, сделал его ключевым (соответсенно по нему уже сформирован индекс). Добавил две записи с отрицательным и положительным id. Так операция типа: delete t where id < 0 отработала на ура. Так что скорее всего индекс у тебя слител и все-таки тебе его придеться, наверно, пересоздать. Да оговорюсь смотрел на ASA 5.5.04 Build 1867, может в ASA 5.0 действительно такие проблемы, утвержать не могу... Ну в общем пиши, интересно как ты енто поборешь :-)) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2003, 18:01 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
>Удалить из текстового файла все не нужные записи (с id<0). >НЕВОЗМОЖНО!!! >Страница EXCEL поддерживает 65 тыс. записей на лист , а их 3,5 млн. Если дело только в этом, то существуют же человеческие средства специально созданные для таких задач: sed, awk, например, и есть их версии под вынь32. Работает шустро. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2003, 01:30 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Дмитрий А. я тут прикинул, а что тебе мешает, если Дмитрий А. писал:При запросе select * from t where abs(id) <> id , я вижу "кривую" запись то соответсвенно select * from t where abs(id) = id, вернет тебе только те записи где id не отрицательные, ну и дальше как я писал через OUTPUT выгружаешь все записи с положительным id. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2003, 10:12 |
|
Ошибка в индексном уникальном поле
|
|||
---|---|---|---|
#18+
Проблема будет решена следующим образом: 1. создана пустая база данных 2. выгрузка данных (select * from t where abs(id) = id) из старой базы 3. загрузка в новую (все это довольно долго) 4. остановка сервера 5. подгрузка данных в новую базу 6. подмена .db 7. запуск сервера предполагаемая остановка 20мин Всем Большое спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2003, 13:58 |
|
|
start [/forum/topic.php?fid=55&fpage=132&tid=2014799]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 233ms |
total: | 382ms |
0 / 0 |