Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];

Вниз

Восстановление БД по индексам?   Найти похожие ветки 

 
It's me   (2009-03-10 12:39) [0]

Интересный вопросец - а можно ли восстановить данные базы, имея индексный файл только?

Конкретнее, у людей потерят файл db, но остался файл cdx (я лично не знаю, что за БД конкретно). По крайней мере хотя бы тех полей, по которым построен индекс. Это вообще реально, занимается этим кто-нибудь, есть ли соответствующие программы?


 
Сергей М. ©   (2009-03-10 12:43) [1]


> Интересный вопросец


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


 
AndreyV ©   (2009-03-10 12:46) [2]

> [1] Сергей М. ©   (10.03.09 12:43)
> Встречный вопросец - а можно ли восстановить содержимое
> библиотечного книжного фонда-хранилища, если во время пожара
> из здания библиотеки успели вынести только картотеку ?

Можно знать в какой кучке пепла покопаться.:)


 
It's me   (2009-03-10 12:47) [3]

Абсолютно неправомерное сравнение.

Я и не говорю о восстановлении тех полей, по которым НЕ БЫЛ составлен индекс. В данном случае в библиотеке не было индекса по СОДЕРЖИМЫМ книг, а только по названия и авторам. И восстановить названия и авторов хранимых книг по картотеке можно, тебе это не приходило в голову?


 
Petr V. Abramov ©   (2009-03-10 12:51) [4]

СУБД, похоже, Foxpro
если это так, ищи описание формата и вперед


 
clickmaker ©   (2009-03-10 12:54) [5]

> в библиотеке не было индекса по СОДЕРЖИМЫМ книг

почему? могло быть краткое содержание или описание. Например, "Война и Мир" - боевик с элементами мелодрамы..."


 
AndreyV ©   (2009-03-10 12:54) [6]

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


 
It's me   (2009-03-10 12:55) [7]

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


 
Сергей М. ©   (2009-03-10 12:56) [8]


> в библиотеке не было индекса по СОДЕРЖИМЫМ книг, а только
> по названия и авторам


А хоть бы и были такие индексы - кому нужны эти жалкие обрывки-цитаты из оригинала и информация о бывшем местонахождении так или иначе процитированного оригинала, если его уже не существует ?

Задача индекса - обеспечить быстрый доступ к данным по заданным критериям


 
AndreyV ©   (2009-03-10 12:57) [9]

> [6] AndreyV ©   (10.03.09 12:54)
> как их в записи собрать?

Указатель на запись как раз есть.


 
It's me   (2009-03-10 12:58) [10]


> почему? могло быть краткое содержание или описание


то есть, по-твоему, вольный пересказ содержимого поля это и есть индекс?


> Востановили первое поле из первого индекса, второе из второго
> и т.д., как их в записи собрать?


ты меня спрашиваешь? Я вообще то об этом ветку завел специально )))


 
Игорь Шевченко ©   (2009-03-10 12:59) [11]


> Интересный вопросец - а можно ли восстановить данные базы,
>  имея индексный файл только?


Нельзя


 
Anatoly Podgoretsky ©   (2009-03-10 13:03) [12]

> It"s me  (10.03.2009 12:39:00)  [0]

Эти люди тебе вероятно врут, db и cdx немного из разных опер.
Но такое сделать можно, хакерскими способами.


 
It's me   (2009-03-10 13:03) [13]


> А хоть бы и были такие индексы - кому нужны эти жалкие обрывки-
> цитаты из оригинала и информация о бывшем местонахождении
> так или иначе процитированного оригинала, если его уже не
> существует ?
>
> Задача индекса - обеспечить быстрый доступ к данным по заданным
> критериям


я вот не могу понять - ты лично в теме разбираешься или нет? Если нет - какой смысл менять пытать, если да - так ответить тогда, это возможно или нет?

Ощущение, что не я тему завел, а ты. И ты меня распрашиваешь как конкретно это можно сделать, наверное, чтобы потом сказать "ну вот видишь!"?
Если у тебя есть знания в данной области - просто ответь, возможно это или невозможно, очень желательно бы с пояснениями почему это возможно или почему это невозможно. Ибо складывается впечатление, что ответа ты не знаешь, в теме не разбирался, и просто теоретизируешь на ходу. Я тоже уже потеоретезировал, но это не то что нужно.


 
clickmaker ©   (2009-03-10 13:04) [14]

> вольный пересказ содержимого поля это и есть индекс?

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


 
Anatoly Podgoretsky ©   (2009-03-10 13:06) [15]

> It"s me  (10.03.2009 13:03:13)  [13]

> какой смысл менять пытать

Большой и нам приятно и тебе тоже, все таки участие.


 
It's me   (2009-03-10 13:07) [16]


