Oracle 11g - Database Job About User Lock
-
04-03-2021 - |
Question
I have an Oracle database (Oracle 11gR2) and I want to create a job. The job will trigger my procedure.
The procedure must comply with the rules I have specified below:
If a user's expiry_date value is EXPIRED (select username, account_status, lock_date, expiry_date from dba_users where account_status='EXPIRED';), it will lock this user.
If a user's expiry_date value is EXPIRED and if it is already lock state, it will not do anything.
Exclude internal schemas for this operation.
I searched it but I didn't find any clear solution for it.
How can I create this procedure?
Best regards,
Solution
create or replace procedure p1 as
begin
for u in (select username from dba_users where account_status in ('EXPIRED', 'EXPIRED(GRACE)') and username not in ('SYS', 'SYSTEM', '...'))
loop
execute immediate 'alter user "' || u.username || '" account lock';
end loop;
end;
/
For 12c and higher you could use the ORACLE_MAINTAINED='N'
for filtering the built-in users instead of the IN-list
.
Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange