Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Създаване на тригери за одит в SQL Server

Искам само да изтъкна няколко точки:

Използвайте генератори на код Не можете да имате една процедура за проследяване на всички таблици, ще трябва да генерирате подобни, но различни тригери за всяка проследявана таблица. Този вид работа е най-подходяща за автоматизирано генериране на код. На ваше място бих използвал XSLT трансформация, за да генерирам кода от XML, а XML може да се генерира автоматично от метаданни. Това ви позволява лесно да поддържате тригерите, като ги регенерирате всеки път, когато правите промяна в одитната логика/структура или се добавя/променя целева таблица.

Помислете за планиране на капацитет за одита. Таблица за одит, която проследява всички промени в стойностите, ще бъде най-голямата таблица в базата данни:тя ще съдържа всички текущи данни и цялата история на текущите данни. Такава таблица ще увеличи размера на базата данни с 2-3 порядъка (x10, x100). И таблицата за одит бързо ще се превърне в тесното място на всичко:

  • всяка DML операция ще изисква ключалки в таблицата за одит
  • всички административни и поддържащи операции ще трябва да отговарят на размера на базата данни поради одит

Вземете предвид промените на схемата . Таблица с име 'Foo' може да бъде изпусната и по-късно може да се създаде друга таблица с име 'Foo'. Одитната пътека трябва да може да разграничи двата различни обекта. По-добре използвайте подхода на бавно променящите се измерения.

Помислете за необходимостта отефективно изтриване одитни записи. Когато периодът на запазване, продиктуван от правилата на вашата кандидатура, изтече, трябва да можете да изтриете необходимите записи за одит. Може да не изглежда толкова голяма работа сега, но 5 години по-късно, когато трябва да се направят първите записи, таблицата за одит е нараснала до 9,5 TB, това може да е проблем.

Помислете за необходимостта от запитване за одита . Структурата на одитната таблица трябва да бъде подготвена, за да отговори ефективно на запитванията за одит. Ако вашият одит не може да бъде запитан, тогава той няма стойност. Заявките ще се ръководят изцяло от вашите изисквания и само вие ги знаете, но повечето одиторски записи се запитват за интервали от време („какви промени са настъпили между 19:00 и 20:00 часа вчера?“), по обект („какви промени са настъпили в този запис в този“). таблица?“) или от автор („какви промени направи Боб в базата данни?“).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо 1899-12-30 е нулевата дата в Access / SQL Server вместо 12/31?

  2. Как да посоча литерал за дата, когато пиша SQL заявка от SQL Server, който е свързан с Oracle?

  3. Изтрийте данни чрез функция с таблично значение в SQL Server

  4. Ограничете връзка със SQL Server до конкретен IP адрес

  5. sql server 2008 management studio не проверява синтаксиса на моята заявка