如何创建Oracle存储过程以锁定超过90天未登录数据库的用户帐户

如何创建Oracle存储过程以锁定超过90天未登录数据库的用户帐户,oracle,plsql,procedure,Oracle,Plsql,Procedure,如何创建Oracle存储过程来锁定超过90天未登录到数据库的用户帐户 我假设我可以创建一个Profile对象并在数据库中列出资源参数,但我使用的是oracle11g,而且该功能似乎不存在 这就是我迄今为止所尝试的: select username from dba_audit_trail where action_name = 'LOGON' group by username having max(timestamp) < sysdate - 90 对于12c,它可以是: begi

如何创建Oracle存储过程来锁定超过90天未登录到数据库的用户帐户

我假设我可以创建一个Profile对象并在数据库中列出资源参数,但我使用的是oracle11g,而且该功能似乎不存在

这就是我迄今为止所尝试的:

select username from dba_audit_trail
where  action_name = 'LOGON'
group  by username
having max(timestamp) < sysdate - 90
对于12c,它可以是:

begin
for x in 
(select username
  from dba_users
  where last_login < sysdate - 90) 
loop
  execute immediate 'alter user ' || x.username || ' account lock';
end loop;
end;
如果您使用的是11g,您可以尝试查询循环:

begin
for x in 
(select username from dba_audit_trail
 where  action_name = 'LOGON'
 group  by username
 having max(timestamp) < sysdate - 90) 
loop
  execute immediate 'alter user ' || x.username || ' account lock';
end loop;
end;

到目前为止你试过什么?请发布您的尝试,解释您遇到的问题。从dba_audit_trail中选择用户名,其中操作_name='LOGON'组,按maxtimestampbegin for x in (select username from dba_audit_trail where action_name = 'LOGON' group by username having max(timestamp) < sysdate - 90) loop execute immediate 'alter user ' || x.username || ' account lock'; end loop; end;