SE 4,10 чек <filename>, SE 2,10 ччи другие аномалии чека - PullRequest
1 голос
/ 22 июля 2010

ISQL-SE 4.10.DD6 (DOS 6.22):

BCHECK  C-ISAM B-tree Checker version 4.10.DD6  

C-ISAM File: c:\dbfiles.dbs\*.*

ERROR: cannot open C-ISAM file

В SE2.10 он работал с картами *. * Для всех файлов, но в SE4.10 - нет. У меня есть SQL-скрипт, который мои пользователи периодически запускают для изменения таблиц клиентов и транзакций. Затем у меня есть сценарий FIX.BAT DOS [bcheck –y *. *] В качестве опции для моих пользователей на случай, если какие-либо таблицы испортятся. Поскольку пользователи, выполняющие реорг, теперь будут увеличивать номер версии таблицы, например: CUSTO102, 110,… теперь мне нужно будет найти способ убрать расширения .DAT из каталога .DBS и передать его в BCHECK. Раньше мой reorg всегда заново создавал статический CUSTOMER.DAT с клиентом CREATE TABLE в «C: \ DBFILES.DBS \ CUSTOMER»; но это создало проблему с правами на запись и пришлось вернуться к журналу данных по умолчанию в SE…

Перед запуском BCHECK на CUSTO102 размер его файла .IDX составлял 22 089 байт, а размер .DAT - 882 832 байт.

После запуска BCHECK на CUSTO102 его размер .IDX увеличился до 122 561 байта, однако был создан новый файл .IDY с 88 430 байтами.

Что такое файл .IDY ???

C:\DBFILES.DBS> bcheck –y CUSTO102

BCHECK  C-ISAM B-tree Checker version 4.10.DD6  

C-ISAM File: c:\dbfiles.dbs\CUSTO102

Checking dictionary and file sizes.
Index file node size = 512
Current C-ISAM index file node size = 512
Checking data file records.
Checking indexes and key descriptions.
Index 1 = unique key  
    0 index node(s) used -- 1 index b-tree level(s) used
Index 2 = duplicates  (2,30,0) 
    42 index node(s) used -- 3 index b-tree level(s) used
Index 3 = unique key  (32,5,0) 
    29 index node(s) used -- 2 index b-tree level(s) used
Index 4 = duplicates  (242,4,2) 
    37 index node(s) used -- 2 index b-tree level(s) used
Index 5 = duplicates  (241,1,0) 
    36 index node(s) used -- 2 index b-tree level(s) used
Index 6 = duplicates  (46,4,2) 
    38 index node(s) used -- 2 index b-tree level(s) used
Checking data record and index node free lists.

ERROR: 177 missing index node pointer(s)
Fix index node free list ? yes

Recreating index node free list.
Recreating index 6.
Recreating index 5.
Recreating index 4.
Recreating index 3.
Recreating index 2.
Recreating index 1.
184 index node(s) used, 177 free -- 1083 data record(s) used, 0 free

1 Ответ

1 голос
/ 22 июля 2010

Проблема с символами подстановки, скорее всего, связана с интерпретатором команд, который использовался для запуска bcheck , чем с самой bcheck .Если вы дадите bcheck список имен файлов (например, 'abc def.dat def.idx'), он обработает пары файлов C-ISAM (abc.dat, abc.idx), (def.dat, def.idx) и (def.dat, def.idx - снова). Так как он жаловался на невозможность открыть 'c:\dbfiles.dbs\*.*', это означает, что интерпретатор команд не расширил бит '*.*', или былему нечего расширять.

Я ожидаю, что файл '.IDY' является промежуточным звеном, используемым при перестройке индексов для таблицы. Я не знаю, почему он не был очищен - возможно, процесс сделалне завершено.

Что касается размеров, я думаю, что ваша таблица имеет около 55 000 строк размером 368 байт каждая (SE может сказать 367; различие заключается в байте состояния записи в конце, который равен либо '\0'для удаленного или '\n' для текущего). Уникальный индекс в столбце CHAR (5) (индекс 3) требует 9 байтов на запись или около 56 ключей на узел индекса для примерно 1000 узлов индекса. Дублирующиеся индексыразмер сложнее, вам нужно место для значения ключа плюс список из 4-байтовые числа для дубликатов, все упакованные в 512-байтовые страницы.В файле индекса 22 КБ отсутствовало много информации.Пересмотренный индексный файл имеет правильный размер.Обратите внимание, что индекс 1 является индексом 'ROWID';это не занимает никакого места.(Индекс 1 также является причиной того, что хотя каждая таблица, созданная SE, хранится в файле C-ISAM, не все файлы C-ISAM обязательно совместимы с SE.)

...