|
|
|
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Сразу прошу не кидаться... ничем не кидаться - да, я знаю, что тупанула. FoxPro вообще второй раз в жизни использовала. Была нарушена структура БД. Существует БД, используемая программой. Я открывала файлы таблиц с помощью FoxPro. При этом при попытке открытия некоторых таблиц выдавалось сообщение о невозможности открытия файла из-за его связи с БД. В сообщениии три кнопочки: locate, delete, cansel. При щелчке на первой таблицу так и не удавалось открыть. Поскольку надо было обязательно получить данные, выбирала delete. Подозреваю, что при этом удалялась связь с таблицей. В общем, теперь при работе программы возникают ошибки вида "Такая-то таблица не принадлежит базе такой-то". В этой базе хранятся результаты двухнедельной работы целого отдела. Доступной резервной копии нет. Есть аналогичная база, т.е. структура сохранена. Необходимо срочно восстановить работоспособность базы. Я так понимаю, здесь либо надо включить таблицы в базу, либо были удалены связи и их придется восстанавливать - для этого надо будет смотреть структуру базы-копии. Как это можно сделать? Помогите, пожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2007, 20:28 |
|
||
|
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
|
|||
|---|---|---|---|
|
#18+
NovenkayaЯ так понимаю, здесь либо надо включить таблицы в базу, либо были удалены связи и их придется восстанавливать - для этого надо будет смотреть структуру базы-копии. Как это можно сделать? 1. Пригласить из Вашей местности программиста FoxPro 2. Послать по электронной почте в заархивированном виде эти две базы. 3. Назначить вознаграждение для того, кто за это дело возьмется... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2007, 20:33 |
|
||
|
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
|
|||
|---|---|---|---|
|
#18+
Это жестоко. Издеваться так... Из моей местности все специалисты посылают. Мне надо самой с этим разбираться и исправлять. Хотя бы подскажите, как можно включить таблицы в БД, или как править структуру в Фоксе. Сцылкой хоть в меня киньте, что ли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2007, 20:44 |
|
||
|
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
|
|||
|---|---|---|---|
|
#18+
OPEN DATABASE... ту, которая "аналогичная". Потом APPEND FROM одноименных таблиц... Только пусть останется еще одна копия и не забыть ZAP перед APPEND... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2007, 21:46 |
|
||
|
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
|
|||
|---|---|---|---|
|
#18+
В принципе, ничего особо страшного не произошло в том смысле, что данные не потеряны. Просто нарушена взаимосвязь данных. А вот как это лечить, зависит от того, как именно исключенная таблица была связана с остальными данными. 1) ОБЯЗАТЕЛЬНО перед какими-либо попытками что-то где-то восстановить необходимо сделать резервную копию того, что собираешся восстанавливать. Просто чтобы не испортить все окончательно. 2) В простейшем случае все можно восстановить такими командами Код: plaintext 1. 2. Проблема в том, что такое добавление таблицу-то добавит, но не добавит много чего еще, что, теоретически, могло бы быть связано с этой таблицей. Если этого "много чего" не было, то этого хватит. А если было, то дальше ALTER TABLE или прямая правка в дизайнере таблиц. -) Длинные имена полей: у свободной таблицы имя поля не может превышать 10 символов. При исключении из базы данных имена полей больше 10 символов автоматически "обрезаются". Точнее, теряют длинную расшифровку -) Триггеры, правила, значения по умолчанию - это все внутри контейнера базы данных. У свободной таблицы - нет. -) Триггеры таблиц, связанных с данной и ссылающихся на данную таблицу. -) Индекс типа Primary при исключении таблицы из контейнера базы данных автоматически конвертируется в индекс типа Candidat. Хотя, на работоспособность программы это никак не повлияет. -) Есть еще постоянные связи, но их восстанавливать не обязательно. На работу программы они никак не влияют. Хотя, есть и "хакерские" трюки по восстановлению привязки таблицы к контейнеру базы данных. Дело в том, что контейнер базы данных (файл DBC) - это обычная таблица, но с измененным расширением. Т.е. ее можно открыть как обычную таблицу USE MyBase.dbc Исключение из нее объекта - это всего-лишь удаление ряда записей. Но поскольку речь идет о таблице DBF, то под термином "удаление" понимается не физическое удаление, а установка метки на удаление. Т.е. все удаленные записи физически остались на месте, просто получили признак удаленной записи. Значит, достаточно просто восстановить все записи помеченные как удаленные командой RECALL. Однако в самой исключенной таблице также есть ссылка на базу данных. Это просто имя файла контейнера базы данных с относительным путем доступа, записанное в заголовке файла DBF. За образец можно взять любую другую таблицу включенную в контейнер базы данных и посмотреть в каком месте (в каких байтах заголовка) записано имя контейнера. И скопировать это имя в то же самое место исключенной таблицы заменив пустые байты. Но здесь надо работать как с файлами низкого уровня. Можно в каких-либо файловых менеджерах вроде Norton Commander, Total Commander, FAR и т.п. В блокноте (Notepad) такое делать нельзя! Правда, даже такие хакерские трюки могут не восстановить кое-каких триггеров, если при проектировании базы данных использовался построитель Referntial Integrity, поскольку исключение таблицы, скорее всего, удалит и триггера в родительских/дочерних таблицах относительно удаленной. Но, в данном случае, под термином "удалит" надо понимать именно физическое удаление. Без какой-либо возможности восстановления. Впрочем, возможно, при удалении будет создана резервная копия файла DCT - это мемо-поле контейнера базы данных, содержащая "тела" триггеров. Вероятно, это будет файл с тем же именем, но с расширением TBK. Хотя тут я не уверен. Т.е. после такого "хакерского" восстановления надо бы еще сравнить с образцовой базой триггера связанных таблиц и вообще все хранимые процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2007, 23:40 |
|
||
|
Нарушена структура БД, необходимо восстановить без потери данных (хелп, это срочно)
|
|||
|---|---|---|---|
|
#18+
NovenkayaFoxPro вообще второй раз в жизни использовала. Необходимо срочно восстановить работоспособность базы. Я Вам подсказал наиболее быстрый и эффективный способ решения проблемы бизенс путем... Владимир как всегда остановился на технической стороне вопроса... Но там есть несколько очень тонких моментов о которых он упоминает - триггеры, хранимые процедуры, индексы, обрезание названия полей etc... На мой взгляд самое правильное было бы удалить все данные из "правильной базы данных" и потом добавить из "неправильной". Но это довольно трудный путь, требующий опыта, аккуратности, терпения, наличия копий и может быть даже написания кода... Надеюсь, что у Вас все получится и обижаться не надо... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2007, 09:32 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34699629&tid=1588943]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 338ms |

| 0 / 0 |
