Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать
Модераторы: kdv, dimitr
-
Desdechado
- Сообщения: 19
- Зарегистрирован: 02 авг 2005, 18:53
Сообщение
Desdechado » 23 янв 2006, 12:13
SS, WinXP SP2 Home
база была создана в 1.5.2, Dialect 1
Ради интереса сделал ей бэкап под 1.5.2, а потом рестор под двушкой. Формат Transportable, размер страницы 8кб.
После восстановления индексов выдал
Код: Выделить всё
gbak: committing metadata
gbak: WARNING:Concatenation overflow. Resulting string cannot exceed 32K in length.
gbak: WARNING: Concatenation overflow. Resulting string cannot exceed 32K in length.
причем ворнингов с десяток с одинаковым текстом, но вот таким разным форматированием.
Куда смотреть, что лечить?
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 23 янв 2006, 15:54
конкатенацию строк в триггерах и процедурах
-
Desdechado
- Сообщения: 19
- Зарегистрирован: 02 авг 2005, 18:53
Сообщение
Desdechado » 23 янв 2006, 16:27
Эта БД стабильно и без всяких глюков работала пару лет на FB1.5.
Ни в одном случае не было таких сообщений. Это что-то новое из двушки?
Она что, проверяет потенциально опасные места типа
Код: Выделить всё
DECLARE VARIABLE x VARCHAR(32000);
DECLARE VARIABLE y VARCHAR(32000);
y=x || x;
тогда почему не указано, где это?
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 23 янв 2006, 16:55
Здрасьте. На таких местах ты бы обломился даже в FB 1.02. Был там какой-то билд, когда Клавдий вообще порубал возможность такой конкатенации - мол, если результат может быть >32к, значит такую операцию нельзя даже при компиляции допускать.
Потом это замяли, и вроде-бы оставили только для CHAR, где ясное дело, строка "добивается пробелами". А в 2.0 видать решили хотя бы warning показывать.
Ведь кто тебя знает, вдруг ты по 30К данных в каждую строку впихнешь, а потом вызовешь процедуру - процедура обломится.
А почему не указано - х.з. надо искать, того кто это делал.
p.s. какая ругань тогда по поводу недопустимости большой конкатенации стояла, это что-то...
-
Desdechado
- Сообщения: 19
- Зарегистрирован: 02 авг 2005, 18:53
Сообщение
Desdechado » 23 янв 2006, 18:36
если результат может быть >32к, значит такую операцию нельзя даже при компиляции допускать
Это точно погорячились. Ведь если превысил, то обычно вываливает Arithmetic exception or string truncation. Все предельно ясно. А тут ...
Кстати, этот ворнинг на состояние БД не влияет? Можно с ней работать или она уже инвалидная?
А почему не указано - х.з. надо искать, того кто это делал.
На сорсфордже?
Ведь непонятно даже, почему оно стоит уже после индексов, когда восстановлено абсолютно все. Может, перекомпиляция в конце проходит?
А то ведь среди 200 ХП и 200 триггеров как-то невесело искать этот десяток с подозрениями...
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 23 янв 2006, 19:33
"перекомпиляция" никогда не происходит. Происходит залив метаданных в БД и отслеживание связей. warning - "предупреждение".
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 23 янв 2006, 22:56
Desdechado писал(а):Кстати, этот ворнинг на состояние БД не влияет? Можно с ней работать или она уже инвалидная?
Не влияет. Можно. Warning от Error отличаем ?
Desdechado писал(а):Ведь непонятно даже, почему оно стоит уже после индексов, когда восстановлено абсолютно все. Может, перекомпиляция в конце проходит?
Перекомпиляции при ресторе не происходит. Происходит проверка валидности BLR, залитого из бекапа. Выполняется она при коммите, как и обычный DDL.