powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
10 сообщений из 10, страница 1 из 1
Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
    #33405393
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ужас. База на Psql 7.4.6. Нет резервной копии ... (вернее, есть, но трехнедельной давности:(). Местный админ серверов по этому поводу разводит руками - ну виноватого искать - последнее дело.

Писал запрос на обновление одной записи от имени postgres. Отвлекли, и не дописал where id = ... В результате обновил одним значением колонку во всей таблице (40000 записей). Попытка оборвать транзакцию не увенчалась успехом.
Чего делать ? Сервер пока остановлен, чтобы не было операций записи. Бухгалтерия в шоке, я тоже :(
Как я понимаю, пока не было vacuum в базе хранится предыдущее состояние таблицы. Или нет ? Если можно как-то его достать - помогите, pls ! Горю !
...
Рейтинг: 0 / 0
Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
    #33405894
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что выдает утилита pg_controldata :

pg_control version number: 72
Catalog version number: 200310211
Database cluster state: shut down
pg_control last modified: Tue 29 Nov 2005 11:10:56 AM EET

Current log file ID: 1
Next log file segment: 35
Latest checkpoint location: 1/224FB76C
Prior checkpoint location: 1/224CDB34
Latest checkpoint's REDO location: 1/224FB76C
Latest checkpoint's UNDO location: 0/0
Latest checkpoint's StartUpID: 24
Latest checkpoint's NextXID: 2845407
Latest checkpoint's NextOID: 17315369
Time of latest checkpoint: Tue 29 Nov 2005 11:10:53 AM EET
Database block size: 8192
Blocks per segment of large relation: 131072
Maximum length of identifiers: 64
Maximum number of function arguments: 32
Date/time type storage: Floating point
Maximum length of locale name: 128
LC_COLLATE: ru_UA
LC_CTYPE: ru_UA

В каталоге /xlog есть файлы вчерашнего и сегодняшнего дня, в каталоге /clog есть файлы вчерашнего и сегодняшнего дня с соответствующим временем.

Как отменить транзакции по состоянию на вчера ?
...
Рейтинг: 0 / 0
Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
    #33406118
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 7.4 помойму штатных средств нету, хотя я могу ошибатся ,что то где то по форуму пробегало(мож конечто это про 8.0 было)...поищи здесь...

востанови по возможности часть данных из бакапа остальное руками...если в таблице всего 40000 записей то могу предположить что много не могло за 3 недели поменятся. какойто кусок думаю остался неизменным... хотя это только предположение.
...
Рейтинг: 0 / 0
Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
    #33406140
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если _фантазировать_ исходя из этого , то (сделав есессно _полную копию_ всех файликов, которые можно только помыслить) надо попытаться срубить последние файлики WAL. (тогда при старте постгрес кажется должен восстановиться на предпоследний попавший в WAL момент).

Но это именно фантазия. Опыта не имею. (т.ч. хорошо бы это пробовать на нерабочем сервере).
...
Рейтинг: 0 / 0
Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
    #33409690
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рапортую. Все оказалось очень хреново :(. Журналом транзакций воспользоваться нельзя, хотя в файлах xlog явно лежат исходные странички данных, которые модифицировались в той злощастной транзакции - смотришь, облизываешься, но ... По оценкам, мы потратили бы примерно неделю, чтобы написать свою утилиту разбора формата xlog-файлов, чтобы получить исходное состояние таблицы. Лихорадочные поиски готовых таких утилит ничего не дали.
Как я понял, система отката реализована только в версии psql 8.
Пришлось восстановить данные с архива трехнедельной давности и перенести оттуда нужный столбец, часть свежих данных в этот столбец получили из других таблиц путем несколькочасовых бдений до 12 ночи. А около 500 строк так и остались кривыми. Бухгалтера их еще долго будут разгребать. Ну, мы их пометили для их удобства :)
Возможно, что можно копать в сторону формата файла pg_control (он нигде явно не описан), в нем подменять значения checkpoint-ов и перезапускать postges в надежде, что будет восстановление с записанного насильно checkpoint-а. Но это только фантазия, скорее всего - не все так просто. Ну - мы еще исправили значение интервала между checkpoint-ами в сторону увеличения, чтоб хватило времени добежать и клацнуть питанием, в случае чего :-) Ну и приняли меры к резервному копированию.
В доке по WAL к версии 7.4 одни обещания, как все круто будет в 8-й версии. И вроде как оно там есть - никто не пробовал ?
...
Рейтинг: 0 / 0
Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
    #33409812
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8.0.x - 8.1 вполне уже можно использовать как промышленные, имеется возможность он-лайн бэкапа с накатом транзакций на заданное время, автоматическое бэкапирование журналов на другой сервер. Лучше перейти на 8-ку, спокойней будет
...
Рейтинг: 0 / 0
Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
    #33410393
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мы у себя на "ручные" апдейты в боевую базу перевели на следующую технологию
создаем временную(не темповую) таблицу структурой

xtable (row_id_key,old_value,new_value);
проверяем табличку,далее делаем
update table from xtable set data=xtable.new_value where id=xtable.row_id_key;

если вдруг спустя сутки обнаружится что это косяк в апдейтах.. или там условие неправильное и надо откатится срочно делаем точно такой же запрос
update table from xtable set data=xtable.old_value where id=xtable.row_id_key;

вобщем получается долгоиграющая транзакция с возможностью undo/redo

это при этом не надо достовать 1 табличку из гиганского бакапа и трахатся с востановлением данных.. но естественно это не панацея т.к. есть случаи когда такое востоновление делать нельзяб,например если поле которое мы обновили меняется достаточно часто и при востановлении таким способом мы рискуем потерять часть валидных данных.
...
Рейтинг: 0 / 0
Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
    #33410886
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
учусь заочно.
на прошлой сессии нам на БД расказывали что postgresql обладает "темпоральностью", т.е. все изменения хранятся в базе и можно узнать значение на любой момент времени?
после этого весь вечер ее(темпоральность) искал - не нашел :(
может кто знает как ее можно использовать?
...
Рейтинг: 0 / 0
Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
    #33410981
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemA wrote:
> учусь заочно.
> на прошлой сессии нам на БД расказывали что postgresql обладает
> "темпоральностью", т.е. все изменения хранятся в базе и можно узнать
> значение на любой момент времени?
> после этого весь вечер ее(темпоральность) искал - не нашел :(
> может кто знает как ее можно использовать?

И не найдешь - time travel выброшен где-то к релизу 6.2 :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
    #33411202
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XM
И не найдешь - time travel выброшен где-то к релизу 6.2 :)
Posted via ActualForum NNTP Server 1.3
так и думал :) а почему убрали?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Help !!! Горю ! Надо восстановить один столбец в самой важной таблице !
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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