> Нельзя


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

AP видите утверждает, что это сделать можно, но хакерскими методами...


> Эти люди тебе вероятно врут, db и cdx немного из разных
> опер


это мож я наврал про db. Мне сказали, что остался файл cdx и все. Ну возможно сама база была dbf или как там правильно. В общем, db это отменя, я почему-то был уверен.


 
Сергей М. ©   (2009-03-10 13:09) [17]


> It"s me   (10.03.09 13:03) [13]


Ты не конкретизировал, какие данные и с какой точностью представления требуется восстановить.

Дальнейший разговор, г-н теоретик, лишен смысла)


 
It's me   (2009-03-10 13:10) [18]


> Игорь, а вы уверены? Вообще никакой полезной информации
> извлечь из индекса нельзя


я бы даже конкретизировал - извлечь полезную информацию, имея файл cdx. Это опять же моя версия, что это индексный файл. А то вдруг не совсем.

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


 
It's me   (2009-03-10 13:12) [19]


> Ты не конкретизировал, какие данные и с какой точностью
> представления требуется восстановить.


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


 
Sergey13 ©   (2009-03-10 13:16) [20]

> [16] It"s me   (10.03.09 13:07)
> даже численных по которым составлен индекс?

Я вот тебе частично восстановил. Пользуйся.
3.1415
23
45678
83756
928734
3.44556
5555.3333
2345.5432


 
AndreyV ©   (2009-03-10 13:16) [21]

Ты на FoxPro форуме поспрашивай.
Структура CDX открытая, могу поискать, если сам будешь копать.


 
clickmaker ©   (2009-03-10 13:17) [22]

ну вообще-то, не зная базы, сложно что-то сказать. Это может быть и фокспро и парадокс.
В любом случае: все данные не восстановишь. Индекс не дублирует данные.


 
Игорь Шевченко ©   (2009-03-10 13:18) [23]


> Игорь, а вы уверены?


Уверен


 
It's me   (2009-03-10 13:22) [24]


> Уверен


Игорь, а можно все таки более развернуто. Конкретно эти вопросы:


> извлечь полезную информацию, имея файл cdx


и


> даже часть данных, даже численных по которым составлен индекс?


 
Anatoly Podgoretsky ©   (2009-03-10 13:22) [25]

> It"s me  (10.03.2009 13:07:16)  [16]

Утверждаю и подтверждаю, но количество случаев стремится к нулю.
Поэтому и нет таких дурных программ. Кроме того их придется писать под каждый конкретный случай, под твой конкретный случай программы нет.


 
It's me   (2009-03-10 13:24) [26]


> Утверждаю и подтверждаю, но количество случаев стремится
> к нулю


а каким особенным должен быть случай, что в нем примечательного, чтобы по индексному файлу  можно было восстановить данные?


 
Anatoly Podgoretsky ©   (2009-03-10 13:25) [27]

> clickmaker  (10.03.2009 13:17:22)  [22]

Это не так, бывает что дублирует, бываю индексы по всем полям, бывает покрывающий индекс. Бывают индексы по функциям, много чего бывает.


 
Игорь Шевченко ©   (2009-03-10 13:26) [28]

It"s me   (10.03.09 13:22) [24]


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


это не изначальный вопрос, не юли.


 
Anatoly Podgoretsky ©   (2009-03-10 13:27) [29]

Кстати как мне кажется, структура и тип БД тебе неизвестны, ты видимо удалил файл таблицы, а индексы остались.


 
It's me   (2009-03-10 13:28) [30]


> это не изначальный вопрос, не юли.


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


 
бедолага   (2009-03-10 13:30) [31]

база 1С 7.7 - походу foxpro,
Таблица договоры - файл sc112.dbf, индекс sc112.cdx
Родительский объект - справочник Контрагенты
Есть аналогичная таблица из старого архива, при тупой подстановки файлов, 1С при загрузке ругается "нарушена структура таблицы sc112"
Это вроде лечится переиндексацией в режиме конфигуратора, че-то такое, после чего во всех документах (связанных с данными из таблицы "договоры"), в том месте, где должно быть "договор №хх от хх.хх.хх" пишет "ошибка данных/какой-то номер"

При открытии старой таблицы аксессом можно видеть набор значений по всем полям, но разница между старой и новой чуть ли не 2 года, в принципе полей там не особо много должно было появиться, но все равно порядка нескольких сотен нужно восстановить =\

Открывая текстовым редактором файл индекса cdx (он весит >700 кб) можно заметить там обрывки наименований "договор №хх от хх.хх.хххх" или обрывки каких-то функций и т.п., собственно на этом основании у меня и появилась надежда на то, что сравнивая какие-то поля, функции запроса данных или что-то еще, по чем можно выстроить логическую связь индекса с данными из таблицы, получится восстановить данные.

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

