PDA

Просмотр полной версии : Небольшой ФАК о том как починить БД (Восстановление check.db)



dec04
02.01.2013, 13:57
Небольшой ФАК о том как починить БД. (http://www.carbis.ru/forum/showthread.php?t=6877&p=53128&viewfull=1#post53128) в девятом сообщении темы.

Я прочитал почти все темы тут связанные с check.db. Самому восстановить его не удается, как его восстановить имея поврежденный check.db (при открытии dbd32 пишет corrupt table index header ), pcheck, rcheck, dcheck, но при этом не имея ни одного бумажного чека.Может куда нибудь отправляется бэкапом по стандарту в кипере?
Так же говорили что может помочь переиндексация, как ее сделать? опишите по подробнее, а то тут никаких руководств.

pokemon99
02.01.2013, 17:30
Если поврежден только check.db то его можно восстановить с pcheck.db

dec04
02.01.2013, 20:47
Если поврежден только check.db то его можно восстановить с pcheck.db
а как это сделать? поподробнее пожалуйста

---------- Добавлено в 18:23 ---------- Предыдущее сообщение было размещено в 18:22 ----------


Если поврежден только check.db то его можно восстановить с pcheck.db
так же еще вот в чем дело, на момент когда произошла ошибка было открыто около 14 столов. Это тоже можно восстановить?

---------- Добавлено в 18:47 ---------- Предыдущее сообщение было размещено в 18:23 ----------

Так же еще один вопрос, как посмотреть собственное базу саму, интересует файл menu.db. Мне нужно его открыть в Database Desktop, а там он одни иероглифы показывает все перепробывал. В BDE стоит:
configuration-drivers-native-paradox: pdox ansi cyrillic
configuration-drivers-native-dbase: dbase rus cp866
configuration-drivers-native-foxpro: dbase rus cp866
configuration-drivers-native-intrbase: pdox ansi cyrillic
configuration-drivers-native-msaccess: pdox ansi cyrillic

system-init: ascii: ansi.

я все перепробовал поменять и в реестре правил ветку где надо изменить шрифт для dbd32
и другую ветку где менять надо в cp_1252=cp_1251 че то такое. ничего не помогло, одна фигня пишется.

SH
02.01.2013, 22:33
нужно его открыть в Database Desktop, а там он одни иероглифы показывает все перепробывал
Не все. BDE Тут ни при чем.
В самом DBD.32 Edit - Preferences - Default system font поменять на Helica.


а как это сделать? поподробнее пожалуйста
Берете check.db из другого дня, из pcheck битого дня берете информацию об оплате. Часть данных совсем будет потеряна, но она обычно не критична (номер стола, количество гостей и т.д.)


на момент когда произошла ошибка было открыто около 14 столов. Это тоже можно восстановить?
А что за ошибка? Открытые столы лежат в orders.db. Возьмите чистую базу, запустите, убедитесь, что все ок, потом в нее подкиньте orders.* из битой базы. По идее, должны будете увидеть Ваши столы - после этого их можно будет закрыть.

dec04
02.01.2013, 23:26
Ну ии поменял там на helica всеравно не работает.
Короче там была ошибка a6h то что эклз переполнена. ЯЯ заменил фискальник ии вылезлаа ошибка. Cannott openn tablee database checkk, lastt что то там -5.

VampireKB
03.01.2013, 00:32
Ну ии поменял там на helica всеравно не работает.
Короче там была ошибка a6h то что эклз переполнена. ЯЯ заменил фискальник ии вылезлаа ошибка. Cannott openn tablee database checkk, lastt что то там -5.

поменяй на Anctica ;)

SH
03.01.2013, 02:10
Ну ии поменял там на helica всеравно не работает.
Этого не может быть, ИМХО.


была ошибка a6h то что эклз переполнена. ЯЯ заменил фискальник ии вылезлаа ошибка. Cannott openn tablee database checkk, lastt что то там -5.
Очень странно. Блокировка ЭКЛЗ не бьет базу.
cor.exe должна была помочь.

