Приведенный ниже блок PL / SQL создает задание, которое просматривает контрольный журнал, создает список пользователей и хостов, которые вошли в систему за последний час, и отправляет результаты по электронной почте.
Прежде чем код заработает, вам, возможно, придется установить UTL_MAIL
:
sqlplus sys/<pwd>
SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql
SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.plb
Вам также может понадобиться установить параметр SMTP_OUT_SERVER
и, возможно, настроить ACL в базе данных, чтобы дать вам разрешение на отправку электронных писем. Просто следуйте сообщениям об ошибках и используйте Google, чтобы исправить их.
Если ваша база данных еще не проверяет соединения, запустите:
audit connect;
Наконец, создайте работу, как показано ниже. Это очень простое текстовое электронное письмо с использованием DBMS_SCHEDULER
, DBA_AUDIT_TRAIL
и UTL_MAIL
.
--Create an hourly job to email the last hours worth of logons.
begin
dbms_scheduler.create_job(
job_name => 'hourly_logons',
job_type => 'plsql_block',
start_date => systimestamp at time zone 'US/Eastern',
repeat_interval => 'freq=hourly;byminute=0;',
enabled => true,
job_action =>
q'[
declare
v_message varchar2(32767);
begin
--Create the message based on audit entries.
for rows in
(
select username, userhost, count(*) the_count
from dba_audit_trail
where timestamp > systimestamp - interval '1' hour
and action_name = 'LOGON'
group by username, userhost
order by 1,2
) loop
v_message := v_message || rows.username || chr(9) || rows.userhost || chr(9) ||
rows.the_count || chr(10);
end loop;
--Email the message
utl_mail.send
(
sender => 'some_address@some_domain.com',
recipients => 'some_address@some_domain.com',
subject => 'Logons in past hour',
message => v_message
);
end;
]'
);
end;
/
Возможно, вы захотите вручную запустить задание во время тестирования и проверить метаданные планировщика:
--Force the job to run:
begin
dbms_scheduler.run_job('HOURLY_LOGONS');
end;
/
--Check the job status and history.
select * from dba_scheduler_jobs where job_name = 'HOURLY_LOGONS';
select * from dba_scheduler_job_run_details where job_name = 'HOURLY_LOGONS' order by log_date desc;
Приведенный выше код не проверен, поскольку на моем домашнем компьютере не настроен почтовый сервер. Но я уже делал это несколько раз и уверен, что что-то очень близкое к этому должно сработать.