„ORA-28000: the account is locked“ – понякога???

 Общи  Коментарите са изключени за „ORA-28000: the account is locked“ – понякога???
Авг. 082014
 

Това ме изненада, честно!

Един потребител ми се оплака, че си е объркал паролата няколко пъти и получава ORA-28000. Преди да го отключа, реших да проверя какво е станало – нали все пак потребителите са си потребители…

SQL> select account_status from dba_users where username = 'xxx';

ACCOUNT_STATUS
--------------------------------
OPEN

A! Шах с пешката. И започна един разговор…
– Ама сигурен ли си че е на тази база?
– Да!
(все пак проверих на всички бази, до които има достъп – навсякъде е OPEN)
– Ама сигурен ли си че използваш този потребител?
– Да!!
(все пак проверих всички потребители – ами има си някой заключени, но от месеци)
– Ама сигурен ли си че е точно тази грешка?
– Да!!! Веднъж минава, три-четири пъти ми дава тази грешка!
– WTF???
Това, че понякога минава ме втрещи още повече. Как, по дяволите, става това? Ако потребителя беше на по-малко то 1000 км, щях да поискам лично да дойде да ми покаже.
Но това нямаше да ми помогне…
Помолих потребителя да се закачи на Primary базата (вместо на Active DataGuard), за да мога да видя какво пише в DBA_AUDIT_SESSION. Никакъв проблем – всички логини бяха успешни.

Тогава ми проблесна какво може да са направили тия тарикати от Oracle. Веднъж като имах вярното предположение, намирането на нотата ми отне по-малко то 2 минути

ORA-28000 „the account is locked“ in the standby database, even after the account was unlocked in the primary. (Doc ID 1600401.1)

Applies to:
Oracle Database – Enterprise Edition – Version 11.1.0.6 to 11.2.0.4 [Release 11.1 to 11.2]
Information in this document applies to any platform.

Symptoms
A user’s account in an Active Dataguard standby database is locked, for example as a result of multiple logon attempts with a wrong password to that standby database. The user attempts to logon and gets an error ORA-28000 „the account is locked“. The database administrator unlock this user’s account in the primary database. Still, the user cannot connect to the standby, getting the same error ORA-28000.

Cause
A privileged user (a database administrator) must unlock account in the standby database. It is not enough to unlock the same account in the primary database. This is because the standby is open read-only and cannot update any tables. When a user’s account has to be locked on the standby database, it is locked only in memory there.

Solution
A privileged user (sysdba, the database administrator) must logon to the standby and unlock the account there. A message ORA-28015 „Account unlocked, but the database is open for read-only access“ confirms that the account is now unlocked in the standby database. From then on, the user can logon to the standby database without getting any error.

Това обясни не само защо в DBA_USERS всичко е наред, но и защо понякога успява
– първо, понеже базата е read-only, заключването не може да се отрази в DBA_USERS (демек USER$). За това като питам таблицата всичко е наред – там няма информация за заключването, тя се пази само в паметта на ADG instance. Което е някакъв странен компромис…
– понеже базата е RAC, а и очевидно това тайно местенце в паметта не е защитена от cache fusion, успеха в логването зависи от това на кой нод ще попаднеш. За това понякога става, а понякога – не.
– понеже на базата няма кой-знае-какъв load, успешно закачилите се сесии на потребителя на „не-заключения“ нод, колкото и мизерно натоварване да правят, са достатъчни, за да може server-side load-balancing да го хвърля по-често към „заключения“. Затова средно 1 от 4 логина минава.

Решението – пуснах и на двата нода на ADG:

SQL> alter user xxx account unlock;
alter user xxx account unlock
*
ERROR at line 1:
ORA-28015: Account unlocked, but the database is open for read-only access
 Posted by at 15:56