Краткое описание :
Нестабильное подключение к базе через ODBCОписание :
Actian (Pervasive, Btrieve)Что измененно :
Pervasive
SQL-доступ к БД
----- ПРОЯВЛЕНИЕ ПРОБЛЕМЫ -----
Падение Pervasive PSQL Relational Engine при обходе некоторых индексов Галактики.
В Галактике есть индексы по куску поля (первые N символов от строкового поля),
а в PSQL можно объявить индекс только по целиковому полю.
Пример запроса в Pervasive Control Center:
select CGROUPMC from KATMC where CGROUPMC > 1;
Как измененно :
Больше не падает.
Как изменены индексы, и как это повлияет на быстродействие:
Для усечённого сегмента индекса
(например, KatMC02 = Name + BarKod -- здесь Name усекается с 256 до 224 байт)
создаётся зеркальное поле, в примере NAME$224,
и индекс объявляется по полям NAME$224 + BarKod
(зеркальное поле не занимает дополнительного места и времени в таблице)
Такой индекс не будет применяться при сортировке
ORDER BY NAME, BARKOD или подцепке Where NAME = ? and BARKOD = ? (или JOIN)
Но будет применяться, если подсмотреть определение индекса и
заменить NAME на NAME$224, например,
ORDER BY NAME$224, BARKOD (это код на PSQL, не на DSQL)
При этом при сортировке будут учитываться только первые 223 буквы,
т.е. порядок может получиться не такой же, как ORDER BY NAME, BARKOD
поэтому применение этого индекса для сортировки на совести программиста.
Посмотреть индексы и название их сегментов можно object browser в PCC
или запросом, например, таким:
select xi$file, xi$number, xi$part, cast(xi$flags as binary(2)) as Flags, X$FIELD.* from X$INDEX join x$field on xe$id=xi$field join X$file on xf$id=xi$file where xf$name = 'KATMC';
# ИНСТРУКЦИЯ ПО НАСТРОЙКЕ:
Необходимо выполнить изменение SQL-описания существующей базы одним из следующих способов:
1-й способ:
-----------
Закомментировать в конфигурационном файле комплекса Support параметр SQLDriver.SQLServer.
Запустить комплекс Support, с установленным данным обновлением, под администратором,
войти в модуль "Конвертер словаря БД для Pervasive PSQL" и произвести конвертацию
(с настройками по умолчанию, если нет причин их менять).
Раскомментировать в конфигурационном файле комплекса Support параметр SQLDriver.SQLServer.
2-й способ:
-----------
Запустить утилиту asql.exe c параметром /Btrieve.ADF2DDF=True, не задавая в файле asql.cfg
значение параметра SQLDriver.SQLServer.
Пример командной строки:
asql.exe /c:asql.cfg /Btrieve.ADF2DDF=True
Если не выполнить изменение SQL-описания, то использование base.dll версий 5.5.19 и
выше будет давать неправильный результат сравнения!