Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 Какая СУБД может делать выборочную отмену изменений?  [new]
Воффка
Member

Откуда:
Сообщений: 65
У меня вот такая задачка: например, в базу данных несколько пользователей вводили ошибочные изменения, удаляли и изменяли важные записи. Одновременно с ними другие поользователи вносили в бд правильные изменения. Возможно ли в какой-нибудь СУБД выборочно удалить изменения, внесенные этими "плохими" юзерами, и оставить изменения остальных пользователей? И в какой это сделать удобней всего?
Сразу напрашивается вариант составить дополнительную таблицу, в которую будут вноситься все изменения, но это слишком расточительно к месту и к производительности запросов на изменение/удаление... Помогите мне пожалуйста))
28 сен 06, 20:27    [3199159]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Все СУБД такие ... но при условии что вместо того, чтобы придумывать решения, проектировщик для начала задумывается над задачей. Вам шашечки или ехать ? Вам обязательно такая СУБД нужна, или же легче задуматься о других способах решения самой задачи, которых множество и которые нужно применять комплексно - это система разграничения прав пользователей на изменение информации, это проверка правильного ввода информации, в критических случаях это ведение логирования, версионности изменений информации и прочее прочее прочее. Определитесь с задачей и сами найдете решение на абсолютно любой СУБД.
28 сен 06, 21:33    [3199249]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Воффка
Member

Откуда:
Сообщений: 65
Ладно, а если сам админ в процессе работы вводил множество данных, из которых половина оказалась неправильными. И как их отменить? И не обязательно ошибочные изменения будут вводиться со злыми целями, так что права доступа тут не причем
28 сен 06, 22:47    [3199359]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Воффка
Member

Откуда:
Сообщений: 65
Вся структура системы у меня продумана, вот только велика вероятность того что то, что изменения были ошибочны, может всплыть примерно через месяц, и то в этом случае делвть? неужели кроме логирования ничего нет? вроди вполне очевидная и распространенная проблема..
28 сен 06, 22:49    [3199365]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Anton Demidov
Member

Откуда: Atlanta, GA
Сообщений: 1187
В Оракле есть Log Miner - смотрит архивные логи и показывает SQL исполненный и SQL для отмены этих действий. Можно фильтровать по пользователю естественно.
К Log Miner-у есть API, так что написать свою оболочку к нему не составит труда.

--
Антон
Per rectum ad astrum
28 сен 06, 23:00    [3199391]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Лев, Царь зверей
Guest
Воффка
Ладно, а если сам админ в процессе работы вводил множество данных, из которых половина оказалась неправильными. И как их отменить? И не обязательно ошибочные изменения будут вводиться со злыми целями, так что права доступа тут не причем


Заменить безответсвенный персонал. СУБД ни при чём
28 сен 06, 23:21    [3199421]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
error76
Guest
автор
Ладно, а если сам админ в процессе работы вводил множество данных, из которых половина оказалась неправильными. И как их отменить? И не обязательно ошибочные изменения будут вводиться со злыми целями, так что права доступа тут не причем

Ок. Сам админ, вводит (правит, удаляет) 100 записей. Половина из ста - ошибочные. Внимание вопрос! Как системе выбрать из массива 100 записей, те самые 50? какой критерий ошибочности? согласно чему может быть сделана такая выборка? кто определил, что это ошибочные подвижки в бд? Имхо, задача в такой постановке, не имеет решения. Даже если есть полный лог изменений, то это не спасает, ибо неправильными могуть быть 3-я, 10-я,37-я...N-я запись. Так, что ручками-ручками.
28 сен 06, 23:34    [3199434]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Anton Demidov
Member

Откуда: Atlanta, GA
Сообщений: 1187
error76
Внимание вопрос! Как системе выбрать из массива 100 записей, те самые 50? какой критерий ошибочности? согласно чему может быть сделана такая выборка? кто определил, что это ошибочные подвижки в бд? Имхо, задача в такой постановке, не имеет решения.
Все поняли? Раз сам error76 не знает, какая запись является ошибочной, то никто более по определению этого знать не может.
"Туши свет, сливай масло." (с)
28 сен 06, 23:53    [3199454]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Anton Demidov
то никто более по определению этого знать не может.
Мудрая мать-олениха знает. Возможно...
29 сен 06, 00:15    [3199475]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54812

Зайцев Фёдор

Мудрая мать-олениха знает. Возможно...

Значит она и должна вводить данные. А будет вводить неправильные (про
которые знает что они неправильные) - расстрелять за саботаж.

Posted via ActualForum NNTP Server 1.3

