Михаил Торговкин (старший эксперт БД ЦРЦТ «Максимум») в своем выступлении рассказал, как превратить понимание внутренностей таблиц PostgreSQL в инструмент спасения, когда время тикает, а бизнес застыл в панике. Никаких гарантий и общих методов восстановления, но реальный шанс для тех, кто не боится запачкать руки в битах и байтах, есть всегда.
*Прямая ссылка на видео https://www.youtube.com/watch?v=YWtWSG2P-VA
**Таймкоды сделала нейросеть https://300.ya.ru
Расшифровка видео
Поиск по видео
0:00
[музыка]
0:09
Приветствую всех, коллеги. Всех рад видеть. Сам рад тоже перед вами
0:14
присутствовать. А я мой доклад хочу рассказать о том, как можно восстановить
0:22
базу данных, как восстановить таблицы. Ну, если кажется, что уже всё совсем всё
0:28
плохо, всё пропало, вот, а как это
0:34
сделать? Вот. Ну, на самом деле, в Постгресе
0:40
м это довольно-таки просто даже, ну, по сравнению, скажем, смоскуилем.
0:51
Ага. Всё. Так.
0:59
А какие бывают виды повреждений в базах данных? Это бывают логические
1:04
повреждения и физические повреждения. Логические повреждения — это когда у вас таблички какие-то записи там потерялись,
1:11
вы что-то не увидели. Ну, то есть две таблицы есть одни одишники, есть другие
1:16
одишники. Думаю, все это знают, всё понимают. Одни записи пропали. Мы будем говорить о физических
1:22
повреждениях, когда таблицу вроде она есть, ну и база у вас вроде как
1:27
работает, всё нормально, но раз что-то а какой-то элемент
1:34
приложений перестал перестал работать, например, не загружаются а вложения. Вот. А вот мы
1:43
будем говорить о физических повреждениях. Вот. виды ошибок, которые встречаются, я их
1:51
видел, вот бывают такого вида. Они вообще бывают очень, ну, как бы разные,
1:57
даже, наверное, я здесь не все перечислил. Вот четвёртое, например, очень интересное,
2:02
когда ошибки происходят, там ПГ пытается выделить запись, там, например, там пару
2:10
килобй, а он под неё, например, 18 ГБ памяти пытается выделить и при этом
2:16
просто крашится. Вот.
2:22
А что вообще нужно самое главное делать? Самое главное надо делать бэкапы. Если
2:28
есть бэкапы, то как бы ваши шансы на восстановление данных увеличиваются. Я думаю, все знают. Перед и перед
2:36
диагностикой данных, восстановлением обязательно надо сделать копию каталога
2:43
БД. Желательно вообще делать. Вот если вы какое-то действие совершаете, начинайте с таблицей, а лучше тоже
2:51
сделать копию. И желательно, чтобы,
2:56
а, как бы у вас с вами ещё был человек, который вас будет поддерживать. Лучше
3:04
это делать вдвоём, но это я чуть дальше об этом поговорю. Вот. А после того, как
3:10
вы данные восстановили, вот базу данных использовать, ну, сразу не как бы
3:15
нельзя. Вам кажется, вы, может быть, восстановили табличку и всё у вас стало нормально, и дальше вы работаете. Так лучше не делать. Вот. А
3:24
там кластер BD нужно поднимать заново. Вот. Ну я это чуть дальше тоже об этом
3:31
подробнее скажу.
3:38
А важный момент хочу сказать, э что делать и что не надо делать. Ну, опять
3:45
это, наверное, я возвращаюсь к тому же, э, не надо лечить только симптомы
3:52
болезни, не выявив его причину. Нужно, короче, поискать, посмотреть, во-первых, из-за чего у вас это произошло.
3:59
А нужно проанализировать в первую очередь логику, которая у вас есть. Ну,
4:04
вот в постгресе. После того, когда вы узнали, когда это происходило,
4:10
желательно ещё позвать какого-нибудь инженера, девопса, чтобы он ещё посмотрел, что там происходило вообще с
4:15
железом. Может, это на уровне железа было. Вот. Ну опять, то есть вы восстановите в роде базу, а то есть от
4:22
чего, из-за чего это произошло, вы не знали. Вот поэтому торопиться, как бы, ну не нужно запускать её в работу. Вот.
4:31
А то есть восстановив данные в несколько таблице, продолжать работать, использовать базу нельзя.
4:39
А нужно всегда, то есть провести реконструкцию ошибок,
4:44
первопричин, постараться получить всю информацию с самого начала, почему инцидент когда
4:50
произошёл, вот с чего всё началось. А, ну и дальше мы перейдём
5:00
уже, наверное, к самой вот как раз интересной моей презентации. Что я хотел рассказать? А как таблицы
5:07
восстанавливать? У вас может так оказаться, вы подумаете, что у вас может быть одна табличка не читается, а на
5:12
самом деле, ну, вы на неё нарвались и пытаетесь с ней работать. Так делать не
5:18
надо. Самый первый способ, вам нужно попробовать выяснить все таблицы, которые у вас сбойные, как они
5:24
считаются. Это сделать можно с помощью ПГДМПА. Вот. А все её знают. Там можно в
5:31
режиме тестирования прочитать. То есть он будет читать каждую таблицу. Вот. Аэ.
5:36
И то есть, ну, пытаться её прочитать. Вот если это не не получилось, то,
5:42
значит, у вас проблемы с таблицей какая-то, какие-то сбои идут. Ну вот. А
5:47
можно по-разному делать, кому как это будет удобно, как будет нравиться. Я, например, больше как бы разработчик, мне
5:54
больше нравится коляться в СQэле. И я бы это сделал с помощью команды копи.
6:02
делаешь просто скрипт по всем таблицам и пытаешься их скопировать. Если таблица не читается, то, соответственно, как бы,
6:08
ну, понятно, что что-то какой-то сниз бой произошёл. Вот. А я вот, знаете, сейчас
6:13
вернусь. Ээ, что-то клиппер назад не возвращается. Как его
6:20
вернуть? Никто не подскажет. Или как любит шутить, деньги
6:26
кончились. О, вот заработал. Когда вы видите вот эти вот
6:33
ошибки, встречаете, да, если вам не приходилось никогда делать, если лезть в Google или лезть в ней россетки, она вам
6:41
будет советовать. Все советы идут на то, что типа сделайте вакуумфриз, либо сделайте вакуумф. Но
6:48
когда у вас таблица не читается, вы уже не можете сделать ни вакуумфз, ни вакуумф. Вот я вот к
6:56
этому. А, поэтому тут вот идёт ПГДМАП. ПГДМПом
7:02
либо с помощью команды копи вам выяснить нужно, какие таблицы у вас перестали читаться. После того, как вы получили
7:09
список этих таблиц, а вам обязательно нужно составить план
7:16
ваших действий, что вы будете делать. А как бы как происходит обычно
7:23
зачастую? То есть база не работает, табличка не читается и тут же вот полезли как бы делать эту таблицу. Вот и
7:30
всё вроде хорошо запустилось. Нет, вот нужно вот начать в первую очередь с
7:36
чтения составить весь план. И важно тут, когда вы будете восстанавливать, важно понять, где вы будете сохранять эти
7:42
данные в восстановленных таблицах. возможные варианты. У вас, в принципе, как бы может такое быть, что база у него
7:48
живая, вы можете даже там новые таблицы создать, писать в неё и как бы восстанавливаемые дамы записывать туда
7:55
же. Это удобнее всего. Вот. Но всегда чуть-чуть риски есть, потому что вы не
8:01
знаете, а вдруг у вас там, ну, как бы вот опять же тут нужно выяснить, не были ли не было ли у вас проблемы с железом.
8:06
Если с железом была какая-то проблема, то вы опять можете нарваться что-нибудь счинять. Можно делать текстовые файлы и
8:14
такой хороший, безопасный способ — это ФДВ таблицу создать. Ну, способ такой,
8:19
чем его главный недостаток, это довольно-таки медленно всё работает. Ну, вы отдельный сервис создаёте с помощью ФДВ, вы заливаете туда. А после того,
8:28
как вы таблицы восстановили, м, провели как бы все
8:33
операции по восстановлению, нужно проверить логическую целостность. Ну, можно ли вообще с этими данными потом
8:39
работать? Вот. И вот я говорил, очень важно, чтобы у вас был коллега, который
8:44
бы смотрел, что вы делаете. Кроме того, что он будет за вами смотреть, а всегда
8:51
это как бы происходит неожиданно. Торопятся люди, ты нервничаешь, тебя все
8:56
ждут, когда ты что восстановишь и когда, если вы делаете не один ещё коллегой, и появляются какие-то новые идеи, что
9:02
можно ещё попробовать добавить в план. Вот. Ну,
9:08
лучше, конечно, от намеченного плавно не отступать. А как восстанавливать
9:16
таблицу? Вот мы выяснили таблицу, которая читается. Ну, мы будем говорить о таблице
9:22
атачмент. А, все, наверное, знают, в Постгресе есть, э, уникальное
9:29
служебное поле CT ID, Current Typle ID. Вот. А в Oracle — это R ID. В MSQL,
9:36
кстати, может, не все знают, но там, кстати, тоже есть. Ну вот она только не документированная называется, там
9:41
пишется, по-моему, процент type чего-то там. Ну, то есть как бы э в MSQL он тоже
9:48
есть Row ID CTID. А CT ID состоит из двух цифр
9:54
с номера блока. Ну вот, и второй с позиции в этом блоке. Вот номер блока
10:01
может быть, э-э, получается, а, в 2три вто степени, там больше 4 млрд, а 250
10:08
лайнмер от нуля до 255. Прежде чем вы как бы
10:16
восстанавливать таблицу, первым делом нужно узнать примерное количество живых строк в таблице, сколько там было. Самый
10:22
простой способ — это зайти в представление PGS Stat user Tables и
10:27
посмотреть, что там у нас лежало, сколько у нас записей там было. Но важно, чтобы
10:34
вакуум аналайз, анаalйз либо просто вручной вакуум аналайз, точнее не
10:39
обязательным вакуум, значит время было не так уж давно, там не месяц назад.
10:45
Если месяц назад вы уже вам уже придётся придумывать, сколько же у вас там возможно было таблиц. И полученное
10:51
значение вlп его нужно просто запомнить. Оно нам дальше пригодится на следующем
10:59
скрипте. Если же он никогда у вас не выполнялся, то тогда вам просто придётся сдавать очень
11:04
огромное значение, м, которое могло бы быть в этой таблице.
11:12
А когда начинаем создавать дальше следующим подготовка
11:18
перед следующим скриптом, следующим шагом. Это нужно со как я, как я это
11:23
делал, один из способов это сделать две небольшие таблички, в которую вы будете
11:30
записывать CT ID, которые у вас прочитались и которые у вас не прочитались. А как вариант можно сделать
11:38
[музыка] копию как бы таблицы, которую вы восстанавливаете, и данные сразу не
11:44
собирать ЦТ, а данные собирать сразу в эту табличку. А в первом способе мы как
11:51
бы получаем здесь информацию о том, что те строки, которые вообще не читаются, то есть если не читается он по повод
11:57
CТИ, то вы уже этим способом с этой строкой вообще ничего сделать не
12:02
сможете. Вот. Я дальше об этом ещё расскажу, почему
12:08
так делать. На следующем скрипте более понятно будет. А, ну такой
12:16
скрипт шаг восстановления. А вот здесь указки нету, да?
12:23
Или как? Нету, да? А идти мы просто пойдём по циклу.
12:32
Цикл получается состоит из двух интераций. Блок и второй цифра, позиция в блоке. Вот вот
12:41
количество, вот комментарии у меня написан количество обрабатываемых строб. Вот та запись, которую вы мы запомнили в
12:48
NL type PGstat users, вот это значение сюда надо поставить. То есть это вероятное значение, где у вас больше
12:56
этого количества записей точно не было. А здесь как бы по скрипту в цикл идёт.
13:02
Мы пытаемся просто прочитать запись по нади и вставить её в таблицу, где у нас
13:08
читается. И если не читается, срабатывает как бы exception и записывается в другую
13:14
таблицу. А я рекомендую как бы делать это, если таблица большая, ещё порциями
13:21
комита делать для того, чтобы у вас это, ну, как бы вы видели, по крайней мере,
13:27
что у вас происходит. Вот разные таблицы, соответственно, они где-то, где-то 5.000. Как вариант ещё можно
13:33
написать, сделать, чтобы по времени, например, ну, как бы происходило это
13:39
через 1ну минуту. Кстати, сейчас правильном идёт коллега, там у него расширение по ГТАТ,
13:47
он рассказывает. Вот у него там есть пачками, он грузит по тысяче, а у него вот нету
13:52
это по времени, например, через одну минуту сделать. Надо ему эту идею подкинуть.
13:58
прямо с ходу приходит такая мысль. Вот. А, то есть мы таким, можно,
14:04
короче, получили ID. Ну, дальше у нас дальше у нас следующий скрипт. Это уже
14:12
идёт восстановление данных. Здесь как бы совсем очень простенький написан. Ну, просто мы создаём ещё новую таблицу с
14:21
той структурой, которая она у вас была. То есть у нас ещё не самый плохой случай. У нас база запущена. Вы вы
14:28
видите структуру каталогов, таблиц. Вот, ну, как бы пытаются восстаноть, то есть
14:33
что здесь будет происходить? Возможно такое, что у вас будут двойные
14:41
айдишники, а, либо вы по ЦТ прочитали запись, вот, а когда вы пытаетесь уже
14:49
читать данные из этой таблицы, она не читаются. То есть вот в этот
14:54
скрипт желательно добавить ещё, как в предыдущем скрипте обработку то тех
14:59
записей, которые не вставились. Вот. То есть, ну, то есть, например, как бы таким образом вы
15:06
айдишники двойные получите. Ну, конечно, можно ещё скриптом написать по полученим CT ID,
15:15
а выбрать нужные это нужные вам айдишники. Вот.
15:22
дублированный. Это очень интересно, когда вы видите в таблице два
15:30
ядишника. После того, как мы восстановили, а, нужно обязательно
15:36
поднимать новый кластер. Если у вас, ну, где-то, может быть, на реплике или ещё что-то, то есть
15:41
вы структуру накатываете и восстановленную базу туда заливаете. Либо надо, если у вас есть ещё какой-то
15:49
старый бокап, старый бокап поднимаете, сравниваете с тем, что у вас было восстановлено, то есть проявляете
15:56
логическую структуру и дальше, ну, как вы уже, ваша база, в принципе, живая.
16:01
Вот. Но никогда не используйте, вот восстановили таблицу, никогда не используйте базу. Потом быва бывают
16:08
такие случаи, что даже, а ты, вы таблицу восстановили с тем же именем её
16:15
запустили, у вас всё работало, работало, раз в месяц проходит, опять та же фигня.
16:22
Вот. Прошу прощения за мой слнг.
16:28
Ой, ну мы поговорили про то, что когда таблицы уже нельзя восстановить, вернее,
16:35
когда ещё база запущена, а может такая быть ситуация, когда у вас
16:40
недостаток валов идёт или когда они пропущены, вы пытаетесь сервер запустить, да, а он у вас не
16:47
запускается. Ну, первым делом, конечно, вы заглянете в логи. Вот. Ну, ещё не всё
16:54
потеряно. Ну вот есть такая утилита PG Reset Wall, вот, которая, в принципе,
17:00
может возродить и запустить базу данных. Но если у вас это происходило, после
17:06
того, как вы восстановили тоже нежелательно эту базу, она у вас запустится, вы у вас выдите вы все
17:12
данные, как бы вроде бы, но желательно эту базу потом не использовать.
17:18
А сначала тестовый прогон прогнать. Ну, у меня вот здесь немножечко ошибка в скрипте. Там ещё должен был быть ещё
17:24
один параметр. Вот. А если это не помогло, это уже прямо украше. Есть
17:31
параметр F. Вот. А все описания по параметрам PGRS wall, они вот есть. Я
17:38
адрес здесь не писал, можно там почитать. На моей практике PGRs Wall мне
17:44
приходилось только один раз использовать. То есть не было такого, что прямо уж совсем всё до такой степени
17:50
доходит. А, ну переходим к следующему
17:57
слайду. Если у вас произошла ситуация, что вы у вас даже сервер уже не запускается,
18:05
PGRsetwall вам не помог, последний оплот и последняя инстанция, как бы вытащить
18:11
эти данные — это уже PG файл dump. А, ну здесь не на слайдах. Я хотел дальше
18:18
показать уже интерактивно, как с помощью этой утилиты вообще можно вытащить
18:25
данное. А что вот хочется сказать? Хорошо, если
18:31
у вас осталось живой э структуры каталогов. Если она у вас осталась, у
18:36
вас прямо есть шанс. Если она у вас не остановилась, вам, ну, я будет очень
18:42
тяжело. Можно восстановить данные. У вас, в принципе, пользовательские таблицы, они остаются. Вот ещё
18:48
живы. А мы здесь, я сейчас покажу, как бы все,
18:56
наверное, знают, есть такая таблица ПГ класс и ПГ это атрибутыс. В PGклас хранятся
19:03
списки всех таблиц. Ну вот, а в PG атрибус там хранятся уже атрибуты,
19:10
соответственно, таблиц. Вот вам при использовани PG File Tab вам нужно знать
19:17
типы полей, которые используются. А в постгресе у каждой
19:23
таблички есть как бы свой файл, соответственно, вот он, его имя хранится
19:29
в таблице PG класс. И если у вас вот сервер не
19:34
запускается, вы PG-клас не можете как бы прочитать, посмотреть, выяснить,
19:39
какой там файл. А здесь вот как это можно сделать, э, с помощью pг файл
19:48
дампа. А здесь, а, указывается параметр D. Вот.
19:56
А и дальше перечисляются по порядку типы полей,
20:02
которые там были. Вот 1259 — это файл в каталоге базы
20:11
данных. Он стандартно прописан в исходниках. Бет номер. Это у нас как раз
20:16
ПГ-класс. Вот. А мы как бы запускаем этот такой скриптик и потом смотрим, что
20:23
у нас там, что же у нас мы получили с помощью него.
20:29
А видим мы вот это вот у нас таблица, которую мы, я про которую рассказываю,
20:36
table. А первая строка, первая самая колоночка — это ваш Oит. Вот. А он,
20:46
конечно, нам важен и он нам нужен будет, когда мы атрибуты будем смотреть, но нам важен самая последняя колонка восьмая.
20:53
Вот. И самые последние цифры 24611. Это как раз а номер файла. Если у вас,
21:02
например, vacumф выполняли, у вас в каталоге БГ класс, у вас будет этих записей здесь несколько, потому что
21:08
здесь, когда мы смотрим, мы получаем вообще все записи, которые уже, ну, как бы они недействующие, их уже нету, то
21:15
есть они помечены на удаление мёртвой записи. Вот мы сейчас узнали, что у нас,
21:21
а, запомним это, что у нас номер 24611 — это наша табли табличка sample
21:28
table. А, но мы видим, что у нас есть таблица, но мы не знаем, какие у нас там в ней поля. Вот PGRIP, надо заглянуть в
21:38
него и увидеть, что же там происходи, что же у нас там. Так, сорри.
21:45
[музыка] М,
21:53
а табличка 12 49, ой, вернее, таблица ПГ
21:58
атрибус — это номер, э, файла 1249. Вот, э, я заранее просто посмотрел
22:06
уже, м, какие там типы, вот, и их сюда
22:12
прописал. Вот. А здесь нам уже важен как
22:19
раз этот уид таблицы, его идентификатор, который вот здесь он у нас в первой
22:27
колонке он у нас неизменный. Мы по нему идём. Сейчас будем искать, какие у нас
22:32
атрибуты в этой
22:39
таблице. И вот мы видим вот атрибуты нашей таблицы. Ну, наши там д
22:46
получается два поля. Поле ID и поле. А вот эта колонка третья — это тип
22:54
поля 23. Номер 23 соответствует типу in, вот, а 25 соответствует типу текст. Ну,
23:02
какие типы, я по памяти их все не помню, но их можно посмотреть это в документации по ОПГ, узнать, какой у
23:09
вас. Ну, когда вы всем этим занимаетесь, вы это всё очень легко выяснится. Ну отлично, мы выяснили, значит, у нас а
23:16
айдишник и текстшник у нас есть. Здесь у меня, конечно, сервер ещё запущен, и он
23:21
работает. Посмотрим, что у нас это есть в этой таблице Sample
23:30
table. У нас есть здесь две записи. Вот. Ну, она у нас рабочая. Вот. Но мы
23:38
представляем, что она у нас она у нас нерабочая.
23:44
Вот. А она у нас не работает. Данные нам из неё надо
23:52
вытащить. Делается тоже. Мы знаем у нас intптекст. И мы знаем получается
23:59
название файла. Вот здесь я уже грип не использую. Я
24:06
просто специально показать, что там вообще как бы как на самом деле показывать, что ПГ файл дам.
24:14
возвращается. И вот в этой табличке мы видим, что у нас есть записи. Вот они, а
24:21
строка копия идёт один, текст один, текст 2. И он, соответственно, он
24:26
соответствует тому, что мы видим в нашей таблице. А хочу вот такой
24:33
интересный момент написать. Ну вот у нас здесь мы сейчас видим две записи, да?
24:39
Мы попытаемся сейчас взять и одну запись, провести с ней
24:48
апдейт. Апдейт мы провели. Вот.
24:54
А, и попробуем посмотреть с помощью файлдампа, что же у нас в этой таблице
25:01
есть.
25:08
Ох, прошу прощения, я не на то окно
25:21
переключился. А если мы в файле смотрим, у нас нету этой записи. Вот. То есть мы её вообще как бы
25:28
не видим, хотя мы таблицу обновили. К чему я это всё мы не видим, потому что у
25:33
нас ещё не прошёл чекпоинт. И я веду к тому, что вот как раз очень важно, а при
25:40
настройке ПГ правильно настрои настраивать чекпоинты в случае, если вам
25:46
нужно будет восстановить вот как раз пример. Если бы база бы упала, да, и если бы чекпоинт вовремя не прошёл, то
25:53
мы вот эту последнюю запись с апдейтом, мы бы её не видели. Теоретически мы её могли бы восстановить из валфайла.
26:01
Вот. А сейчас я здесь запустил чекпоинт. Да, у
26:07
нас запись таблицы обновилась. И мы посмотрим, что у нас на
26:12
физическом уровне произошло. Ой, опять не виду в окно. Я вкладка.
26:29
Здесь мы видим уже три записи. Вот. И мы видим как раз вот эту
26:34
мёртвую строку текст 21, текст 22. Аа вы, когда с помощью файл d
26:42
попытаться его восстанавливать, вы будете видеть все строки. Вот мёртвые строки. Файл dampм позволяет
26:50
отсеять, если сделать ключ
27:00
О. М, что-то пошло не так. А, ну я его не там прописал. Всё
27:07
правильно.
27:19
Typ l remed. Мы видим, какая у нас запись уже помечена на удаление была. То есть вы, когда выгрузили подобный файл,
27:27
получили, то, в принципе, вы можете это свои данные таким образом
27:32
восстановить. А у меня по моей презентации всё. Вот в конце ещё
27:38
хотелось бы добавить, делайте бэкапы.
27:49
А ещё что хотел сказать? Вот ээ нету как бы вот волшебной кнопочки,
27:55
но вот э я думаю надо начать писать какою-то
28:02
удилитку или ещё что-то, чтобы она была и не с командной строки можно было устанавливать таблицу.
28:09
Если есть вопросы, я с удовольствием поотвечаю.
28:21
А, спасибо за интересный доклад. А вот вы сказали делать бэкапы, это, конечно,
28:26
хорошо, но есть так называемый бэкап шлёдингера. И когда он есть, но его
28:31
вроде и нету. То есть когда он пытается развернуть с бэкапов и не получается, потому что бэкап битый. Аа вопрос,
28:37
бывало ли у вас на практике такое, что а база упала, бэкапов нету и надо как-то
28:43
восстанавливать. И что делать в этой в этом случае, если вообще вот что-то
28:48
можно сделать? А старая база просто не запускается или её вообще нету?
28:56
Ну, допустим, не запускается. А, но если она не запускается, то надо идти вот по всем тем шагам, которые это, то есть, и
29:02
блокап я не могу восстановить, если и такие ситуации как бы встречались, а, либо блокап там был очень-очень старый,
29:10
вот, то как бы вот таким способом, такими способами можно восстановить таблицы.
29:16
А, хорошо. Тогда какая та граница, когда уже восстановление просто невозможно?
29:23
когда невозможно. Очень сложно вам будет восстановить, если у вас нет таблиц
29:30
структуры каталогов ПГ-класс. То есть вы не сможете узнать
29:37
а отключили там уже, да? Вы не сможете узнать, как что у вас вообще было в таблице, какая у вас структура. PGфайл
29:44
Dump вам даёт возможность восстановить. Они физически ещё живы. Это как сбойный диск. Там файловая система накрылась, но
29:51
на диске ещё информация осталась. То есть, если у вас структура каталогов
29:57
живая, даже если у вас не запускается база данных, вы можете её восстановить. То есть, ну, я могу ещё раз как бы
30:05
показать. То есть мы здесь узнаём, какой как бы
30:13
вот номер файла, да. Вот я сейчас в
30:18
этом каталоге
30:25
нахожусь. Так, 24600 же, да?
30:32
Вот. Вот он. Вот он этот файл 24. Это файл таблицы. Он у вас жив? Ну вот он у
30:40
вас жив. То есть вы вы с помощью вот э получается ПГ файл дампа, прочитав
30:47
таблицу 12 125 PG класс, это таблица PG-класс. Вот вы её прочитали, вы узнали
30:53
в каком как бы, то есть вот видно название таблицы SLE table и в
31:00
какой в каком файле они лежат. А следующим шагом вы можете прочитать таблицу
31:08
атрибутов, узнать, какие там были айдишники, какие поля, какие типы. И
31:14
после этого уже, когда вы знаете, какие у вас типы перечислены, по порядку их,
31:23
э, зная размер файла, вот запускаете PG файл dump, ключ D, перечисляете типы
31:31
полей. которыю вы получили, и всё. У вас данные, как бы, вы их увидели, они у вас
31:36
живы. Спасибо.