dec04
03.01.2013, 08:04
Этого не может быть, ИМХО.


Очень странно. Блокировка ЭКЛЗ не бьет базу.
cor.exe должна была помочь.

Я серьезно, ничего не помогает, разве что только поменять шрифт на anctica, не пробовал еще. И это действительно странно, потому что работало работало и именно в новогоднюю ночь сломалось. Мне край нужно открыть файл меню.дб, в надстройка BDE у меня все нормально стоит? Может где еще реестр поправить?

sibgaba
03.01.2013, 13:15
Про то почему кодировка косячит - ничего не подскажу. Разве что предложу попробовать другой редактор, например DBTour. Или просто попробовать на другой Винде.

От себя небольшой подарок на НГ. Небольшой ФАК о том как починить БД.

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

0. Перед тем как начинать пытаться чинить DATABASE (даже стандартными средствами типа cor.exe) настоятельно рекомендую сделать копию DATABASE (а лучше 2 копии... В разных местах... В архив... Под пароль...)

1. Для работы с БД Paradox, лично я юзаю DBTour, т.к. в нем есть дополнительный инструментарий который иногда помогает. Но можно и DBD.

2. Смотрим что сломалось. Для этого открываем в редакторе папку DATABASE, поочередно открываем каждый файл и проматываем его от начала и до конца. Бывает так что файл открывается, первые несколько записей доступны, а при попытке посмотреть записи из середины или с конца - возникает ошибка.
В итоге битый файл или не откроется совсем (выдаст ошибку), либо откроется, но вместо осмысленных данных там будет "каша", либо не сможет прочитать все записи.

3. Что можно починить, а что нет.
VALUES.DB – этот файл никогда не открывается. Похоже что это вообще не файл БД. Его чинить не надо.
ORDERS.DB – этот файл содержит инфу по текущим заказам (открытым столам). Как правило, починить его не получается. В лучшем случае удастся восстановить структуру файла, а вот содержимое BLOB полей, где в зашифрованном виде храниться инфа по блюдам), обычно рушиться безвозвратно. Проще и быстрее подкинуть файлы ORDERS.* из чистой базы и попытаться восстановить содержимое столов по заказникам и по памяти.
CHECK.DB – файл содержит заголовки чеков (номер чека/стола, официант, время открытия/закрытия, группу станций, сумму и т.п.) Если файл не восстанавливается при помощи утилит, то его всегда можно заполнить вручную (см. далее)
PCHECK.DB – файл содержит информацию по оплатам. Какой валютой закрывался тот или иной чек, была ли при этом выдана сдача. Если файл не восстанавливается при помощи утилит, то его всегда можно заполнить вручную (см. далее)
RCHECK.DB – файл содержит информацию по проданным блюдам. Если файл не восстанавливается при помощи утилит, то ничего более сделать не получится. Расход блюд за этот день будет потерян полностью или частично.

4. Автоматическое восстановление. Утилита Pdxrbld.exe. Paradox tables check and repair utility. Данная софтинка пытается в автоматическом режиме починить битую таблицу. После того как мы поняли какие таблицы у нас битые, копируем их в отдельную папку (и *.db и *.px), запускам Pdxrbld.exe, натравливаем его на папку с битыми файлами, выбираем параметры работы (Rebuild All tables или Rebuild corrupted tables), жмем Start, после окончания внимательно читаем Log. Если у файла побит заголовок (шапка таблицы), то программа может запросить у вас чистый образец файла, что бы взять шапку от туда. В этом случае указываете ей путь к соответствующему чистому файлу.
После того как программа отработала, открываем леченные файлы в DBTour и просматриваем из содержимое на предмет наличия мусора.
Из моего опыта, данная прога помогает в 50% случаев.

