|
|
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
Всем привет. ADP+SQLSERVER2000 Вот есть такая задумка по контролю всех измененений вносимых пользователями в базу. Как лучше это отслеживать? 1) средствами SQLSERVER, если такие имеются. 2) вручную добавляя в каждую изменяемую запись: текущего поьзователя, дату изменения. 3) триггерами на INSERT, UPDATE на сервере ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 15:46:03 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
Мне третий вариант нравиться. Вставлять записи по одной на delete,insert, по две на апдейт в рядом лежащую специальную базюку. Может через год руки дойдут, сделаю. Шибко шибко надо :-) Первый вариант не получится, тк средства отсутствуют. Есть средство независимых разработчиков, лумигент называется. Но своими то ручками по любому лучче. второй вариант счас у меня работает. Полная параша, тк не лечит в случае удаления записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 15:56:38 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
Вот и больше к 3 -му варианту склоняюсь. Только вот насколько это сложно сделать? P.S.: А зачем ДВЕ-то на апдейт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 16:10:14 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
Не обязательно, конечно, триггера писать - можно просто всю обработку данных черех ХП сделать - и уже в них (в ХП) в "талицу-лог" писать. ИМХО - конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 16:11:24 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
Рачаев ОлегВот и больше к 3 -му варианту склоняюсь. Только вот насколько это сложно сделать? P.S.: А зачем ДВЕ-то на апдейт? Типа - старая + новая Но ИМХО - новое значение можно и из "рабочей" таблицы вытащить, хотя хранит рядом и удобнее :) Или - запись одна, но там прописываются оба значения + Как мне кажется, это следует делать не совсеми полями и таблицами, а только с "критическими" свойствами некоторых объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 16:14:51 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
2 paramone: Тут еще зависет от задачи: если нам требуется восстановление удаленных записей или откат на старые значения, то нужно будет сохранять все ... получиться что мы ведем детальный лог базы с возможностью восстановления( если мне не изменяет память в Оракле такое на уровне СУБД можна настроить ) Да и потом если и реализовывать механизм "восстановления", то по уровню сложности и временным затратам он наверняка превзойдет саму базу... что никому не надо P.S.: Если нам не требуется механизм восстановления, то напрашивается такое решение: 1) Создаем в каждой протоколируемой таблице доп.поля: создатель, редактор, дата. Делаем один общий для всех типов операций для всех таблиц триггер, который будет протоколировать в табл t_log 2) Делаем таблицу t_log( log_id, table_name, user, tableRecordId, operation, date ), где В ней-то и будем будем вести протокол операций с базой. 3) Вроде все? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 16:42:23 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
где operation={INSERT,UPDATE,DELETE} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 16:43:40 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
Если требуется откат - без аудита, то для этого есть Backup (в том числе и backup лога транзакций) авторДелаем один общий для всех типов операций для всех таблиц триггер, который будет протоколировать в табл t_log Это как: 1. Один триггер на все таблицы? 2. Или одинаковый триггер копируем по всем таблицам? Если 1, то поподробнее, как это делается, и в любом случае сходить на форум по mssql и там почитать много "лестного" об универсальном подходе в создании триггеров и ХП (я не отридцаю, что это не возможно, но уж очень не рекомендуют) автор2) Делаем таблицу t_log( log_id, table_name, user, tableRecordId , operation, date ), где В ней-то и будем будем вести протокол операций с базой. ИМХО: 1. А если ключ составной 2. А если оператор допустил ошибку, то нет данных о старом значении - хотя это (ИМХО) и не методами аудита делается, но иногда бывает полезно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 16:57:40 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
автор1. А если ключ составной Я не претендую на универсальность метода, в крайнем случае эту таблицу можно не протоколировать. В моем же случае если и есть такие таблицы, то юзеры их не правят. автор2. Или одинаковый триггер копируем по всем таблицам? Если 1, то поподробнее, как это делается, и в любом случае сходить на форум по mssql и там почитать много "лестного" об универсальном подходе в создании триггеров и ХП (я не отридцаю, что это не возможно, но уж очень не рекомендуют) Я мало знаком с триггерами в msql, поэтому ничего не могу сказать, надо почитать ... Так как же быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 17:19:34 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
авторЯ мало знаком с триггерами в msql, поэтому ничего не могу сказать, надо почитать ... Так как же быть? ИМХО: 1. на каждую таблу вешать свой триггер или 2. все действия по изменению/добавлению/удалению данных делать через ХП (как я уже говорил), а прямое изменение данных в таблицах запретить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 08:46:21 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
А зачем в КАЖДОЙ протоколируемой таблице создавать новый поля - пользователь и дата?:) Имхо - лучше протоколировать изменения по триггерам (если система написана), если только пишется - то использовать хп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 09:01:30 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
>Можно и из рабочей. Если несколько изменений, то запрос "А что именно поменял чел получается" сложный. Типа предудущую запись с максимальной датой, а если ее нет, то вставку кароче за..ся. Лучше не экономить тем более что особых требований по скорости к логу нет. Мне за два года она понадобилась раз пять, но зато ПОНАДОБИЛАСЬ ТАК ПОНАДОБИЛАСЬ. Типа кто стер тыщу документов;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 09:58:36 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
Читаем тут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 10:00:12 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
Резюме почле чтения тут: Таблички с логами в специальной базюке, совпадающие по структуре с исходными+Исполнитель,Дата,ТипОперации+Триггеры на первичные таблицы( или процедуры и потом только ими)- это гуд. Кароче, третий вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 10:29:16 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
Если по хорошему лог писать,то это целая история типа таблица-запись-поле-было-стало и куча отчетов для беглого анализа но у меня уже два года работает ленивый вариант с копированием целой записи в архивную таблицу правда я отслеживаю не изменение конкретного поля а документа в целом ибо все они имеют у меня состояния из которых только некоторые позволяют вносить изменения и я делаю копию записи только при смене состояния документа на редактируемое из достоинств результат (полная и исчерпывающая информация о истории изменений) достигается очень быстро (5-10 мин кодирования на одну таблицу + 5мин на форму просмтра эволюции) из недостатков существенная избыточность и как следствие раздувание таблицы лога при групповых операциях (недавно пришлось обрезать) Из опыта передостерегу от использования триггеров при существенном размере лога транзакции на изменение безбожно замедляются я в конце концов сделал формирование лога асинхронными процедурами. Также полезным будет предусмотреть удаление лога для документов из наглухо закрытых для изменения периодов(если таковые имеются) потому как у меня например лог используется только для текущих разборок с пользователем (типа сам дурак) и редко когда касается данных на пару месяцев назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 14:29:35 |
|
||
|
Как лучше отслеживать изменения производимые пользователями?
|
|||
|---|---|---|---|
|
#18+
Как вариант для обхода проблемм с замедлением транзакций при использовании триггеров рекоменндую сразу использовать две таблицы лога оперативную и архивную из триггера писать в оперативную а потом ее содержание сливать в архиную job-ом а оперативную чистить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2004, 14:42:54 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32588834&tid=1673419]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
210ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 537ms |

| 0 / 0 |
