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