5. Заполняем файлы в ручную. Если ничего не помогло, а данные восстановить хочется, то тогда в рукопашную…
Восстановление CHECK.DB. В худшем случае берем чистый CHECK.DB и заполняем его руками. Если повезло немного больше и просто не хватает или испорчены только несколько записей, то работаем только с ними. Сразу оговорюсь, при ручном заполнении полей CHECK.DB мы потеряем инфу по: официанту, кассиру, номеру стола, времени открытия/закрытия, станции, группе станций.
Принцип восстановления следующий: при заполнении полей таблицы мы берем недостающую инфу из других, связанных, таблиц, либо придумываем ее сами. Заполняем следующие поля (на примере таблиц версии 6.97, в более ранних некоторые поля могут отсутствовать, в более поздних – добавляются дополнительные):
Cnum – Номер чека. Чеки нумеруются по порядку, без пропусков. После закрытия дня чеки начинаются с 1. Сколько всего было чеков в смене можно посмотреть по максимальному значению поля Cnum из таблиц PCHECK.DB или RCHECK.DB
LogicDate – Кассовая дата в формате dd.mm.yyyy например 03.01.2013
RealDate – Фактическая дата в формате dd.mm.yyyy например 03.01.2013. Как правило совпадает с Кассовой.
OpenTime – время когда стол был открыт. Мы его не знаем, взять его не откуда, я ставлю просто 00:00
CloseTime – Тоже самое только время закрытия. 00:00
Cover – Количество гостей
Cashier – Кассир. Значение поля Sifr от нужного кассира из таблицы PERSONAL.DB. При этом вся выручка в отчетах упадет на этого Кассира! Если нам это не нужно, то ставим 0. Тогда в отчетах по кассирам будет «Неизвестный»
Waiter – Официант. Значение поля Sifr от нужного официанта из таблицы PERSONAL.DB. При этом вся выручка в отчетах упадет на этого официанта! Если нам это не нужно, то ставим 0. Тогда в отчетах по официантам будет «Неизвестный»
Unit – номер станции на которой был закрыт чек. Значение поля Ident из таблицы CASHES.DB
Depart – Группа станций, в которой был закрыт чек. Значение поля Ident из таблицы DEPARTS.DB
Total – сумма по чеку. Берем из таблицы PCHECK.DB из поля BaseSumEqw из строки с соответствующим Cnum.
BaseKurs – Курс валюты. Ставим 1.
Deleted – Признак того что чек был удален. Ставим 0
Manager – Sifr менеджера который удалял чек. Ставим 0
Charge – ХЗ что такое. Ставим 0
FiscalSum – тоже самое что и Total
Table – Номер стола. Мы его не знаем, взять его не откуда. Придумываем сами, например 0000
OpenDate – Дата когда стол был открыт. Как правило совпадает с LogicDate
Total2 – тоже самое что и Total
RCover – то же самое что и Cover
TaxSum – Сумма налогов. Как правило 0
TaxSum1 – Сумма налогов. Как правило 0
NacKurs – Курс. Ставим 1
TaxRate – Опять налоги. 0
TaxRateR – Опять налоги. 0
CoverP – то же самое что и Cover
LNUM – Совпадает с Cnum
ExFiscNum – Оставляем пустое <null>
Upcharge – 0
Bonus – 0
BonusCArd – 0
PriceScale – 0
PrecheckTime – 0
OrdSerial – Номер чека в системе RKeeper. Сквозная нумерация, не обнуляется при закрытии смены. В 16-тиричном формате. Можем поставить просто 0
Sname – Имя кассового сервера на котором был закрыт чек.

Надо отметить, что полное ручное восстановление таблицы CHECK.DB очень трудоемко и может занять несколько часов. Иногда проще и быстрее свалить все продажи в 1 большой чек. Для этого:
В таблице RCHECK.DB, в поле Cnum. во всех строках ставим 1. Т.е. все блюда принадлежат чеку №1
В таблице PCHECK.DB оставляем только одну запись: Cnum=1, Curency=4 (Рубли), BaseSumEqw = OriginalSum = Выручка за смену, Kurs =1, Disc=0, Extra=пустое, CardExtra= пустое, BaseSumEqw1 = OriginalSum1 = Выручка за смену, IsTax=0.
В таблице CHECK.DB делаем только одну запись с общей выручкой.