Что-то такое, понимаю, что описал все довольно сумбурно, но это чтоб ваша дискуссия не ушла в сторону от конкретной ситуации, если будет иметь смысл, описать смогу более четко.


 
app ©   (2009-03-10 13:31) [32]

> Могу создать новую тему с переозвученными вопросами ради вас.
Будут закрыты обе.


 
app ©   (2009-03-10 13:31) [33]

Удалено модератором


 
Сергей М. ©   (2009-03-10 13:31) [34]

Пусть в оригинальном поле было

Запись № 1    "ИВАНОВ любил СИДОРОВА"
Запись № 2    "  иВаНоВ упал с ДУБА    "
Запись № 3    "        Иванов на остановке в ожиданье колесницы "

В сохранившемся индексе по выражению

LEFT(ALLTRIM(UPPERCASE(значение_поля)), 2)

ты увидишь нечто вида

ИВ 1,2,3

Можно ли считать, что оригинальные данные восстановимы, если максимум что можно получить - это список

Запись № 1    "ИВ"
Запись № 2    "ИВ"
Запись № 3    "ИВ"

?


 
Игорь Шевченко ©   (2009-03-10 13:35) [35]


> я и не юлю. Давайте считать, что это вопросы, возникшее
> в ходе обсуждения. Не понимаю, разве такие вопросы нельзя
> задавать?
> Или вы принципиально отвечаете только на вопросы из топика?
>  Могу создать новую тему с переозвученными вопросами ради
> вас.


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


 
It's me   (2009-03-10 13:46) [36]

>Сергей М. ©   (10.03.09 13:31) [34]

это один из вариантов.

А если, например, full text индекс был построен?

И, например, целочисленные данные можно со 100% точностью восстановить, верно?


 
AndreyV ©   (2009-03-10 13:52) [37]

> [31] бедолага   (10.03.09 13:30)

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


 
KSergey ©   (2009-03-10 13:52) [38]

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

> бедолага   (10.03.09 13:30) [31]
> база 1С 7.7 - походу foxpro,

Ну не буквально, движков для cdx - много, про dbf и вообще молчу.

> Таблица договоры - файл sc112.dbf, индекс sc112.cdx
> Родительский объект - справочник Контрагенты
> Есть аналогичная таблица из старого архива, при тупой подстановки
> файлов, 1С при загрузке ругается "нарушена структура таблицы sc112"


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

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

Но девочки - дешевле.


 
AndreyV ©   (2009-03-10 13:54) [39]

> [36] It"s me   (10.03.09 13:46)
> И, например, целочисленные данные можно со 100% точностью
> восстановить, верно?

В 1С, насколько знаю, все поля символьные, и ИД типа "  adg123hjk  ", не суть важно.


 
Сергей М. ©   (2009-03-10 13:59) [40]


> если, например, full text индекс был построен?


Если бы да кабы)

Ну если full text и не по функциональному выражению, то такое поле восстановить в оригинале, конечно, можно


> И, например, целочисленные данные можно со 100% точностью
> восстановить, верно?


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


 
Сергей М. ©   (2009-03-10 14:02) [41]


> KSergey


Может человек долговую амбарную книгу восстанавливать взялся и ему за это процент с каждой восстановленной записи обещяли ?)


 
бедолага   (2009-03-10 14:03) [42]

короче наткнулся на вот эту технологию: http://club.shelek.ru/viewart.php?id=132  надеюсь чего нибудь получится...


 
AndreyV ©   (2009-03-10 14:16) [43]

> [39] AndreyV ©   (10.03.09 13:54)
> В 1С, насколько знаю, все поля символьные, и ИД типа "  
> adg123hjk  ", не суть важно.

Из файла 1Cv7.DD

