powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Восстановление "поломанной" базы данных
10 сообщений из 10, страница 1 из 1
Восстановление "поломанной" базы данных
    #32813137
Трохим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пишу прогу для восстановления "поломанной" базы данных.
Для тестирования как пример имеется 2 разных БД, в первой (назовем DB1) несколько таблиц оторвались от БД (вываливает ошибку "Данная таблица не является частью базы данных DB1"), а во второй (DB2) у пару таблиц порушились индексные файлы.
При запуске своей программы выполняю OPEN DATABASE name_of_db EXCLUSIVE,затем VALIDATE DATABASE RECOVERY, для того чотб можно было присоединить оторванные таблицы к БД.
Для базы данных DB1 все очень хорошо - таблицы можно присоеденить и дальше делать все, что необходимо. Для базы данных DB2 при выполнении VALIDATE DATABASE RECOVERY ругается, что у таблицы порушен индексный файл и предлагает или удалить эту таблицу или завершить выполнение программы.
Пробовал сначала перестраивать индексы для таблиц БД, а затем делать валидейт, тогда для базы данных DB1 ругается, что некоторые таблицы не прнадлежат DB1, что логично.
Вопросы:
Как мне можно обработать такие два случая? Как программно я могу узнать, что какая-то из таблиц оторвалась от БД или что порушены индексные файлы?
...
Рейтинг: 0 / 0
Восстановление "поломанной" базы данных
    #32813149
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прости за офф, но ты пишешь для себя как самоусовершенствоваца или ч:е?! проще найти уже готовый фиксер и не иметь геморроя. Например на FoxClub'e или найти Гуглем
...
Рейтинг: 0 / 0
Восстановление "поломанной" базы данных
    #32813158
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше написать программку по созданию резервной копии твоей базы данных. Дело в том, что ты пропустил несколько принципиальных моментов:

1) Команда Validate DataBase игнорирует опцию Recover в готовом EXE. Т.е. автоматически привести в соответсвие содержимое контейнера базы данных и существующих файлов можно только на этапе отладки.

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

2) Отрыв таблицы от базы данных - это надо очень постараться. Индексы падали - это да, но потерять таблицу?!

Физически - это может быть такой вариант. Ты скопировал свою таблицу по COPY TO, потом удалил оригинал и на его место пытаешся вставить копию. Чинится это записью относительного пути доступа к контейнеру базы данных в заголовке таблицы. Что и куда записать читай в HELP по структуре заголовка. Хотя лучше делать копию через COPY FILE или API-функциями.

3) Восстановление индексов в случае наличия резервной копии - элементарная операция. Просто заменяешь поврежденный файл CDX на файл из резервной копии, а после открытия таблицы даешь REINDEX для приведения его содержимого в соответствии с новыми значениями таблицы.
...
Рейтинг: 0 / 0
Восстановление "поломанной" базы данных
    #32813226
Flex2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ручками все. С 6 до 8 версии одни и теже проблемы. То порядок полей в контейнере БД меняются при кооректировке структуры таблиц, то ссылки на индексы отваливаются , то еще что нить. Ну его нах*** фоксовский контейнер БД.
...
Рейтинг: 0 / 0
Восстановление "поломанной" базы данных
    #32813355
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flex2Ну его н*** фоксовский контейнер БД.
Ругатся конечно, нехорошо, но многие крутые специалисты в FoxPro так и поступают, тем более что в 9 версии обещали поддержку транзакций для свободных таблиц, то есть это уже не надо будет писать самому...

Хотя если применить ряд мер, описанных на данном форуме - контейнер не поритится почти никогда

Good luck!
...
Рейтинг: 0 / 0
Восстановление "поломанной" базы данных
    #32813378
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flex2А ручками все. С 6 до 8 версии одни и теже проблемы. То порядок полей в контейнере БД меняются при кооректировке структуры таблиц, то ссылки на индексы отваливаются , то еще что нить. Ну его нах*** фоксовский контейнер БД.
Никогда не было таких проблем в контейнером базы данных. Почему-то всегда все было нормально. Может, Вы просто танцевать не умеете?
...
Рейтинг: 0 / 0
Восстановление "поломанной" базы данных
    #32813428
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и у меня не было проблем.....
...
Рейтинг: 0 / 0
Восстановление "поломанной" базы данных
    #32813431
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi ВладимирМ!

> 1) Команда Validate DataBase игнорирует опцию Recover в готовом EXE.

Начиная с какой-то версии уже нет, но то как она ЧИНИТ - это отдельная
история. Я бы сказал, что лучше бы она и не чинила вовсе :(

С остальным согласен :) Я бы ещё добавил к процедуре "починки" элементарный
"фиксер" для побитого счётчика записей в заголовке dbf-а (тоже как я понимаю
довольно частая проблема), ну и как "предел мечтаний" - фиксер memo-полей -
чтобы обойтись БЕЗ COPY TO (которая по идее лечит несложные поломки - опять
же если заголовок fpt файла ещё живой).

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Восстановление "поломанной" базы данных
    #32818526
Трохим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне удалось обработать ситутации, которые я описал в начале, но сделал я это, мягко говоря, через проход, который находится сзади :-).
Сначала я открываю базу данных OPEN DATABASE mydatabse EXCLUSIVE, затем делаю VALIDATE DATABASE NOCONSOLE TO FILE txt.log, Далее открываю этот файл и ищу строку 'Tabel is not part of a database', и если нахожу хотя бы одну такую строку, выполняю VALIDATE DATABASE RECOVER NOCNSOLE, что бы можно было прикрепить "оторванные" таблицы к базе данных.
Другого выхода из ситуации, когда таблицы в контейнере БД прописаны, а backlink к базе данных в таблице отсутствует, я не нешел.
И еще, комманда VALIDATE DATABASE RECOVER вываливает месседж, которым спрашивает присоединять "оторванную" таблицу или нет. А есть ли возможность сразу присоединять ее без такого запроса?
...
Рейтинг: 0 / 0
Восстановление "поломанной" базы данных
    #32818625
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты настолько сосредоточился на своем решении, что абсолютно не воспринимаешь, что именно тебе говорят.

Вкратце.

В контейнере базы данных кроме собственно имени таблицы, названий ее полей и названий индексов записан относительный путь к ассоциированной таблице.

Если при открытой базе данных дать команду USE MyTable, то сначала FoxPro просканирует контейнер базы данных на предмет существования объекта-таблицы с именем MyTable.

Если такой объект будет найден, то по относительному пути, записанному в контейнере базы данных будет предпринят поиск такой таблицы.

Если по найденному пути таблица будет обнаружена, то будет прочитан заголовок этой таблицы.

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

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

В Help по FoxPro есть статья с названием "Table File Structure ..." в ней подробно расписано какой байт заголовка таблицы для чего предназначен. Там же найдешь и как определить эти самые 263 байта, где записан относительный путь доступа с контейнеру базы данных.

Список таблиц, включенных в базу данных можно получить по команде ADBObjects(), относительный путь доступа к таблице можно получить через команду

?DBGetProp("MyTable","TABLE","PATH")

Т.е. в отношении таблиц можно самостоятельно написать все то, что делает VALIDATE DATABASE с исправлением ошибок.

НО! Ты опять пропустил мимо ушей, что все это абсолютно бессмысленное занятие. Точнее, лично для тебя это возможно и представляет интерес, но с практической точки зрения не имеет никакого смысла!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Восстановление "поломанной" базы данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]