Восстановление таблицы PCHECK.DB. В данной таблице храниться инфа по оплатам. Т.е. какой валютой был оплачен тот или иной чек. При ручном восстановлении мы потеряем расклад по валютам. Т.е. общая выручка в отчетах будет верная, но вся она будет проходить по валюте Рубли.
Cnum – Номер чека, берем из таблицы CHECK.DB
Curency – Валюта. Ставим 4 (рубли)
BaseSumEqw – Сумма по чеку, берем из таблицы CHECK.DB
OriginalSum – То же самое что и BaseSumEqw
Kurs – 1
Disc – 0
Extra – пустое
CardExtra – пустое
BaseSumEqw1 - BaseSumEqw
OriginalSum1 – BaseSumEqw
IsTax – 0

6. После того как все восстановили, закрываем день и в Отчетах смотрим все ли у нас совпадает. Как мнимум нужно проверить 2 отчета: "Общая выручка" и "Расход блюд" если вы все сделали правильно, то итоговые суммы этих отчетов должны совпадать. Если они отличаются - вы где то ошиблись.

PS Если в заведении используются Налоги и Многовалютность, то задача несколько усложняется. Но более-менее правильные отчет всегда можно получить.

dec04
03.01.2013, 13:27
Про то почему кодировка косячит - ничего не подскажу. Разве что предложу попробовать другой редактор, например DBTour. Или просто попробовать на другой Винде.

От себя небольшой подарок на НГ. Небольшой ФАК о том как починить БД.


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

SH
03.01.2013, 18:58
Тем более что как я понял открытые столы не восстановить
По Вашим данным - не факт. У Вас вроде check побился, а orders вполне может быть целый.

gorlum
10.01.2013, 19:35
cover - это количество гостей.

sibgaba
10.01.2013, 19:53
Спасибо. Исправил.

PaViS
16.01.2013, 15:39
ORDERS.DB – этот файл содержит инфу по текущим заказам (открытым столам). Как правило, починить его не получается. В лучшем случае удастся восстановить структуру файла, а вот содержимое BLOB полей, где в зашифрованном виде храниться инфа по блюдам), обычно рушиться безвозвратно. Проще и быстрее подкинуть файлы ORDERS.* из чистой базы и попытаться восстановить содержимое столов по заказникам и по памяти. Если при запуске кас.сервера без cor.exe выдается ошибка "BLOB has been modified" по ORDERS.DB, то поправить можно.
DBTour открываем ORDERS, двойным щелчком открываем BLOB из поля О, и просматриваем все записи. На одной или нескольких должно ругнуться. После ошибки, возможно надо будет перезапустить DBTour. В таблице смотрим номер стола, шифр официанта, и пр для дефектных записей. Можно значения всех этих полей переписать. Дефектные записи удаляем. Запускаем кас.сервер. У тех же официантов создаем такие же столы, набираем заказы. Останавливаем кас.сервер. В таблице заказов восстанавливаем значения всех полей, кроме BLOB'a, по этим столам/заказам. Запускаем кас.сервер. Видим ситуацию до краха. Все!

sibgaba
16.01.2013, 16:35
Неплохое дополнение. По сути это "не забить все столы заново" как я предлагал, а "забить только те столы, которые полетели".
Можно и так. Хотя по факту, если БД навернулась в течении рабочего дня, то на все эти пляски просто нет времени, и проще подкинуть чистый orders что бы можно было работать с текущими заказами и не ждать пока восстановят базу.

PaViS
16.01.2013, 16:59
если БД навернулась в течении рабочего дня, то на все эти пляски просто нет времени,При наличии удаленного доступа к выделенному серверу - делается в течении 10 минут. ;)

VampireKB
16.01.2013, 17:58
При наличии удаленного доступа к выделенному серверу
Всегда б всё было так шоколадно.....