29 сен 06, 08:45    [3199806]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19788
Воффка
Вся структура системы у меня продумана, вот только велика вероятность того что то, что изменения были ошибочны, может всплыть примерно через месяц, и то в этом случае делвть? неужели кроме логирования ничего нет? вроди вполне очевидная и распространенная проблема..


Возможен такой вариант. К критичным таблицам создаешь дубли - исторические таблицы и триггера на UPDATE / DELETE к основным. При любой операции UPDATE / DELETE предыдущая версия данных переносится в историческую таблицу. Заодно фиксируется, когда и кто делал. При обнаружении ошибки облегчается возврат старых данных, ну и разборки также.
29 сен 06, 10:47    [3200545]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
VoDA
Member

Откуда: сеРверная пальмира :)
Сообщений: 4898
Воффка
Вся структура системы у меня продумана, вот только велика вероятность того что то, что изменения были ошибочны, может всплыть примерно через месяц, и то в этом случае делвть? неужели кроме логирования ничего нет? вроди вполне очевидная и распространенная проблема..
А кто определит, что данные - ошибочные? На основании каких критериев? Какие действия нужно предпринять? Каков максимальный срок обнаружения ошибки?
Задача не формализована, посему и проблема очень не очевидная, и совсем не распространенная (при правильном проектировании системы).

Перечитайте пост ASCRUS-а выше.

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

Внимение вопрос: что и каким образом должна делать система?
29 сен 06, 12:29    [3201569]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
Для MS SQL Server:

Запускается Log Explorer, ищется транзакция которая внесла неправильные данные. Кликаем правой кнопкой мыши, Undo transaction. Если всю транзакцию отказтывать не надо - последовательно идем по части транзакций и говорим undo operation.

Работает такой подход только если стоит Full recovery model и транзакция еще не удалена из лога транзакций, либо есть бекапы лога транзакций с неправильной транзакцией.
29 сен 06, 12:31    [3201612]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Воффка
Member

Откуда:
Сообщений: 65
Ну ошибочность операции определяет сам оператор, а сделать так чтобы все данные всегда вводились безошибочно невозможно - здесь и усталость, и другие человеческте факторы. В конце концов, информация может вводиться по какому-либо приказу начальства, а потом этот приказ отменили и надо вернуть все как было. Да и мало ли какие ситуации могут быть. Вот хранение запроса на изменение и запроса на отмену изменений это самое оно =)
29 сен 06, 18:31    [3204518]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Воффка
Member

Откуда:
Сообщений: 65
VoDA
[quot Воффка]проблема очень не очевидная, и совсем не распространенная (при правильном проектировании системы)

Интересно, как можно избежать возникновения необходимости отмены изменений или удаления в любых случаях. Неужели с базой данных должны всегда работать супервнимательные операторы, которые никогда не делают ошибок? Это ведь смотря что за база данных. Согласен, такая необходимость не появляется каждый день, но иногда бывает, и тогда оказывается очень нехорошо если нет возможности отменить изменения.
Внимание пример:
Вводили мы данные, устали и по ошибке в нескольких местах втюкнули не то что надо. А через неделю во время работы натыкаешься на эту ошибку. А старые данные, которые были изменены, уже никак и не узнаешь.. А был бы лог можно было бы найти в нем тот самый запрос на изменение и отменить его
VoDA
Пример:
на склад привезли 20 деталей. их внесли в БД.
сейлзы увидели приход 20 деталей и продали 15 шт.
через месяц после продажи оказалось что все 20 деталей внесены ошибочно.

Внимение вопрос: что и каким образом должна делать система?

Если вы читали внимательно мой пост, то там имеется в виду отмена ИЗМЕНЕНИЙ записей а не их ВВОДА
29 сен 06, 18:45    [3204577]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Воффка
Вся структура системы у меня продумана, вот только велика вероятность того что то, что изменения были ошибочны, может всплыть примерно через месяц, и то в этом случае делвть? неужели кроме логирования ничего нет? вроди вполне очевидная и распространенная проблема..

Дык вот значит не всё еще продумано если возникают вопросы как делать исправления. СУБД же не может определить какие данные ошибочные, и программист не может. Значит ввод ошибочных данных - это штатная ситуация, которую надо предусмотреть(с возможностью исправления конечно)
29 сен 06, 18:49    [3204589]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
!!!
Member

Откуда: Да все оттуда
Сообщений: 390
1. Логировать все изменения таблиц, в которые возможен "ошибочное" изменение или удаление данных(удаление - читай, измененение простановкой признака "неактуальна", физических удалений быть не должно и это следует реализовать на уровне БД).
2. Определить, что некоторая запись была изменена или удалена ошибочно.
3. Восстановить по логам актуальное состояние записи до ошибочного изменения
4. Восстановить состояние записей прочих таблиц, на которые повлияло ошибочное изменение.
5. Наслаждаться результатом

