Oracle 版本: 19.15
OS 版本: Aix 7.2
問題描述:
以 schema level 將 11.2.0.4 的使用者 expdp 出來後,將其 impdp 至 19.15 產生了 ORA-39384: Warning: User SCOTT Has Been Locked And The Password Expired 這個錯誤:
Export From 11g DB: $ expdp \'/ as sysdba\' directory=expdir schemas=scott dumpfile=exp_scott%U.dmp logfile=exp_scott.log
Import to 19c DB: $ impdp \'/ as sysdba\' directory=impdir dumpfile= exp_scott%U.dmp logfile=imp_scott.log Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Master table "SYS"."SYS_IMPORT_FULL_01" successfully loaded/unloaded Starting "SYS"."SYS_IMPORT_FULL_01": "/******** AS SYSDBA" directory=impdir dumpfile=exp_scott%U.dmp logfile=imp_scott.log Processing object type SCHEMA_EXPORT/USER ORA-39384: Warning: User SCOTT Has Been Locked And The Password Expired … |
問題分析:
在 impdp 的過程當中,如果資料庫不存在需要的使用者,則會先行建立此使用者,這個訊息就是 impdp 一開始建立使用者的時候發生錯誤,使用者沒有建立起來,後續的物件自然也無法 import 成功。
ORA-39384 顯示使用者被 Locked 或者是密碼過期,可是檢查來源端 11g 的使用者卻沒有 Locked 或是密碼過期,為何 impdp 會無法建立此 User ?
這個問題來自於 Oracle 12c 之後對於安全性的嚴謹度加強,早期資料庫的使用者如果它的 password_versions (select password_versions from dba_users) 為 10G 或是更舊,那麼此使用者 impdp 到 12c 以上的資料庫就會產生此問題。
解決方法:
這個問題的解決思路在於讓 12c 以上的資料庫可以相容於舊資料庫的設定,於 $ORACLE_HOME/network/admin 底下的 sqlnet.ora 設定如下即可正常 impdp :
sqlnet.allowed_logon_version_server = 10 sqlnet.allowed_logon_version_client = 10 |