#===============================================================================
#==TABLE no 26     : Справочник Договоры
# Name    |Descr                         |Type[A/S/U]|DBTableName|ReUsable  
T=SC204   |Справочник Договоры           |A          |SC204      |1        
#-----Fields-------
# Name      |Descr               |Type|Length|Precision
F=ID        |ID object           |C   |9     |0        
F=PARENTID  |ID parent obj       |C   |9     |0        
F=CODE      |object code         |C   |8     |0        
F=DESCR     |object description  |C   |50    |0        
F=PARENTEXT |Parent in other tabl|C   |9     |0        
F=ISFOLDER  |Flag - Is Line - Fol|N   |1     |0        
F=ISMARK    |Flag Object is Marke|C   |1     |0        
F=VERSTAMP  |Version stamp       |C   |6     |0        
F=SP668     |(P)ВалютаВзаиморасче|C   |9     |0        
F=SP1948    |(P)ТипЦен           |C   |9     |0        
F=SP1920    |(P)Скидка           |C   |9     |0        
F=SP870     |(P)ГлубинаКредита   |N   |5     |0        
F=SP2285    |(P)СуммаКредита     |N   |16    |2        
F=SP4764    |(P)НеКонтролироватьК|N   |2     |0        
#----Indexes------
# Name     |Descr         |Unique|Indexed fields                                              |DBName    
I=IDD      |of ID         |0     |ID                                                          |IDD        
I=PCODE    |of PARENT and |0     |PARENTEXT,PARENTID,ISFOLDER,CODE(UPPER)                     |PCODE      
I=PDESCR   |of PARENT and |0     |PARENTEXT,PARENTID,ISFOLDER,DESCR(UPPER)                    |PDESCR    
I=CODE     |of CODE       |0     |CODE(UPPER)                                                 |CODE      
I=DESCR    |of DESCR      |0     |DESCR(UPPER)                                                |DESCR      
#

Из Фокса для PCODE
PARENTEXT+PARENTID+STR(ISFOLDER,1)+UPPER(CODE)
ещё и FOR
.NOT.DELETED()


 
Anatoly Podgoretsky ©   (2009-03-10 14:21) [44]

> It"s me  (10.03.2009 13:46:36)  [36]

Да ну, например I*Rnd


 
Anatoly Podgoretsky ©   (2009-03-10 14:22) [45]

> KSergey  (10.03.2009 13:52:38)  [38]

И так за семь лет, по многомиллионной таблице.
Но ведь все равно придется :-(.


 
Anatoly Podgoretsky ©   (2009-03-10 14:23) [46]

> Сергей М.  (10.03.2009 14:02:41)  [41]

Или не вырывать волосенки по одной.


 
AndreyV ©   (2009-03-10 14:28) [47]

> [45] Anatoly Podgoretsky ©   (10.03.09 14:22)
> > KSergey  (10.03.2009 13:52:38)  [38]
>
> И так за семь лет, по многомиллионной таблице.
> Но ведь все равно придется :-(.

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


 
Сергей М. ©   (2009-03-10 14:30) [48]


> не вырывать волосенки по одной


Одним словом - мартышка и очко


 
бедолага   (2009-03-10 14:31) [49]


> KSergey

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

Теоретически можно написать обработку, которая и произведет заполнение таблицы новыми записями.

Может кто-то имеет возможность готовую обработку, для подобной ситуации скинуть?


 
AndreyV ©   (2009-03-10 14:38) [50]

> [49] бедолага   (10.03.09 14:31)
> Может кто-то имеет возможность готовую обработку, для подобной
> ситуации скинуть?

INSERT INTO ДОГОВОРЫ (ID) SELECT ID FROM КОНТРАГЕНТЫ GROUP BY ID


 
AndreyV ©   (2009-03-10 14:45) [51]

> [50] AndreyV ©   (10.03.09 14:38)
> INSERT INTO ДОГОВОРЫ (ID) SELECT ID FROM КОНТРАГЕНТЫ GROUP
> BY ID

Не "Контрагенты", а "заказы" какие-нибудь и прочее

INSERT INTO ДОГОВОРЫ
 (ID_контрагент, ID_договор)
SELECT ID_контрагент, ID_договор
FROM заказы
GROUP BY ID_контрагент, ID_договор


 
Desdechado ©   (2009-03-10 15:33) [52]

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


 
AndreyV ©   (2009-03-10 16:03) [53]

> [52] Desdechado ©   (10.03.09 15:33)
> Вот я не помню точно, но есть подозрения, что записи, помеченные
> на удаление в DBF, также индексируются, но при этом в индексном
> файле нет отметок об удаленности.

Ну да. В условии индекса ставят выражение
for !deleted()
для удобства и скорости.


 
blackman ©   (2009-03-10 20:53) [54]

Может быть поможет

Формат DBF. Формат индексов CDX IDX. Структура файла memo в системе FoxBASE+ (типа .DBT). Unit обработки данных на языке Pascal
http://articles.org.ru/docum/dbfbase.php

Однако я бы не взялся за это :)



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.61 MB
Время: 0.006 c
2-1238746934
Iriss
2009-04-03 12:22
2009.05.17
работа с Gridom


15-1237371996
DmitryFox
2009-03-18 13:26
2009.05.17
Delphi 2009 и Delphi Prism


2-1238660648
DmitriyR
2009-04-02 12:24
2009.05.17
Си и Delphi


2-1238655986
bobwild
2009-04-02 11:06
2009.05.17
Импорт записей в главную и подчиненную таблицы из файла


2-1238647976
Evggeniy
2009-04-02 08:52
2009.05.17
с какой БД работать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский