Firebird 1.5 Linux. Сервер падал, админы его восстановили, но стала возникать ошибка
I/O error for file "", Error while trying to open file, Permission denied
Ошибка возникает только при сортировке в запросе, т.е. использовании order by, причем исключительно если используется для сортировки поле, по которому нет индекса.
Например:
1. select * from airport, сортировки нет, работает
2. select * from airport order by towniata, сортировка по полю, по которому имеется индекс, работает
3. select * from airport order by aprus, сортировка по полю, по которому нет индекса, НЕ работает
Но 3ий вариант может работать, если в выборке получается не очень много записей
select * from airport where aprus starting with 'Ф' order by aprus, вот так работает, выбирается что-то порядка 40 записей (вместо 1300).
Еще один способ заставить работать неработающий 3ий запрос - сократить количество выбираемых полей.
select iata, towniata, icao, aprus from airport order by aprus еще работает
select iata, towniata, icao, aprus, apeng from airport order by aprus уже не работает
Та же картина наблюдается и на других таблицах.
Без сортировки по Leg проходит запрос с 1.01.2003 по сегодня, сотни тысяч записей, с сортировкой по неиндексному полю выбирается буквально 5-10 дней, порядка 400 записей, не больше.
Если в запрос подключаются другие таблицы, то количество записей, которые еще выбираются с сортировкой по неиндексированному полю, сокращается.
В общем, версия следующая - при небольшом объеме выборки сервер сортирует данные в памяти, если данных много, он пытается создать временный файл, но у него нет на это прав (восстанавливая работоспособность админы что-то недокрутили). Надо проверить, есть ли полные права у сервера на каталог, где создаются временные файлы.
Есть какие-то другие версии? Админы говорили, что было что-то с RAIDoм и восстанавливая его никакие права доступа они не меняли.
Что скажете про мою версию? Увы, проверить ее я сейчас не могу - сисадминов уже нет, а у меня прав на доступ к серверу нет, и вообще я в отпуске, жена пришла с работы, я детей на нее оставил и примчался к пол-восьмому вечера на работу. Буду признателен за любые комментарии, заранее спасибо, т.к. не уверен, смогу ли на даче с КПК ответить.
Георгий
Ошибка при сортировке
при сортировке на диске (в плане написано PLAN SORT) FB создает в TEMP (каталоге или ресурсе, указанном в операционке как временный) файл сортировки. Вначале пустой, а если памяти для сортировки не хватает - то сортирует в файле.I/O error for file "", Error while trying to open file, Permission denied
Следовательно, любые ошибки такого рода - банальная нехватка прав на TEMP или ненастроенный TEMP.
Во время выполнения такого запроса можно смотреть в temp, периодически его "освежая". Будут видный файлы (или файл) вроде fb_***.***. Если в temp не хватает места - можно и это определить, просматривая temp.
p.s. все это относится к системному TEMP, если не настроен TempDirectories в firebird.conf. Если настроен, то вместо системного надо смотреть в соответствующее место.