问题:账号被锁定
SQL> select username,account_status from dba_users where username in('APP_BASE_NORTH','NORTH_STATS');
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
APP_BASE_NORTH LOCKED(TIMED)
NORTH_STATS LOCKED(TIMED)
查看是什么原因导致?
--查看用户使用的pofile
SQL> select profile from dba_users where username in('APP_BASE_NORTH','NORTH_STATS');
PROFILE
------------------------------
PF_NORTH_STATS
PF_APP_BASE_NORTH
--查看每个profile里具体的资源限制内容
set line 300
select * from dba_profiles where profile ='PF_NORTH_STATS';
SQL> set line 200
SQL> select * from dba_profiles where profile ='PF_NORTH_STATS';
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- ----------------------------------------
PF_NORTH_STATS COMPOSITE_LIMIT KERNEL DEFAULT
PF_NORTH_STATS SESSIONS_PER_USER KERNEL 100
PF_NORTH_STATS CPU_PER_SESSION KERNEL DEFAULT
PF_NORTH_STATS CPU_PER_CALL KERNEL DEFAULT
PF_NORTH_STATS LOGICAL_READS_PER_SESSION KERNEL DEFAULT
PF_NORTH_STATS LOGICAL_READS_PER_CALL KERNEL DEFAULT
PF_NORTH_STATS IDLE_TIME KERNEL DEFAULT
PF_NORTH_STATS CONNECT_TIME KERNEL DEFAULT
PF_NORTH_STATS PRIVATE_SGA KERNEL DEFAULT
PF_NORTH_STATS FAILED_LOGIN_ATTEMPTS PASSWORD DEFAULT
PF_NORTH_STATS PASSWORD_LIFE_TIME PASSWORD DEFAULT
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- ----------------------------------------
PF_NORTH_STATS PASSWORD_REUSE_TIME PASSWORD DEFAULT
PF_NORTH_STATS PASSWORD_REUSE_MAX PASSWORD DEFAULT
PF_NORTH_STATS PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT
PF_NORTH_STATS PASSWORD_LOCK_TIME PASSWORD DEFAULT
PF_NORTH_STATS PASSWORD_GRACE_TIME PASSWORD DEFAULT
16 rows selected.
--因为指定的limit的值都是default,查看default限定的值详情
select * from dba_profiles where profile ='DEFAULT';
SQL> select * from dba_profiles where profile ='DEFAULT';
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- ----------------------------------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- ----------------------------------------
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LOCK_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED
16 rows selected.
可以看到FAILED_LOGIN_ATTEMPTS的值为10,PASSWORD_LIFE_TIME为UNLIMITED
说明用户没有过期限制,但是用户尝试登录数据库的次数最大限制为10次,当达到10次以后,该用户的帐户就被锁定,当锁定时间超过了PASSWORD_LOCK_TIME设置的时间后,用户会自动解锁(当然在没有进行登录时状态不会发生变化,只有试图登录时状态才会发生变化)。但是该用户默认的PASSWORD_LOCK_TIME为UNLIMITED,所以需要DBA手动解锁。
--解决方式
alter user APP_BASE_NORTH account unlock;
alter user NORTH_STATS account unlock;
--解锁后查看状态为open
select username,account_status from dba_users where username in('APP_BASE_NORTH','NORTH_STATS');
--为了避免在出现此类问题,可以将FAILED_LOGIN_ATTEMPTS设置为UNLIMITED
alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;