#sql #db2 #ibm-cloud #db2-luw #audit-logging
#sql #db2 #ibm-cloud #db2-luw #аудит-ведение журнала
Вопрос:
не уверен, возможно ли это, но есть ли способ, предпочтительно SQL-запрос, который я мог бы запустить как администратор, чтобы узнать, какие инструкции SQL были выполнены, какими пользователями и сколько времени они выполнялись за определенный период времени.
Комментарии:
1. Какую версию / тип DB2 вы используете?
2. @MichaelS. Я использую тип: план предприятия — одиночный узел
3. Если вы запрашиваете только короткий период времени, если ваш authid имеет соответствующую авторизацию, и ваша рабочая нагрузка соответствующим образом настроена, поможет ли вам функция таблицы MON_GET_ACTIVITY?
Ответ №1:
То, что вы запрашиваете, обычно называется «аудит». Вы можете включить средство аудита Db2 в облачных экземплярах, например
create audit policy exec_policy categories execute status both error type normal;
audit database using policy exec_policy;
Вы не можете ограничить аудит выполнения инструкций только запросами; инструкции DML и DDL также будут записываться.
Затем вы будете регулярно перемещать записи аудита из журнала в таблицы аудита:
call audit.update()
и выберите данные:
select * from audit.execute
Более подробную информацию вы найдете в руководстве.
Обратите внимание, что аудит имеет определенные последствия для производительности, поскольку каждое проверяемое событие записывается синхронно.
Очевидно, что вы не можете вернуться назад во времени и зафиксировать события, которые уже завершились. Будут записаны только события, происходящие после включения аудита.
Ответ №2:
Вы можете создать или использовать существующий монитор событий для действий.
В его таблицах собрана информация о завершенных SQL-инструкциях с большим количеством показателей производительности.
У вас есть возможность собирать такую информацию для всей базы данных, конкретных объектов WLM (рабочие нагрузки, классы обслуживания) и даже для отдельных сеансов.