su user oracle does not exist,Linux下oracle用户无法su切换的异常【终极解决方案_生产环境亲测有效】...
客戶的Oracle生產環境數據庫準備遷移到云服務器環境,于是先把新的云環境搭建好了dataguard后,準備到客戶當前的生產環境做expdp備份,由于有一段時間沒登錄這個舊環境了,登上去發現一個很離奇的現象,su - oracle無法切換,也沒有報錯信息!
[root@db1]# pwd
/root
[root@db1]# ps -ef |grep pmon
oracle 11342 1 0 Oct19 ? 00:01:38 ora_pmon_orcl
root 12679 12528 0 16:15 pts/0 00:00:00 grep pmon
[root@db1]# su - oracle
[root@db1]# pwd
/root
[root@db1]#
從上面信息看出,oracle其實是運行正常的,只是無法切換過去,并且oracle用戶信息也是存在的,查看/home/oracle,/etc/passwd,/etc/group里都還有oracle的信息。
同時查看secure log,如下
[root@db1]# tail -f /var/log/secure|grep su
Dec 26 22:11:14 18c su: pam_unix(su-l:session): session opened for user oracle by root(uid=0)
Dec 26 22:11:14 18c su: pam_unix(su-l:session): session closed for user oracle
Dec 26 22:12:22 18c su: pam_unix(su-l:session): session opened for user oracle by root(uid=0)
Dec 26 22:12:22 18c su: pam_unix(su-l:session): session closed for user oracle
Dec 26 22:12:30 18c su: pam_unix(su:session): session opened for user oracle by root(uid=0)
Dec 26 22:12:30 18c su: pam_unix(su:session): session closed for user oracle
Dec 26 22:12:45 18c su: pam_unix(su-l:session): session opened for user oracle by root(uid=0)
Dec 26 22:12:45 18c su: pam_unix(su-l:session): session closed for user oracle
Dec 26 22:15:44 18c su: pam_unix(su-l:session): session opened for user oracle by root(uid=0)
Dec 26 22:15:44 18c su: pam_unix(su-l:session): session closed for user oracle
于是進行百度排查,發現大多數說法是更改 /etc/security/limits.conf 里面的soft nofile和hard nofile連接上限值,因為連接數滿了,于是嘗試進行更改后,問題卻依舊沒有解決!
[root@db1]# vi /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
這個時候,按照這個思路,如果是連接數太多,我重啟系統總可以解決了吧?于是為了快速解決這個問題,嘗試reboot重啟linux,事后才覺得這個決定有點沖動冒失了!
那是因為重啟后,不僅問題依舊沒有解決,并且oracle數據庫沒自動起來(默認是沒設置自動啟動的),這個時候壓力山大啊!因為客戶在不斷催促業務中斷了,于是嘗試用root去啟動oracle,但最終是失敗的,只能用oralce用戶來操作!
絕望中想起能否通過重建oracle用戶來試試?!
于是網上查過一些資料,的確是可以這么干!但前提是需要確認好舊oracle用戶的id和所屬用戶組id那些信息,于是備份好這些信息后,刪除oracle用戶,再重新創建:
[root@db1]# userdel oracle
userdel: user oracle is currently used by process 2447
[root@db1]# kill -9 2447
這個時候提示有進程在使用oracle用戶,于是kill掉后,使用-r來直接刪除,然后再根據備份的信息重建:
[root@db1]# userdel -r oracle
[root@db1]# useradd -u 1101 -g oinstall -G dba oracle
[root@db1]# su - oracle
[oracle@db1]$ pwd
最后看到成功切換到oracle用戶的那一刻,終于長舒一口氣,畢竟這個操作風險還是挺大的,就怕強行刪除用戶,會影響關聯的oracle目錄和數據,還好最終是解決了!以此記錄一下,遇到的朋友可以作為參考!
總結
以上是生活随笔為你收集整理的su user oracle does not exist,Linux下oracle用户无法su切换的异常【终极解决方案_生产环境亲测有效】...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle绑定主键,oracle添加主
- 下一篇: linux命令行蜂鸣声太大,Linux关