Наиболее сложный здесь п.4

Постулат: В грамотно спроектированной и реализованной ситсеме подобные ситуации не возникают.
Определение: Грамотно спроектированная система не удовлетворяет хотелки юзеров, а обеспечивает руководство достоверной информацией
29 сен 06, 19:07    [3204645]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Воффка
Member

Откуда:
Сообщений: 65
SergSuper
Воффка
Вся структура системы у меня продумана, вот только велика вероятность того что то, что изменения были ошибочны, может всплыть примерно через месяц, и то в этом случае делвть? неужели кроме логирования ничего нет? вроди вполне очевидная и распространенная проблема..

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

Не надо пожалуйста придираться к словам! Я и спрашиваю - как и где удобней сделать возможными эти исправления. А раз это не вопрос СУБД, значит и структура моя никаких нареканий не заслуживает
29 сен 06, 21:11    [3205020]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Воффка
Member

Откуда:
Сообщений: 65
!!!
1. Логировать все изменения таблиц, в которые возможен "ошибочное" изменение или удаление данных(удаление - читай, измененение простановкой признака "неактуальна", физических удалений быть не должно и это следует реализовать на уровне БД).
2. Определить, что некоторая запись была изменена или удалена ошибочно.
3. Восстановить по логам актуальное состояние записи до ошибочного изменения
4. Восстановить состояние записей прочих таблиц, на которые повлияло ошибочное изменение.
5. Наслаждаться результатом

С логом все довольно топорно.. Я вот спрашиваю, в какой СУБД это и сделать проще. А то это логирование, восстановление, это ж стока ресурсов жрет, даже больше чем сама операция на изменение
29 сен 06, 21:16    [3205035]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Воффка
С логом все довольно топорно.. Я вот спрашиваю, в какой СУБД это и сделать проще. А то это логирование, восстановление, это ж стока ресурсов жрет, даже больше чем сама операция на изменение

ТЗ своей задачи озвучьте пожалуйста, какая конкретно задача, для кого и в рамках каких условий требуется бороться с юзерами, которые сознательно портят информацию и не неся никакой ответственности хотят, чтобы программа автоматически откатывала БД с поддержкой ссылочной целостностью на правильное состояние. Абстрактное обсуждение непонятно чего вряд ли Вам тут поможет
30 сен 06, 09:49    [3206217]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
DimaR
Member

Откуда:
Сообщений: 1570
Не знаю на сколько подойдет,
В Oracle можно выполнять запросы на момент в прошлом.
30 сен 06, 10:10    [3206225]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Воффка
Member

Откуда:
Сообщений: 65
ASCRUS
ТЗ своей задачи озвучьте пожалуйста, какая конкретно задача, для кого и в рамках каких условий требуется бороться с юзерами, которые сознательно портят информацию и не неся никакой ответственности хотят, чтобы программа автоматически откатывала БД с поддержкой ссылочной целостностью на правильное состояние. Абстрактное обсуждение непонятно чего вряд ли Вам тут поможет

Мне хотелось бы получить впринципе ответ на сабжевый вопрос... Чтобы можно это было использовать в любой базе данных, как где надо бороться с юзерами (например с информацией свободного ввода, общественная такая БД) так и в бд где некоторые поля записей часто изменяются, например номер реестра цен на этот товар, где по невнимательности персоналом может быть допущена ошибка, или же было признано неправильным ранее считавшееся верным решение и надо некоторые данные вернуть к первоначальному виду.
Тоесть есть ли альтернатива полному логу изменений?
30 сен 06, 15:48    [3206592]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
sparrow
Member

Откуда: Россия, Красноярск.
Сообщений: 21761
Воффка
У меня вот такая задачка: например, в базу данных несколько пользователей вводили ошибочные изменения, удаляли и изменяли важные записи.

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

ps. а СУБД при этом может быть любая
2 окт 06, 06:24    [3208396]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
FatalQ
Member

Откуда: Санкт-Петербург
Сообщений: 66
Воффка
Мне хотелось бы получить впринципе ответ на сабжевый вопрос... Чтобы можно это было использовать в любой базе данных

Это реализуется в виде надстроек над СУБД - Wiki-движки, Системы Контроля Версий. Там сохраняются все изменения.
2 окт 06, 06:37    [3208402]     Ответить | Цитировать Сообщить модератору
 Re: Какая СУБД может делать выборочную отмену изменений?  [new]
Friendus
Member

Откуда: Владивосток
Сообщений: 28
Используй понятие транзакций.
Можно спроектировать БД так, чтобы все изменения в ней отражались в таблицах транзакций.
20 окт 06, 02:47    [3285233]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить