This is the expected behavior. The account status is updated only when the user will attempt to connect to the database while the expiry date is updated more frequently( when the user gets created, when the associated profile is modified, when the user is
altered, etc. ). If an user is not connecting to the database after the expiry date has passed then the ACCOUNT_STATUS will remain set to OPEN.
When this account is connecting to the database, the current date/time is compared with the value of EXPIRY_DATE. If EXPIRY_DATE is older than the current date/time then the system will check whether the PASSWORD_GRACE_TIME parameter is defined. If
it is set then the grace period is started, the account status is updated to "EXPIRED(GRACE)" and the EXPIRY_DATE is updated to a date which shows when the the account will be locked out.