Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Восстановление "поломанной" базы данных
|
|||
|---|---|---|---|
|
#18+
пишу прогу для восстановления "поломанной" базы данных. Для тестирования как пример имеется 2 разных БД, в первой (назовем DB1) несколько таблиц оторвались от БД (вываливает ошибку "Данная таблица не является частью базы данных DB1"), а во второй (DB2) у пару таблиц порушились индексные файлы. При запуске своей программы выполняю OPEN DATABASE name_of_db EXCLUSIVE,затем VALIDATE DATABASE RECOVERY, для того чотб можно было присоединить оторванные таблицы к БД. Для базы данных DB1 все очень хорошо - таблицы можно присоеденить и дальше делать все, что необходимо. Для базы данных DB2 при выполнении VALIDATE DATABASE RECOVERY ругается, что у таблицы порушен индексный файл и предлагает или удалить эту таблицу или завершить выполнение программы. Пробовал сначала перестраивать индексы для таблиц БД, а затем делать валидейт, тогда для базы данных DB1 ругается, что некоторые таблицы не прнадлежат DB1, что логично. Вопросы: Как мне можно обработать такие два случая? Как программно я могу узнать, что какая-то из таблиц оторвалась от БД или что порушены индексные файлы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2004, 18:52 |
|
||
|
Восстановление "поломанной" базы данных
|
|||
|---|---|---|---|
|
#18+
прости за офф, но ты пишешь для себя как самоусовершенствоваца или ч:е?! проще найти уже готовый фиксер и не иметь геморроя. Например на FoxClub'e или найти Гуглем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2004, 19:23 |
|
||
|
Восстановление "поломанной" базы данных
|
|||
|---|---|---|---|
|
#18+
А еще лучше написать программку по созданию резервной копии твоей базы данных. Дело в том, что ты пропустил несколько принципиальных моментов: 1) Команда Validate DataBase игнорирует опцию Recover в готовом EXE. Т.е. автоматически привести в соответсвие содержимое контейнера базы данных и существующих файлов можно только на этапе отладки. Как следствие, тебе придется самому, ручками, писать модификацию контейнера базы данных, если его содержимое надо подправить. Очень сильно хочется? 2) Отрыв таблицы от базы данных - это надо очень постараться. Индексы падали - это да, но потерять таблицу?! Физически - это может быть такой вариант. Ты скопировал свою таблицу по COPY TO, потом удалил оригинал и на его место пытаешся вставить копию. Чинится это записью относительного пути доступа к контейнеру базы данных в заголовке таблицы. Что и куда записать читай в HELP по структуре заголовка. Хотя лучше делать копию через COPY FILE или API-функциями. 3) Восстановление индексов в случае наличия резервной копии - элементарная операция. Просто заменяешь поврежденный файл CDX на файл из резервной копии, а после открытия таблицы даешь REINDEX для приведения его содержимого в соответствии с новыми значениями таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2004, 19:46 |
|
||
|
Восстановление "поломанной" базы данных
|
|||
|---|---|---|---|
|
#18+
А ручками все. С 6 до 8 версии одни и теже проблемы. То порядок полей в контейнере БД меняются при кооректировке структуры таблиц, то ссылки на индексы отваливаются , то еще что нить. Ну его нах*** фоксовский контейнер БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2004, 23:01 |
|
||
|
Восстановление "поломанной" базы данных
|
|||
|---|---|---|---|
|
#18+
Flex2Ну его н*** фоксовский контейнер БД. Ругатся конечно, нехорошо, но многие крутые специалисты в FoxPro так и поступают, тем более что в 9 версии обещали поддержку транзакций для свободных таблиц, то есть это уже не надо будет писать самому... Хотя если применить ряд мер, описанных на данном форуме - контейнер не поритится почти никогда Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2004, 12:26 |
|
||
|
Восстановление "поломанной" базы данных
|
|||
|---|---|---|---|
|
#18+
Flex2А ручками все. С 6 до 8 версии одни и теже проблемы. То порядок полей в контейнере БД меняются при кооректировке структуры таблиц, то ссылки на индексы отваливаются , то еще что нить. Ну его нах*** фоксовский контейнер БД. Никогда не было таких проблем в контейнером базы данных. Почему-то всегда все было нормально. Может, Вы просто танцевать не умеете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2004, 13:08 |
|
||
|
Восстановление "поломанной" базы данных
|
|||
|---|---|---|---|
|
#18+
и у меня не было проблем..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2004, 15:22 |
|
||
|
Восстановление "поломанной" базы данных
|
|||
|---|---|---|---|
|
#18+
Hi ВладимирМ! > 1) Команда Validate DataBase игнорирует опцию Recover в готовом EXE. Начиная с какой-то версии уже нет, но то как она ЧИНИТ - это отдельная история. Я бы сказал, что лучше бы она и не чинила вовсе :( С остальным согласен :) Я бы ещё добавил к процедуре "починки" элементарный "фиксер" для побитого счётчика записей в заголовке dbf-а (тоже как я понимаю довольно частая проблема), ну и как "предел мечтаний" - фиксер memo-полей - чтобы обойтись БЕЗ COPY TO (которая по идее лечит несложные поломки - опять же если заголовок fpt файла ещё живой). Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2004, 15:27 |
|
||
|
Восстановление "поломанной" базы данных
|
|||
|---|---|---|---|
|
#18+
Мне удалось обработать ситутации, которые я описал в начале, но сделал я это, мягко говоря, через проход, который находится сзади :-). Сначала я открываю базу данных 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 вываливает месседж, которым спрашивает присоединять "оторванную" таблицу или нет. А есть ли возможность сразу присоединять ее без такого запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 13:03 |
|
||
|
Восстановление "поломанной" базы данных
|
|||
|---|---|---|---|
|
#18+
Ты настолько сосредоточился на своем решении, что абсолютно не воспринимаешь, что именно тебе говорят. Вкратце. В контейнере базы данных кроме собственно имени таблицы, названий ее полей и названий индексов записан относительный путь к ассоциированной таблице. Если при открытой базе данных дать команду USE MyTable, то сначала FoxPro просканирует контейнер базы данных на предмет существования объекта-таблицы с именем MyTable. Если такой объект будет найден, то по относительному пути, записанному в контейнере базы данных будет предпринят поиск такой таблицы. Если по найденному пути таблица будет обнаружена, то будет прочитан заголовок этой таблицы. В заголовке таблицы в специально отведенных 263 байтах записан относительный путь к ассоциированной базе данных. Если этот путь не прописан или прописан путь не к открытой базе данных, то ты и получаешь сообщение об ошибке, что "Данная таблица не является частью базы данных". Следовательно, процесс исправления ошибки заключается в записи в нужное место заголовка таблицы относительного пути доступа к контейнеру базы данных. В Help по FoxPro есть статья с названием "Table File Structure ..." в ней подробно расписано какой байт заголовка таблицы для чего предназначен. Там же найдешь и как определить эти самые 263 байта, где записан относительный путь доступа с контейнеру базы данных. Список таблиц, включенных в базу данных можно получить по команде ADBObjects(), относительный путь доступа к таблице можно получить через команду ?DBGetProp("MyTable","TABLE","PATH") Т.е. в отношении таблиц можно самостоятельно написать все то, что делает VALIDATE DATABASE с исправлением ошибок. НО! Ты опять пропустил мимо ушей, что все это абсолютно бессмысленное занятие. Точнее, лично для тебя это возможно и представляет интерес, но с практической точки зрения не имеет никакого смысла! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 13:29 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32813158&tid=1595270]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 290ms |
| total: | 441ms |

| 0 / 0 |
