oracle - 我们如何安排作业在 Oracle (sql developer 或 Toad) 中运行,以触发最近连接到特定数据库的邮件
问题描述
有没有办法让我最近连接到特定数据库的所有用户连同他们的主机名一起。我想以作业的形式触发这个 Sql 或过程,并安排 oracle 中的作业每隔一小时运行一次。
请建议任何选项。
解决方案
下面的 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;
上面的代码没有经过测试,因为我的家用机器上没有设置邮件服务器。但是我之前已经做过好几次了,并且确信非常接近这个的东西应该可以工作。
推荐阅读
- flutter - 我如何在颤动中显示我的谷歌日历事件
- amazon-web-services - DNS 条件转发器和 Active Directory DNS 中的转发器有什么区别?
- javascript - 如何为反应图中的标记添加多行描述?
- scheme - eqv 的 R5RS Spec letrec 示例?
- text - 如何:带有 2 个文本字段的页面,点击按钮时替换字符
- typescript - 如何将键数组映射到对象属性类型
- python - 使用生成器对象字典进行多处理,TypeError:无法腌制“生成器”对象
- openpyxl - openpyxl 验证错误 schemas.openxmlformats.org/spreadsheetml/2006/main:color
- mongodb - 按多个字段对行进行分组并返回其他字段
- ios - 为什么每次我返回父视图时我的 viewWillAppear 方法都没有调用