+7(962)919-86-60
Тирика-Магазин

Ремонт базы данных FireBird

База данных, которую заполняет программа в сетевом режиме (в однопользовательском режиме тоже, но сейчас речь не о нем), построена очень надежно и очень хорошо защищена от сбоев. Однако даже надежный механизм можно сломать, поэтому сложно переоценить возможность починки базы данных программы после сбоев.

Маленькое научное отступление. Страничная организация памяти

Занимаемое базой данных дисковое пространство обычно рассматривают не как непрерывный объем памяти, а как совокупность страниц памяти. Другими словами, база данных как бы разбита на куски одинаковой длины, называемые страницами. Размер страницы зависит от конкретного сервера баз данных и от настроек, но часто равен двум килобайтам. Два килобайта занимает, например, примерно полстраницы текста шрифтом размера 10 или 12, то есть это не очень много.

Предположим, пользователь заполняет базу данных, вводя в нее имена школьников: Вася, Петя, Маша и так далее. Когда серверу баз данных (далее - БД) требуется добавить новые данные в файл БД, он добавляет в базу данных стразу целую страницу памяти несмотря на то, что реально ему надо добавить только четыре буквы (Катя) - четыре байта - для имени новой ученицы, и дописывает это имя в начало новой страницы. Когда пользователь вводит имя следующего ученика - Николай - сервер дописывет это имя в только что добавленную страницу сразу за Катей. Потом он добавляет в эту страницу все новые и новые имена до тех пор, пока вся страница памяти не будет заполнена, и только после этого добавляет новую страницу в файл базы данных.

Удаление поврежденных данных при ремонте. Целостность данных

В случае, если база данных повреждена, сервер опять-таки рассматривает файл базы данных как совокупность целый и поврежденных страниц, и пи ремонте базы данных чинит файл постранично. Если отремонтировать какую-то страницу невозможно, сервер при ремонте удаляет всю страницу целиком даже в том случае, если была повреждена только часть страницы.

Предположим, у нас в базе данных есть закупочная накладная на 100 рублей, регистрирующая закупку обуви:

Предположим, что пользователь вводил эту закупку не сразу, а постепенно, в свободное от обслуживания покупателей время: сначала создал накладную и добавил туда валенки, потом сделал 20 продаж, потом вернулся к закупке и добавил туда калоши, а еще через полчаса, обслужив еще пятерых, смог добавить в закупку портянки. В этом случае заголовок накладной (номер, дата и сумма) вместе с валенками могли записаться в одну страницу памяти, калоши в другую страницу памяти, а портянки - в третью.

Предположим, что через некоторое время произошел сбой и база данных "сломалась", в частности, страница данных с калошами была повреждена безвозвратно и при ремонте базы данных была просто удалена из файла. В этом случае в восстановленной базе данных мы получим накладную с валенками (50р) и портянками (10р) на общую сумму в 100р, что, конечно, неправильно. Более того, после ремонта базы данных мы даже не будем знать, что это произошло: после нескольких лет работы в базе данных могут быть десятки тысяч накладных, и проверить их все нереально.

Вывод
Ремонт базы данных следует рассматривать как способ спасти хоть какие-то данные, а вовсе не средство исправления всех ошибок в БД. После ремонта базы данных мы рекомендуем выгрузить из БД справочники (номенклатуру товаров, остатки, покупателей и поставщиков) и загрузить их в пустую базу данных согласно рекомендациям в этой статье, после чего тщательно проверить все восстановленные данные.

Никакой гарантии целостности данных (см. пример с закупкой выше) процедура ремонта БД не дает.

Ремонт базы данных

Для того, чтобы отремонтировать (в описанном выше смысле) базу данных необходимо:

1. Убедиться, что программа Тирика-магазин насроена для работы в сетевом режиме. Сделать это можно в пункте меню Файл|Настройки|Сеть

2. Перейти за компьютер, на котором установлена база данных программы

3. Убедиться, что на этом компьютере программа FireBird установлена в папку C:\Program Files (x86)\FireBird25

4. Скачать файл для ремонта базы данных

5. Сохранить его в папку C:\Program Files (x86)\FireBird25\bin

6. Закрыть программу Тирика-магазин на всех компьютерах, подождать 10 секунд

7. Открыть сохраненный в п.4 файл правой кнопкой мыши и далее "Запуск от имени администратора"

8. После того, как он отработает, прочитать результат ремонта базы данных:

Следующая статья: Резервное копирование базы данных