mnekin
17.01.2013, 11:36
Если cor не помогает (он у меня обычно отрабатывает через cmd файл), то честно говоря проще все восстановить из распечатанных пречеков/чеков, предварительно подложив чистую базу (100 столов набивается за часик максимум).
Подкладываешь чистую базу (если надо то правишь дату в system.db если это делается спустя какое-то время и потом не забыть вернуть дату обратно), набиваешь все заказы на станции и оплачиваешь (если это происходит в ресторане и вы заставили перебить заказы официантов, а оплатить кассира, не забываем про фискальник что чеки прошли через его память, отключаем его в rkeeper6.ini на кассе, не забываем вернуть все обратно после восстановления). Делаешь закрытие дня (если у себя в офисе то готовый ENDDAY относишь в ресторан и подкладываешь в менеджерскую).
Если битый Orders, то подкладываем файлы из чистой базы и пусть официанты перебьют заказ, но это делается в день сбоя в самом ресторане.
Все это можно сделать удаленно.

PS Грамотный BACKUP спас не одну жизнь.

RKEEPER6.ini
17.10.2013, 13:06
не совсем верно: параметр FiscalSum - это сумма с учетом скидок/наценок. может отличаться от Total

Hendehog
26.06.2015, 07:44
Приветствую.Побился check.db , не получается восстановить.
Кто может попробовать помочь?
Заранее спасибо.

sibgaba
26.06.2015, 12:07
Побиты заголовки.
После восстановления, все равно каша получается. Если скажете точную версию - попробую еще раз (сейчас пробовал на 6,97) но вероятность не большая...
Остается только набивать содержимое в ручную по каждому чеку или в 1 общий чек.

Hendehog
26.06.2015, 12:50
Побиты заголовки.
После восстановления, все равно каша получается. Если скажете точную версию - попробую еще раз (сейчас пробовал на 6,97) но вероятность не большая...
Остается только набивать содержимое в ручную по каждому чеку или в 1 общий чек.

6,97b
Про набитие понятно, но сами понимаете очень геморойно.

sibgaba
26.06.2015, 12:57
Не, один фиг...
Восстанавливает только 204 чека (из 219) и в кашу...

Пишите check.db руками. Там всего 2 валюты в оплатах соответственно нужно сделать 2 записи в файл.

Hendehog
26.06.2015, 13:07
Не, один фиг...
Восстанавливает только 204 чека (из 219) и в кашу...

Пишите check.db руками. Там всего 2 валюты в оплатах соответственно нужно сделать 2 записи в файл.
Спасибо и на этом.
А чем вы восстанавливаете?
Я вот pdxbld пробовал, он сразу пишет повреждена и восстановить не удалось, даже до "каши" не дошлр

sibgaba
26.06.2015, 13:18
тот же pdxbld...
Он говорит что повреждены заголовки таблицы, просит дать чистую и пытается подставить заголовки из нее. Но очевидно файл поврежден с начала и это повреждение затрагивает не только заголовки но и часть данных.

Hendehog
26.06.2015, 13:32
А можете своим дистрибутивом этой программы поделится ? Так, чтобы была.

sibgaba
26.06.2015, 13:38
В приложении.
Версия 4,43

3898

Dekt
28.07.2015, 10:13
Пытаюсь востановить RCHECK.DB с помощью Pdxrbld он пароль просит "j****e" не берет видимо он только для чтения. Как Быть?

sibgaba
28.07.2015, 10:33
По местной традиции, с этим вопросом, всех отправляют в Гугл. Там есть...

Dekt
28.07.2015, 10:37
Ерунду не советуй
А если знаешь напиши

sibgaba
28.07.2015, 10:46
Грубо...
Я уже написал что вам нужно сделать.

Dekt
28.07.2015, 11:50
Просто люди если знают то делятся.

---------- Добавлено в 16:50 ---------- Предыдущее сообщение было размещено в 16:03 ----------

Я так понял, что ни кто не знает?

SH
28.07.2015, 17:36
Пытаюсь востановить RCHECK.DB с помощью Pdxrbld он пароль просит "j****e" не берет видимо он только для чтения. Как Быть?
Нет, этот пароль не только для чтения и обязан подойти.
И да, по традиции на этом форуме пароль в открытом виде не пишется.